From 3f6e745654ba7e9d464b5f32ed27af2d0af2729b Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Fri, 21 Jan 2011 16:15:19 +0100 Subject: [PATCH 1/2] Added picture fast update request on video decoder error. --- console/sipomatic.c | 2 +- coreapi/linphonecall.c | 19 ++++++++++++++++++- coreapi/linphonecore.c | 8 ++++---- coreapi/lsd.c | 2 +- coreapi/sal_eXosip2.c | 17 +++++++++-------- mediastreamer2 | 2 +- oRTP | 2 +- 7 files changed, 35 insertions(+), 17 deletions(-) diff --git a/console/sipomatic.c b/console/sipomatic.c index 9e053b24b..e0d3f67e7 100644 --- a/console/sipomatic.c +++ b/console/sipomatic.c @@ -66,7 +66,7 @@ void sipomatic_process_event(Sipomatic *obj,eXosip_event_t *ev) } -void endoffile_cb(void *ud, unsigned int ev,void * arg){ +void endoffile_cb(void *ud, MSFilter *f, unsigned int ev,void * arg){ Call*call=(Call*)ud; call->eof=1; } diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index db5c45096..577de7187 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -572,6 +572,21 @@ static void rendercb(void *data, const MSPicture *local, const MSPicture *remote } #endif +#ifdef VIDEO_ENABLED +static void video_stream_event_cb(void *user_pointer, const MSFilter *f, const unsigned int event_id, const void *args){ + ms_warning("In linphonecall.c: video_stream_event_cb"); + switch (event_id) { + case MS_VIDEO_DECODER_DECODING_ERRORS: + ms_warning("CAse is MS_VIDEO_DECODER_DECODING_ERRORS"); + linphone_call_send_vfu_request((LinphoneCall*) user_pointer); + break; + default: + ms_warning("Unhandled event %i", event_id); + break; + } +} +#endif + void linphone_call_init_media_streams(LinphoneCall *call){ LinphoneCore *lc=call->core; SalMediaDescription *md=call->localdesc; @@ -606,6 +621,7 @@ void linphone_call_init_media_streams(LinphoneCall *call){ call->videostream=video_stream_new(md->streams[1].port,linphone_core_ipv6_enabled(lc)); if( lc->video_conf.displaytype != NULL) video_stream_set_display_filter_name(call->videostream,lc->video_conf.displaytype); + video_stream_set_event_callback(call->videostream,video_stream_event_cb, call); #ifdef TEST_EXT_RENDERER video_stream_set_render_callback(call->videostream,rendercb,NULL); #endif @@ -979,6 +995,7 @@ void linphone_call_stop_media_streams(LinphoneCall *call){ **/ void linphone_call_send_vfu_request(LinphoneCall *call) { - sal_call_send_vfu_request(call->op); + if (LinphoneCallStreamsRunning == linphone_call_get_state(call)) + sal_call_send_vfu_request(call->op); } #endif diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 40d4257b0..3b04941a4 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -1616,9 +1616,9 @@ static void linphone_core_do_plugin_tasks(LinphoneCore *lc){ * - handles timers and timeout * - performs registration to proxies * - authentication retries - * The application MUST call this function from periodically, in its main loop. - * Be careful that this function must be call from the same thread as - * other liblinphone methods. In not the case make sure all liblinphone calls are + * The application MUST call this function periodically, in its main loop. + * Be careful that this function must be called from the same thread as + * other liblinphone methods. If it is not the case make sure all liblinphone calls are * serialized with a mutex. **/ void linphone_core_iterate(LinphoneCore *lc){ @@ -2849,7 +2849,7 @@ const char *linphone_core_get_ring(const LinphoneCore *lc){ return lc->sound_conf.local_ring; } -static void notify_end_of_ring(void *ud ,unsigned int event, void * arg){ +static void notify_end_of_ring(void *ud, MSFilter *f, unsigned int event, void *arg){ LinphoneCore *lc=(LinphoneCore*)ud; lc->preview_finished=1; } diff --git a/coreapi/lsd.c b/coreapi/lsd.c index 3772c8911..1ad7c7db4 100644 --- a/coreapi/lsd.c +++ b/coreapi/lsd.c @@ -156,7 +156,7 @@ void *lsd_player_get_user_pointer(const LsdPlayer *p){ return p->user_data; } -static void lsd_player_on_eop(void * userdata, unsigned int id, void *arg){ +static void lsd_player_on_eop(void * userdata, MSFilter *f, unsigned int id, void *arg){ LsdPlayer *p=(LsdPlayer *)userdata; if (p->eop_cb!=NULL) p->eop_cb(p); diff --git a/coreapi/sal_eXosip2.c b/coreapi/sal_eXosip2.c index 356b7dca2..4203cb85e 100644 --- a/coreapi/sal_eXosip2.c +++ b/coreapi/sal_eXosip2.c @@ -1241,14 +1241,14 @@ static bool_t call_failure(Sal *sal, eXosip_event_t *ev){ void sal_call_send_vfu_request(SalOp *h){ osip_message_t *msg=NULL; char info_body[] = - "\n" - "\n" - " \n" - " \n" - " \n" - " \n" - " \n" - "\n"; + "" + "" + " " + " " + " " + " " + " " + ""; char clen[10]; @@ -1260,6 +1260,7 @@ void sal_call_send_vfu_request(SalOp *h){ snprintf(clen,sizeof(clen),"%lu",(unsigned long)strlen(info_body)); osip_message_set_content_length(msg,clen); eXosip_call_send_request(h->did,msg); + ms_message("Sending VFU request !"); } eXosip_unlock(); } diff --git a/mediastreamer2 b/mediastreamer2 index e3fe3eb28..9499aa102 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit e3fe3eb2896b03a41b82e0b864f4e56b0666a2e7 +Subproject commit 9499aa102ece0ce8d065dfd89fa182a4151df5c5 diff --git a/oRTP b/oRTP index 37c60a638..c8b487f32 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 37c60a638fd108404ca437e2bbef78f227178450 +Subproject commit c8b487f32fe225f8b1961754db9140eb282a0d28 From b610dfb1589fcd86a37785d7278f72a60ac405a8 Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Fri, 21 Jan 2011 16:24:55 +0100 Subject: [PATCH 2/2] Added profile-level-id=428014 for h264. (same as eConf). --- coreapi/linphonecore.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 3b04941a4..4e5d9f66d 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -954,8 +954,8 @@ static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vta linphone_core_assign_payload_type(&payload_type_h263_1998,98,"CIF=1;QCIF=1"); linphone_core_assign_payload_type(&payload_type_mp4v,99,"profile-level-id=3"); linphone_core_assign_payload_type(&payload_type_x_snow,100,NULL); - linphone_core_assign_payload_type(&payload_type_h264,102,NULL); - linphone_core_assign_payload_type(&payload_type_h264,103,"packetization-mode=1"); + linphone_core_assign_payload_type(&payload_type_h264,102,"profile-level-id=428014"); + linphone_core_assign_payload_type(&payload_type_h264,103,"packetization-mode=1;profile-level-id=428014"); #endif ms_init();