XMMS2

src/xmms/visualization/common.h

Go to the documentation of this file.
00001 /*  XMMS2 - X Music Multiplexer System
00002  *  Copyright (C) 2003-2009 XMMS2 Team
00003  *
00004  *  PLUGINS ARE NOT CONSIDERED TO BE DERIVED WORK !!!
00005  *
00006  *  This library is free software; you can redistribute it and/or
00007  *  modify it under the terms of the GNU Lesser General Public
00008  *  License as published by the Free Software Foundation; either
00009  *  version 2.1 of the License, or (at your option) any later version.
00010  *
00011  *  This library is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  *  Lesser General Public License for more details.
00015  */
00016 
00017 #ifndef __VISUALIZATION_COMMON_H__
00018 #define __VISUALIZATION_COMMON_H__
00019 
00020 #include <glib.h>
00021 
00022 #include "xmmspriv/xmms_log.h"
00023 #include "xmmspriv/xmms_visualization.h"
00024 #include "xmmsc/xmmsc_visualization.h"
00025 
00026 /**
00027  * The structures for a vis client
00028  */
00029 
00030 typedef struct {
00031     union {
00032         xmmsc_vis_unixshm_t shm;
00033         xmmsc_vis_udp_t udp;
00034     } transport;
00035     xmmsc_vis_transport_t type;
00036     unsigned short format;
00037     xmmsc_vis_properties_t prop;
00038 } xmms_vis_client_t;
00039 
00040 /* provided by object.c */
00041 xmms_vis_client_t *get_client (int32_t id);
00042 void delete_client (int32_t id);
00043 void send_data (int channels, int size, int16_t *buf);
00044 
00045 /* provided by unixshm.c / dummy.c */
00046 int32_t init_shm (xmms_visualization_t *vis, int32_t id, int32_t shmid, xmms_error_t *err);
00047 void cleanup_shm (xmmsc_vis_unixshm_t *t);
00048 gboolean write_start_shm (int32_t id, xmmsc_vis_unixshm_t *t, xmmsc_vischunk_t **dest);
00049 void write_finish_shm (int32_t id, xmmsc_vis_unixshm_t *t, xmmsc_vischunk_t *dest);
00050 
00051 gboolean write_shm (xmmsc_vis_unixshm_t *t, xmms_vis_client_t *c, int32_t id, struct timeval *time, int channels, int size, short *buf);
00052 
00053 /* provided by udp.c */
00054 int32_t init_udp (xmms_visualization_t *vis, int32_t id, xmms_error_t *err);
00055 void cleanup_udp (xmmsc_vis_udp_t *t, xmms_socket_t socket);
00056 gboolean write_udp (xmmsc_vis_udp_t *t, xmms_vis_client_t *c, int32_t id, struct timeval *time, int channels, int size, short *buf, int socket);
00057 
00058 /* provided by format.c */
00059 void fft_init (void);
00060 short fill_buffer (int16_t *dest, xmmsc_vis_properties_t* prop, int channels, int size, short *src);
00061 
00062 /* never call a fetch without a guaranteed release following! */
00063 #define x_fetch_client(id) \
00064     g_mutex_lock (vis->clientlock); \
00065     c = get_client (id); \
00066     if (!c) { \
00067         xmms_error_set (err, XMMS_ERROR_INVAL, "invalid server-side identifier provided"); \
00068         g_mutex_unlock (vis->clientlock); \
00069         return -1; \
00070     }
00071 #define x_release_client() \
00072     g_mutex_unlock (vis->clientlock);
00073 
00074 /**
00075  * The structures for the vis module
00076  */
00077 
00078 struct xmms_visualization_St {
00079     xmms_object_t object;
00080     xmms_output_t *output;
00081     xmms_socket_t socket;
00082     GIOChannel *socketio;
00083 
00084     GMutex *clientlock;
00085     int32_t clientc;
00086     xmms_vis_client_t **clientv;
00087 };
00088 
00089 #endif