From a69938c3d5703cc375d15f5cba755dd457b8f357 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 16 Jan 2015 18:15:31 -0600 Subject: [PATCH] FS-7500: factor back in video_thread callback and move it to the video_read_frame --- src/include/private/switch_core_pvt.h | 3 ++- src/include/switch_core.h | 5 +++++ src/include/switch_types.h | 1 + src/switch_core_media.c | 4 ++++ src/switch_core_session.c | 25 +++++++++++++++++++++++++ 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/include/private/switch_core_pvt.h b/src/include/private/switch_core_pvt.h index f0699a7f8e..78e067b336 100644 --- a/src/include/private/switch_core_pvt.h +++ b/src/include/private/switch_core_pvt.h @@ -78,7 +78,6 @@ #endif #endif - /* #define DEBUG_ALLOC */ #define DO_EVENTS @@ -188,6 +187,8 @@ struct switch_core_session { switch_media_handle_t *media_handle; uint32_t decoder_errors; + switch_core_video_thread_callback_func_t *video_read_callback; + void *video_read_user_data; switch_slin_data_t *sdata; }; diff --git a/src/include/switch_core.h b/src/include/switch_core.h index f234fb129f..261ea97502 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -2313,6 +2313,11 @@ SWITCH_DECLARE(uint8_t) switch_core_session_compare(switch_core_session_t *a, sw */ SWITCH_DECLARE(uint8_t) switch_core_session_check_interface(switch_core_session_t *session, const switch_endpoint_interface_t *endpoint_interface); +SWITCH_DECLARE(switch_status_t) switch_core_session_set_video_read_callback(switch_core_session_t *session, + switch_core_video_thread_callback_func_t func, void *user_data); + +SWITCH_DECLARE(switch_status_t) switch_core_session_video_read_callback(switch_core_session_t *session, switch_frame_t *frame); + SWITCH_DECLARE(switch_hash_index_t *) switch_core_mime_index(void); SWITCH_DECLARE(const char *) switch_core_mime_ext2type(const char *ext); SWITCH_DECLARE(const char *) switch_core_mime_type2ext(const char *type); diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 6fc8b516dc..1ce561721c 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -2163,6 +2163,7 @@ typedef struct switch_console_callback_match switch_console_callback_match_t; typedef void (*switch_media_bug_exec_cb_t)(switch_media_bug_t *bug, void *user_data); +typedef switch_status_t (switch_core_video_thread_callback_func_t) (switch_core_session_t *session, switch_frame_t *frame, void *user_data); typedef void (*switch_cap_callback_t) (const char *var, const char *val, void *user_data); typedef switch_status_t (*switch_console_complete_callback_t) (const char *, const char *, switch_console_callback_match_t **matches); typedef switch_bool_t (*switch_media_bug_callback_t) (switch_media_bug_t *, void *, switch_abc_type_t); diff --git a/src/switch_core_media.c b/src/switch_core_media.c index ee7b44e224..9251f88748 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -9969,6 +9969,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_video_frame(switch_core done: + if (status == SWITCH_STATUS_SUCCESS) { + switch_core_session_video_read_callback(session, *frame); + } + return status; } diff --git a/src/switch_core_session.c b/src/switch_core_session.c index cce9acacfd..5f0d126157 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -3069,6 +3069,31 @@ SWITCH_DECLARE(void) switch_core_session_raw_read(switch_core_session_t *session } +SWITCH_DECLARE(switch_status_t) switch_core_session_set_video_read_callback(switch_core_session_t *session, + switch_core_video_thread_callback_func_t func, void *user_data) +{ + if (!func) { + session->video_read_callback = NULL; + session->video_read_user_data = NULL; + return SWITCH_STATUS_SUCCESS; + } else if (session->video_read_callback) { + return SWITCH_STATUS_FALSE; + } else { + session->video_read_callback = func; + session->video_read_user_data = user_data; + return SWITCH_STATUS_SUCCESS; + } +} + +SWITCH_DECLARE(switch_status_t) switch_core_session_video_read_callback(switch_core_session_t *session, switch_frame_t *frame) +{ + if (session->video_read_callback) { + return session->video_read_callback(session, frame, session->video_read_user_data); + } + + return SWITCH_STATUS_CONTINUE; +} + /* For Emacs: * Local Variables: * mode:c