]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
only put session pointers in when its done from a codec that comes from a session...
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 30 Oct 2012 21:56:03 +0000 (16:56 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 30 Oct 2012 21:56:03 +0000 (16:56 -0500)
src/mod/endpoints/mod_dingaling/mod_dingaling.c
src/mod/endpoints/mod_sofia/sofia_glue.c
src/switch_core_io.c

index af67afcfc9cd19c06388eea2f77f3c165098070a..679a4d65886bcdcf7f0a144bf3dd617959729ebd 100644 (file)
@@ -1167,6 +1167,8 @@ static int activate_audio_rtp(struct private_object *tech_pvt)
                        r = 0;
                        goto end;
                }
+               tech_pvt->transports[LDL_TPORT_RTP].read_codec.session = tech_pvt->session;
+
                tech_pvt->transports[LDL_TPORT_RTP].read_frame.rate = tech_pvt->transports[LDL_TPORT_RTP].read_codec.implementation->samples_per_second;
                tech_pvt->transports[LDL_TPORT_RTP].read_frame.codec = &tech_pvt->transports[LDL_TPORT_RTP].read_codec;
 
@@ -1186,6 +1188,7 @@ static int activate_audio_rtp(struct private_object *tech_pvt)
                        r = 0;
                        goto end;
                }
+               tech_pvt->transports[LDL_TPORT_RTP].write_codec.session = tech_pvt->session;
                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "Set Write Codec to %s@%d\n",
                                                  tech_pvt->transports[LDL_TPORT_RTP].codec_name, (int) tech_pvt->transports[LDL_TPORT_RTP].write_codec.implementation->samples_per_second);
                
index 15b6eb0eeb04b67ba0a093b47abd1f8798547137..bbaa9ae34764586728b08f68ff13bef7e12a677e 100644 (file)
@@ -3037,6 +3037,9 @@ switch_status_t sofia_glue_tech_set_codec(private_object_t *tech_pvt, int force)
                switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION);
                switch_goto_status(SWITCH_STATUS_FALSE, end);
        }
+       
+       tech_pvt->read_codec.session = tech_pvt->session;
+
 
        if (switch_core_codec_init_with_bitrate(&tech_pvt->write_codec,
                                                           tech_pvt->iananame,
@@ -3052,6 +3055,8 @@ switch_status_t sofia_glue_tech_set_codec(private_object_t *tech_pvt, int force)
                switch_goto_status(SWITCH_STATUS_FALSE, end);
        }
 
+       tech_pvt->write_codec.session = tech_pvt->session;
+
        switch_channel_set_variable(tech_pvt->channel, "sip_use_codec_name", tech_pvt->iananame);
        switch_channel_set_variable(tech_pvt->channel, "sip_use_codec_fmtp", tech_pvt->rm_fmtp);
        switch_channel_set_variable_printf(tech_pvt->channel, "sip_use_codec_rate", "%d", tech_pvt->rm_rate);
index f175cf2e07b1fbf75c45036e0cad4706edcb8bdb..ba4874d81fd965cfd783760209a583eff410959b 100644 (file)
@@ -375,8 +375,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
                                } else {
                                        switch_codec_t *codec = use_codec->implementation?use_codec:read_frame->codec;
                                        switch_thread_rwlock_rdlock(session->bug_rwlock);
-                                       codec->session = session;
                                        codec->cur_frame = read_frame;
+                                       session->read_codec->cur_frame = read_frame;
                                        status = switch_core_codec_decode(codec,
                                                                                                          session->read_codec,
                                                                                                          read_frame->data,
@@ -384,8 +384,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
                                                                                                          session->read_impl.actual_samples_per_second,
                                                                                                          session->raw_read_frame.data, &session->raw_read_frame.datalen, &session->raw_read_frame.rate, 
                                                                                                          &read_frame->flags);
-                                       codec->session = NULL;
                                        codec->cur_frame = NULL;
+                                       session->read_codec->cur_frame = NULL;
                                        switch_thread_rwlock_unlock(session->bug_rwlock);
 
                                }
@@ -628,8 +628,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
                                switch_assert(session->read_codec != NULL);
                                switch_assert(enc_frame != NULL);
                                switch_assert(enc_frame->data != NULL);
-                               session->read_codec->session = session;
                                session->read_codec->cur_frame = enc_frame;
+                               enc_frame->codec->cur_frame = enc_frame;
                                status = switch_core_codec_encode(session->read_codec,
                                                                                                  enc_frame->codec,
                                                                                                  enc_frame->data,
@@ -637,7 +637,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
                                                                                                  session->read_impl.actual_samples_per_second,
                                                                                                  session->enc_read_frame.data, &session->enc_read_frame.datalen, &session->enc_read_frame.rate, &flag);
                                session->read_codec->cur_frame = NULL;
-                               session->read_codec->session = NULL;
+                               enc_frame->codec->cur_frame = NULL;
                                switch (status) {
                                case SWITCH_STATUS_RESAMPLE:
                                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Fixme 1\n");
@@ -911,17 +911,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess
 
        if (frame->codec) {
                session->raw_write_frame.datalen = session->raw_write_frame.buflen;
-               frame->codec->session = session;
                frame->codec->cur_frame = frame;
+               session->write_codec->cur_frame = frame;
                status = switch_core_codec_decode(frame->codec,
                                                                                  session->write_codec,
                                                                                  frame->data,
                                                                                  frame->datalen,
                                                                                  session->write_impl.actual_samples_per_second,
                                                                                  session->raw_write_frame.data, &session->raw_write_frame.datalen, &session->raw_write_frame.rate, &frame->flags);
-               frame->codec->session = NULL;
                frame->codec->cur_frame = NULL;
-
+               session->write_codec->cur_frame = NULL;
                if (do_resample && status == SWITCH_STATUS_SUCCESS) {
                        status = SWITCH_STATUS_RESAMPLE;
                }
@@ -1100,16 +1099,17 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess
 
                        enc_frame = write_frame;
                        session->enc_write_frame.datalen = session->enc_write_frame.buflen;
-                       session->write_codec->session = session;
                        session->write_codec->cur_frame = frame;
+                       frame->codec->cur_frame = frame;
                        status = switch_core_codec_encode(session->write_codec,
                                                                                          frame->codec,
                                                                                          enc_frame->data,
                                                                                          enc_frame->datalen,
                                                                                          session->write_impl.actual_samples_per_second,
                                                                                          session->enc_write_frame.data, &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag);
-                       session->write_codec->session = NULL;
+
                        session->write_codec->cur_frame = NULL;
+                       frame->codec->cur_frame = NULL;
                        switch (status) {
                        case SWITCH_STATUS_RESAMPLE:
                                resample++;
@@ -1203,17 +1203,18 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess
                                } else {
                                        rate = session->write_impl.actual_samples_per_second;
                                }
-                               session->write_codec->session = session;
+
                                session->write_codec->cur_frame = frame;
+                               frame->codec->cur_frame = frame;
                                status = switch_core_codec_encode(session->write_codec,
                                                                                                  frame->codec,
                                                                                                  enc_frame->data,
                                                                                                  enc_frame->datalen,
                                                                                                  rate,
                                                                                                  session->enc_write_frame.data, &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag);
-                               session->write_codec->session = NULL;
-                               session->write_codec->cur_frame = NULL;
 
+                               session->write_codec->cur_frame = NULL;
+                               frame->codec->cur_frame = NULL;
                                switch (status) {
                                case SWITCH_STATUS_RESAMPLE:
                                        resample++;