00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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
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
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
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
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
00059 void fft_init ();
00060 short fill_buffer (int16_t *dest, xmmsc_vis_properties_t* prop, int channels, int size, short *src);
00061
00062
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
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