switch_assert(member);
- lock_member(member);
if (switch_thread_rwlock_tryrdlock(member->conference->rwlock) != SWITCH_STATUS_SUCCESS) {
- unlock_member(member);
return SWITCH_STATUS_FALSE;
}
switch_queue_push(member->video_queue, img_copy);
}
switch_thread_rwlock_unlock(member->conference->rwlock);
- unlock_member(member);
return SWITCH_STATUS_SUCCESS;
}
}
}
- unlock_member(member);
switch_thread_rwlock_unlock(member->conference->rwlock);
return SWITCH_STATUS_SUCCESS;
return status;
}
+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_status_t status = SWITCH_STATUS_SUCCESS;
+ switch_media_handle_t *smh;
+
+ if (!(smh = session->media_handle)) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ switch_mutex_lock(smh->control_mutex);
+ if (!func) {
+ session->video_read_callback = NULL;
+ session->video_read_user_data = NULL;
+ } else if (session->video_read_callback) {
+ status = SWITCH_STATUS_FALSE;
+ } else {
+ session->video_read_callback = func;
+ session->video_read_user_data = user_data;
+ }
+ switch_mutex_unlock(smh->control_mutex);
+
+ return status;
+}
+
+SWITCH_DECLARE(switch_status_t) switch_core_session_video_read_callback(switch_core_session_t *session, switch_frame_t *frame)
+{
+ switch_media_handle_t *smh;
+ switch_status_t status = SWITCH_STATUS_CONTINUE;
+
+ if (!(smh = session->media_handle)) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ switch_mutex_lock(smh->control_mutex);
+
+ if (session->video_read_callback) {
+ status = session->video_read_callback(session, frame, session->video_read_user_data);
+ }
+
+ switch_mutex_unlock(smh->control_mutex);
+
+ return status;
+}
/* For Emacs:
switch_core_session_set_codec_slin(session, session->sdata);
}
-
-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