24 #ifdef _SEM_SEMUN_UNDEFINED
28 unsigned short *array;
29 struct seminfo *__buf;
36 struct shmid_ds shm_desc;
53 buffer = shmat (shmid, NULL, 0);
54 if (buffer == (
void*)-1) {
59 shmctl (shmid, IPC_STAT, &shm_desc);
63 semid = semget (IPC_PRIVATE, 2, S_IRWXU + S_IRWXG + S_IRWXO);
73 semctl (semid, 0, SETVAL, semopts);
75 semctl (semid, 1, SETVAL, semopts);
88 xmms_log_info (
"Visualization client %d initialised using Unix SHM",
id);
95 semctl (t->
semid, 0, IPC_RMID, 0);
105 struct sembuf op = { 0, -1, IPC_NOWAIT };
107 while (semop (t->
semid, &op, 1) == -1) {
114 perror (
"Skipping visualization package");
128 struct sembuf op = { 1, +1, 0 };
130 if (semop (t->
semid, &op, 1) == -1) {
132 g_error (
"visualization increment_client: %s\n", strerror (errno));
148 dest->
size = htons (res);
158 struct shmid_ds shm_desc;
161 if (shmctl (t->
shmid, IPC_STAT, &shm_desc) == -1) {
162 g_error (
"Checking SHM attachments failed: %s\n", strerror (errno));
164 if (shm_desc.shm_nattch == 1) {
168 if (shm_desc.shm_nattch != 2) {
169 g_error (
"Unbelievable # of SHM attachments: %lu\n",
170 (
unsigned long) shm_desc.shm_nattch);
173 if (!decrement_server (t)) {
185 increment_client (t);
xmmsc_vischunk_t * buffer
gboolean write_start_shm(int32_t id, xmmsc_vis_unixshm_t *t, xmmsc_vischunk_t **dest)
xmmsc_vis_properties_t prop
The structures for a vis client.
void write_finish_shm(int32_t id, xmmsc_vis_unixshm_t *t, xmmsc_vischunk_t *dest)
union xmms_vis_client_t::@2 transport
void cleanup_shm(xmmsc_vis_unixshm_t *t)
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,...)
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)
int32_t init_shm(xmms_visualization_t *vis, int32_t id, int32_t shmid, xmms_error_t *err)
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)