]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7500: factor back in video_thread callback and move it to the video_read_frame
authorAnthony Minessale <anthm@freeswitch.org>
Sat, 17 Jan 2015 00:15:31 +0000 (18:15 -0600)
committerMichael Jerris <mike@jerris.com>
Thu, 28 May 2015 17:46:53 +0000 (12:46 -0500)
src/include/private/switch_core_pvt.h
src/include/switch_core.h
src/include/switch_types.h
src/switch_core_media.c
src/switch_core_session.c

index f0699a7f8edd69d2ab44b9c69b24554c3ffb4cd3..78e067b3362db92bae8d700aeecfb66623694a9a 100644 (file)
@@ -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;
 };
 
index f234fb129fbaab282d2beea182f9987a60669f15..261ea97502087ddf0291f81495db014ed150e2e5 100644 (file)
@@ -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);
index 6fc8b516dc351bf9a3cb3df499e7f11030ce171e..1ce561721c53eb8259b788fb3678565a526ea3aa 100644 (file)
@@ -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);
index ee7b44e22467aedd88543a592dd33b28d371fca3..9251f88748494e5a04a8ae702ae5838ee41165cd 100644 (file)
@@ -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;
 }
 
index cce9acacfda39181b1d08afe7646e1e6ffafd63d..5f0d126157bda25b9352c6563ed319f88f130416 100644 (file)
@@ -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