25 #ifdef _SEM_SEMUN_UNDEFINED 29 unsigned short *array;
30 struct seminfo *__buf;
37 struct shmid_ds shm_desc;
54 buffer = shmat (shmid, NULL, 0);
55 if (buffer == (
void*)-1) {
60 shmctl (shmid, IPC_STAT, &shm_desc);
64 semid = semget (IPC_PRIVATE, 2, S_IRWXU + S_IRWXG + S_IRWXO);
74 semctl (semid, 0, SETVAL, semopts);
76 semctl (semid, 1, SETVAL, semopts);
89 xmms_log_info (
"Visualization client %d initialised using Unix SHM",
id);
96 semctl (t->
semid, 0, IPC_RMID, 0);
106 struct sembuf op = { 0, -1, IPC_NOWAIT };
108 while (semop (t->
semid, &op, 1) == -1) {
115 perror (
"Skipping visualization package");
129 struct sembuf op = { 1, +1, 0 };
131 if (semop (t->
semid, &op, 1) == -1) {
133 g_error (
"visualization increment_client: %s\n", strerror (errno));
149 dest->
size = htons (res);
159 struct shmid_ds shm_desc;
162 if (shmctl (t->
shmid, IPC_STAT, &shm_desc) == -1) {
163 g_error (
"Checking SHM attachments failed: %s\n", strerror (errno));
165 if (shm_desc.shm_nattch == 1) {
169 if (shm_desc.shm_nattch != 2) {
170 g_error (
"Unbelievable # of SHM attachments: %lu\n",
171 (
unsigned long) shm_desc.shm_nattch);
174 if (!decrement_server (t)) {
186 increment_client (t);
xmmsc_vischunk_t * buffer
xmmsc_vis_properties_t prop
The structures for a vis client.
union xmms_vis_client_t::@2 transport
short fill_buffer(int16_t *dest, xmmsc_vis_properties_t *prop, int channels, int size, short *src)
#define x_fetch_client(id)
xmmsc_vis_transport_t type
#define x_release_client()
#define xmms_log_info(fmt,...)
void write_finish_shm(int32_t id, xmmsc_vis_unixshm_t *t, xmmsc_vischunk_t *dest)
void cleanup_shm(xmmsc_vis_unixshm_t *t)
data describing a unixshm transport
void delete_client(int32_t id)
Package format for vis data, encapsulated by unixshm or udp transport.
G_BEGIN_DECLS struct xmms_error_St xmms_error_t
int16_t data[2 *XMMSC_VISUALIZATION_WINDOW_SIZE]
void tv2net(int32_t *d, struct timeval *t)
gboolean write_start_shm(int32_t id, xmmsc_vis_unixshm_t *t, xmmsc_vischunk_t **dest)
The structures for the vis module.
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)
int32_t init_shm(xmms_visualization_t *vis, int32_t id, int32_t shmid, xmms_error_t *err)