]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
handle m=video lines before m=audio
authorMichael Jerris <mike@jerris.com>
Thu, 16 Apr 2015 19:24:35 +0000 (14:24 -0500)
committerBrian West <brian@freeswitch.org>
Fri, 17 Apr 2015 16:26:15 +0000 (11:26 -0500)
src/switch_core_media.c

index 21eb2cefccd8c6e3560d2c4ce0c606de337bee5f..466180d42f707b8bc8c823351633c5e93016eb2b 100644 (file)
@@ -3132,6 +3132,7 @@ static void clear_pmaps(switch_rtp_engine_t *engine)
 SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *session, const char *r_sdp, uint8_t *proceed, switch_sdp_type_t sdp_type)
 {
        uint8_t match = 0;
+       uint8_t vmatch = 0;
        switch_payload_t best_te = 0, te = 0, cng_pt = 0;
        sdp_media_t *m;
        sdp_attribute_t *attr;
@@ -3796,7 +3797,12 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
                                smh->num_negotiated_codecs = 0;
 
                                for(j = 0; j < m_idx; j++) {
-                                       payload_map_t *pmap = switch_core_media_add_payload_map(session, 
+                                       payload_map_t *pmap;
+                                       if (matches[j].imp->codec_type != SWITCH_CODEC_TYPE_AUDIO) {
+                                               continue;
+                                       }
+
+                                       pmap = switch_core_media_add_payload_map(session, 
                                                                                                                                                        SWITCH_MEDIA_TYPE_AUDIO,
                                                                                                                                                        matches[j].map->rm_encoding,
                                                                                                                                                        matches[j].map->rm_fmtp,
@@ -3954,8 +3960,9 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
                        sdp_rtpmap_t *map;
                        const char *rm_encoding;
                        const switch_codec_implementation_t *mimp = NULL;
-                       int vmatch = 0, i;
-                       
+                       int i;
+
+                       vmatch = 0;
                        nm_idx = 0;
                        m_idx = 0;
                        memset(matches, 0, sizeof(matches[0]) * MAX_MATCHES);
@@ -4138,7 +4145,6 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
                                switch_core_media_check_video_codecs(session);
                                switch_snprintf(tmp, sizeof(tmp), "%d", v_engine->cur_payload_map->recv_pt);
                                switch_channel_set_variable(session->channel, "rtp_video_recv_pt", tmp);
-                               if (!match && vmatch) match = 1;
 
                                if (switch_core_codec_ready(&v_engine->read_codec) && strcasecmp(matches[0].imp->iananame, v_engine->read_codec.implementation->iananame)) {
                                        v_engine->reset_codec = 1;
@@ -4151,6 +4157,8 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
                }
        }
 
+       if (!match && vmatch) match = 1;
+
  done:
 
        if (parser) {