diff --git a/src/audio_call.c b/src/audio_call.c index 1b93731..e207b7a 100644 --- a/src/audio_call.c +++ b/src/audio_call.c @@ -186,7 +186,7 @@ void read_device_callback(const int16_t* captured, uint32_t size, void* data) void write_device_callback(uint32_t friend_number, const int16_t* PCM, uint16_t size) { - if (friend_number >= 0 && CallControl.calls[friend_number].ttas) + if ( CallControl.calls[friend_number].ttas ) write_out(CallControl.calls[friend_number].out_idx, PCM, size, CallControl.audio_channels); } diff --git a/src/video_call.c b/src/video_call.c index ea1e0f4..99f810b 100644 --- a/src/video_call.c +++ b/src/video_call.c @@ -294,10 +294,10 @@ void cmd_list_video_devices(WINDOW *window, ToxWindow *self, Tox *m, int argc, c VideoDeviceType type; if ( strcasecmp(argv[1], "in") == 0 ) /* Input devices */ - type = input; + type = vdt_input; else if ( strcasecmp(argv[1], "out") == 0 ) /* Output devices */ - type = output; + type = vdt_output; else { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid type: %s", argv[1]); @@ -327,10 +327,10 @@ void cmd_change_video_device(WINDOW *window, ToxWindow *self, Tox *m, int argc, VideoDeviceType type; if ( strcmp(argv[1], "in") == 0 ) /* Input devices */ - type = input; + type = vdt_input; else if ( strcmp(argv[1], "out") == 0 ) /* Output devices */ - type = output; + type = vdt_output; else { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid type: %s", argv[1]); @@ -371,10 +371,10 @@ void cmd_ccur_video_device(WINDOW *window, ToxWindow *self, Tox *m, int argc, ch VideoDeviceType type; if ( strcmp(argv[1], "in") == 0 ) /* Input devices */ - type = input; + type = vdt_input; else if ( strcmp(argv[1], "out") == 0 ) /* Output devices */ - type = output; + type = vdt_output; else { line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid type: %s", argv[1]); @@ -404,8 +404,8 @@ void cmd_ccur_video_device(WINDOW *window, ToxWindow *self, Tox *m, int argc, ch } else { /* TODO: check for failure */ - close_video_device(input, this_call->vin_idx); - open_video_device(input, selection, &this_call->vin_idx); + close_video_device(vdt_input, this_call->vin_idx); + open_video_device(vdt_input, selection, &this_call->vin_idx); register_video_device_callback(self->num, this_call->vin_idx, read_video_device_callback, &self->num); } } diff --git a/src/video_device.c b/src/video_device.c index 33721cb..60cb868 100644 --- a/src/video_device.c +++ b/src/video_device.c @@ -65,9 +65,12 @@ typedef struct VideoDevice { void* cb_data; /* Data to be passed to callback */ int32_t friend_number; /* ToxAV friend number */ +#ifdef __linux__ struct v4l2_format fmt; struct VideoBuffer *buffers; - uint32_t n_buffers; + uint32_t n_buffers; +#else /* __OSX__ */ +#endif uint32_t ref_count; int32_t selection; @@ -660,10 +663,13 @@ void* video_thread_poll (void* arg) // TODO: maybe use thread for every input so XFlush(device->x_display); free(img_data); +#ifdef __linux__ if ( -1 == xioctl(device->fd, VIDIOC_QBUF, &buf) ) { unlock; continue; } +#else /* __OSX__ */ +#endif } unlock; } @@ -692,7 +698,7 @@ VideoDeviceError close_video_device(VideoDeviceType type, uint32_t device_idx) if ( !device->ref_count ) { if ( type == vdt_input ) { - +#ifdef __linux__ enum v4l2_buf_type buf_type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if( -1 == xioctl(device->fd, VIDIOC_STREAMOFF, &buf_type) ) {} @@ -701,12 +707,18 @@ VideoDeviceError close_video_device(VideoDeviceType type, uint32_t device_idx) if ( -1 == munmap(device->buffers[i].start, device->buffers[i].length) ) { } } +#else /* __OSX__ */ +#endif + close(device->fd); XDestroyWindow(device->x_display, device->x_window); XFlush(device->x_display); XCloseDisplay(device->x_display); pthread_mutex_destroy(device->mutex); +#ifdef __linux__ free(device->buffers); +#else /* __OSX__ */ +#endif free(device); } else { vpx_img_free(&device->input);