]> sjero.net Git - linphone/commitdiff
Moved the 'video frame decoded' callback from Core to LinphoneCall
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@linphone.org>
Fri, 30 Mar 2012 11:06:19 +0000 (13:06 +0200)
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@linphone.org>
Fri, 30 Mar 2012 12:16:38 +0000 (14:16 +0200)
coreapi/linphonecall.c
coreapi/linphonecore.h
coreapi/private.h
mediastreamer2

index 433d0ce26606f0139cd0576fef238181e6bf2f45..35e84090218399c3ace50ff8e247d55ecb195067 100644 (file)
@@ -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;
index 4581d24fa92dbde61da58b270fbd359010180e7b..9ed6297107e65ccac6a5272bf9b73c8a10a123e8 100644 (file)
@@ -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; /**<Notifies on change in the encryption of call streams */
-    CallFirstVideoFrameCb call_first_video_frame; /**<Notifies on first successful video frame decoding */
-       LinphoneTransferStateChanged transfer_state_changed; /**<Notifies when a transfer is in progress */
+    LinphoneTransferStateChanged transfer_state_changed; /**<Notifies when a transfer is in progress */
        BuddyInfoUpdated buddy_info_updated; /**< a LinphoneFriend's BuddyInfo has changed*/
        NotifyReceivedCb notify_recv; /**< Other notifications*/
        DisplayStatusCb display_status; /**< Callback that notifies various events with human readable text.*/
index c77b66d1b1bddbe99a196341742cb334d297645e..425b51008e39ca4aadf2268aa3347acbecd72681 100644 (file)
@@ -74,6 +74,12 @@ struct _LinphoneCallParams{
        bool_t pad;
        
 };
+    
+typedef struct _CallCallbackObj
+{
+    LinphoneCallCbFunc _func;
+    void * _user_data;
+}CallCallbackObj;
 
 static const int linphone_call_magic=0x3343;
 
@@ -124,6 +130,7 @@ struct _LinphoneCall
        bool_t auth_token_verified;
        bool_t defer_update;
        bool_t was_automatically_paused;
+    CallCallbackObj nextVideoFrameDecoded;
 };
 
 
index 7af64431dde94b21e0313ced873726462b4f5f32..6241784466c0032b701cbb00d4ddab1db120bbf0 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 7af64431dde94b21e0313ced873726462b4f5f32
+Subproject commit 6241784466c0032b701cbb00d4ddab1db120bbf0