From f4e013e2dd166ab1f65756fa2ccfc75ed6640d74 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 11 Feb 2008 17:14:14 +0000 Subject: [PATCH] tweak git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7582 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_module_interfaces.h | 1 + src/mod/applications/mod_fsv/mod_fsv.c | 11 +++++++++-- src/mod/endpoints/mod_sofia/sofia_glue.c | 8 ++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h index fcf522b929..3b277f64cb 100644 --- a/src/include/switch_module_interfaces.h +++ b/src/include/switch_module_interfaces.h @@ -509,6 +509,7 @@ struct switch_codec { switch_memory_pool_t *memory_pool; /*! private data for the codec module to store handle specific info */ void *private_info; + switch_payload_t agreed_pt; }; /*! \brief A table of settings and callbacks that define a paticular implementation of a codec */ diff --git a/src/mod/applications/mod_fsv/mod_fsv.c b/src/mod/applications/mod_fsv/mod_fsv.c index 7a09a2e839..9e345cc92c 100644 --- a/src/mod/applications/mod_fsv/mod_fsv.c +++ b/src/mod/applications/mod_fsv/mod_fsv.c @@ -216,12 +216,13 @@ SWITCH_STANDARD_APP(play_fsv_function) switch_frame_t write_frame = {0}, vid_frame = {0}; int fd = -1; int bytes; - switch_codec_t *read_codec = NULL, codec = {0}, vid_codec = {0}; + switch_codec_t *read_codec = NULL, codec = {0}, vid_codec = {0}, *read_vid_codec; unsigned char *aud_buffer; unsigned char *vid_buffer; struct file_header h; uint32_t ts = 0, last = 0; switch_timer_t timer = {0}; + switch_payload_t pt = 0; aud_buffer = switch_core_session_alloc(session, SWITCH_RECOMMENDED_BUFFER_SIZE); vid_buffer = switch_core_session_alloc(session, SWITCH_RECOMMENDED_BUFFER_SIZE); @@ -243,6 +244,10 @@ SWITCH_STANDARD_APP(play_fsv_function) switch_channel_set_variable(channel, "sip_force_video_fmtp", h.video_fmtp); switch_channel_answer(channel); + + if ((read_vid_codec = switch_core_session_get_video_read_codec(session))) { + pt = read_vid_codec->agreed_pt; + } write_frame.codec = &codec; write_frame.data = aud_buffer; @@ -304,7 +309,9 @@ SWITCH_STANDARD_APP(play_fsv_function) } ts = ntohl(h->ts); - h->pt = vid_codec.implementation->ianacode; + if (pt) { + h->pt = pt; + } if (switch_channel_test_flag(channel, CF_VIDEO)) { switch_core_session_write_video_frame(session, &vid_frame, -1, 0); } diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index b98a2892b2..0907e2fb72 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -1065,6 +1065,9 @@ switch_status_t sofia_glue_tech_set_video_codec(private_object_t *tech_pvt, int tech_pvt->video_read_frame.codec = &tech_pvt->video_read_codec; tech_pvt->video_fmtp_out = switch_core_session_strdup(tech_pvt->session, tech_pvt->video_write_codec.fmtp_out); + + tech_pvt->video_write_codec.agreed_pt = tech_pvt->video_agreed_pt; + tech_pvt->video_read_codec.agreed_pt = tech_pvt->video_agreed_pt; switch_core_session_set_video_read_codec(tech_pvt->session, &tech_pvt->video_read_codec); switch_core_session_set_video_write_codec(tech_pvt->session, &tech_pvt->video_write_codec); } @@ -1137,6 +1140,9 @@ switch_status_t sofia_glue_tech_set_codec(private_object_t *tech_pvt, int force) ); tech_pvt->read_frame.codec = &tech_pvt->read_codec; + tech_pvt->write_codec.agreed_pt = tech_pvt->agreed_pt; + tech_pvt->read_codec.agreed_pt = tech_pvt->agreed_pt; + switch_core_session_set_read_codec(tech_pvt->session, &tech_pvt->read_codec); switch_core_session_set_write_codec(tech_pvt->session, &tech_pvt->write_codec); tech_pvt->fmtp_out = switch_core_session_strdup(tech_pvt->session, tech_pvt->write_codec.fmtp_out); @@ -1903,6 +1909,8 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, sdp_session_t * switch_channel_set_variable(tech_pvt->channel, SWITCH_REMOTE_VIDEO_IP_VARIABLE, tech_pvt->remote_sdp_audio_ip); switch_channel_set_variable(tech_pvt->channel, SWITCH_REMOTE_VIDEO_PORT_VARIABLE, tmp); switch_channel_set_variable(tech_pvt->channel, "sip_video_fmtp", tech_pvt->video_rm_fmtp); + switch_snprintf(tmp, sizeof(tmp), "%d", tech_pvt->video_agreed_pt); + switch_channel_set_variable(tech_pvt->channel, "sip_video_pt", tmp); break; } else { vmatch = 0;