From d481382fb4c55300737d1f6fc02cecb4d509cc60 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Fri, 30 Mar 2012 13:06:19 +0200 Subject: [PATCH] Moved the 'video frame decoded' callback from Core to LinphoneCall --- coreapi/linphonecall.c | 14 +++++++++++--- coreapi/linphonecore.h | 10 ++++++---- coreapi/private.h | 7 +++++++ mediastreamer2 | 2 +- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 433d0ce2..35e84090 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -856,8 +856,8 @@ static void video_stream_event_cb(void *user_pointer, const MSFilter *f, const u break; case MS_VIDEO_DECODER_FIRST_IMAGE_DECODED: ms_message("First video frame decoded successfully"); - if (call->core->vtable.call_first_video_frame != NULL) - call->core->vtable.call_first_video_frame(call->core, call); + if (call->nextVideoFrameDecoded._func != NULL) + call->nextVideoFrameDecoded._func(call, call->nextVideoFrameDecoded._user_data); break; default: ms_warning("Unhandled event %i", event_id); @@ -866,6 +866,14 @@ static void video_stream_event_cb(void *user_pointer, const MSFilter *f, const u } #endif +void linphone_call_set_next_video_frame_decoded_callback(LinphoneCall *call, LinphoneCallCbFunc cb, void* user_data) { + call->nextVideoFrameDecoded._func = cb; + call->nextVideoFrameDecoded._user_data = user_data; +#ifdef VIDEO_ENABLED + ms_filter_call_method_noarg(call->videostream->decoder, MS_VIDEO_DECODER_RESET_FIRST_IMAGE_NOTIFICATION); +#endif +} + void linphone_call_init_media_streams(LinphoneCall *call){ LinphoneCore *lc=call->core; SalMediaDescription *md=call->localdesc; @@ -1284,6 +1292,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, const char *cna cam=get_nowebcam_device(); } if (!is_inactive){ + call->log->video_enabled = TRUE; video_stream_set_direction (call->videostream, dir); ms_message("%s lc rotation:%d\n", __FUNCTION__, lc->device_rotation); video_stream_set_device_rotation(call->videostream, lc->device_rotation); @@ -1342,7 +1351,6 @@ void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_mut call->current_params.has_video=FALSE; if (call->videostream!=NULL) { linphone_call_start_video_stream(call,cname,all_inputs_muted); - call->log->video_enabled = TRUE; } call->all_muted=all_inputs_muted; diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 4581d24f..9ed62971 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -226,6 +226,9 @@ typedef struct _LinphoneVideoPolicy LinphoneVideoPolicy; **/ struct _LinphoneCall; typedef struct _LinphoneCall LinphoneCall; + +/** Callback prototype */ +typedef void (*LinphoneCallCbFunc)(struct _LinphoneCall *call,void * user_data); /** * LinphoneCallState enum represents the different state a call can reach into. @@ -287,6 +290,8 @@ void linphone_call_set_authentication_token_verified(LinphoneCall *call, bool_t void linphone_call_send_vfu_request(LinphoneCall *call); void *linphone_call_get_user_pointer(LinphoneCall *call); void linphone_call_set_user_pointer(LinphoneCall *call, void *user_pointer); +void linphone_call_set_next_video_frame_decoded_callback(LinphoneCall *call, LinphoneCallCbFunc cb, void* user_data); + /** * Enables or disable echo cancellation for this call * @param call @@ -614,8 +619,6 @@ typedef void (*DtmfReceived)(struct _LinphoneCore* lc, LinphoneCall *call, int d typedef void (*ReferReceived)(struct _LinphoneCore *lc, const char *refer_to); /** Callback prototype */ typedef void (*BuddyInfoUpdated)(struct _LinphoneCore *lc, LinphoneFriend *lf); -/** Callback prototype */ -typedef void (*CallFirstVideoFrameCb)(struct _LinphoneCore *lc, LinphoneCall *call); /** Callback prototype for in progress transfers. The new_call_state is the state of the call resulting of the transfer, at the other party. */ typedef void (*LinphoneTransferStateChanged)(struct _LinphoneCore *lc, LinphoneCall *transfered, LinphoneCallState new_call_state); @@ -635,8 +638,7 @@ typedef struct _LinphoneVTable{ DtmfReceived dtmf_received; /**< A dtmf has been received received */ ReferReceived refer_received; /**< An out of call refer was received */ CallEncryptionChangedCb call_encryption_changed; /**