};
struct record_helper {
- switch_core_session_t *session;
switch_mutex_t *mutex;
int fd;
- int up;
switch_size_t shared_ts;
};
-static void *SWITCH_THREAD_FUNC record_video_thread(switch_thread_t *thread, void *obj)
+static void record_video_thread(switch_core_session_t *session, void *obj)
{
struct record_helper *eh = obj;
- switch_core_session_t *session = eh->session;
switch_channel_t *channel = switch_core_session_get_channel(session);
switch_status_t status;
switch_frame_t *read_frame;
int bytes;
- eh->up = 1;
- while (switch_channel_ready(channel) && eh->up) {
+ while (switch_channel_ready(channel)) {
status = switch_core_session_read_video_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
if (!SWITCH_READ_ACCEPTABLE(status)) {
switch_core_session_write_video_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0);
}
- eh->up = 0;
- return NULL;
}
SWITCH_STANDARD_APP(record_fsv_function)
switch_frame_t *read_frame;
switch_channel_t *channel = switch_core_session_get_channel(session);
struct record_helper eh = { 0 };
- switch_thread_t *thread;
- switch_threadattr_t *thd_attr = NULL;
int fd;
switch_mutex_t *mutex = NULL;
switch_codec_t codec, *vid_codec;
switch_mutex_init(&mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
eh.mutex = mutex;
eh.fd = fd;
- eh.session = session;
- switch_threadattr_create(&thd_attr, switch_core_session_get_pool(session));
- switch_threadattr_detach_set(thd_attr, 1);
- switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
- switch_thread_create(&thread, thd_attr, record_video_thread, &eh, switch_core_session_get_pool(session));
+ switch_core_media_start_video_function(session, record_video_thread, &eh);
}
if (switch_channel_test_flag(channel, CF_BREAK)) {
switch_channel_clear_flag(channel, CF_BREAK);
- eh.up = 0;
break;
}
char sbuf[2] = {dtmf.digit, '\0'};
switch_channel_set_variable(channel, SWITCH_PLAYBACK_TERMINATOR_USED, sbuf);
- eh.up = 0;
break;
}
}
if (!SWITCH_READ_ACCEPTABLE(status)) {
- eh.up = 0;
break;
}
end:
- if (eh.up) {
- while (eh.up) {
- switch_cond_next();
- }
- }
-
if (fd > -1) {
close(fd);
}
-
+ switch_core_media_end_video_function(session);
switch_core_session_set_read_codec(session, NULL);
switch_core_codec_destroy(&codec);
done:
-
- switch_channel_clear_flag(channel, CF_VIDEO_PASSIVE);
-
+ switch_core_session_video_reset(session);
}
SWITCH_STANDARD_APP(play_fsv_function)