Merge pull request #346 in FS/freeswitch from ~DRAGOS_OANCEA/freeswitch-dragos:opus-sprop-stereo to master

* commit '37dc3929df76b2fbca1569ff3416b191a213029c':
  FS-7829: mod_opus: add sprop-stereo fmtp param (just read it)
This commit is contained in:
Mike Jerris 2015-07-14 12:53:41 -05:00
commit 0b097dd597
1 changed files with 12 additions and 4 deletions

View File

@ -177,7 +177,11 @@ static switch_status_t switch_opus_fmtp_parse(const char *fmtp, switch_codec_fmt
codec_settings->stereo = atoi(arg);
codec_fmtp->stereo = codec_settings->stereo;
}
if (!strcasecmp(data, "sprop-stereo")) {
codec_settings->sprop_stereo = atoi(arg);
}
if (!strcasecmp(data, "maxaveragebitrate")) {
codec_settings->maxaveragebitrate = atoi(arg);
if ( codec_settings->maxaveragebitrate < 6000 || codec_settings->maxaveragebitrate > 510000 ) {
@ -255,6 +259,10 @@ static char *gen_fmtp(opus_codec_settings_t *settings, switch_memory_pool_t *poo
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "stereo=%d; ", settings->stereo);
}
if (settings->sprop_stereo) {
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "sprop-stereo=%d; ", settings->sprop_stereo);
}
if (end_of(buf) == ' ') {
*(end_of_p(buf) - 1) = '\0';
}
@ -471,7 +479,7 @@ static switch_status_t switch_opus_init(switch_codec_t *codec, switch_codec_flag
}
}
context->decoder_object = opus_decoder_create(dec_samplerate, codec->implementation->number_of_channels, &err);
context->decoder_object = opus_decoder_create(dec_samplerate, (!context->codec_settings.sprop_stereo ? codec->implementation->number_of_channels : 2), &err);
switch_set_flag(codec, SWITCH_CODEC_FLAG_HAS_PLC);
@ -560,7 +568,7 @@ static switch_status_t switch_opus_decode(switch_codec_t *codec,
return SWITCH_STATUS_FALSE;
}
frame_samples = *decoded_data_len / 2 / codec->implementation->number_of_channels;
frame_samples = *decoded_data_len / 2 / (!context->codec_settings.sprop_stereo ? codec->implementation->number_of_channels : 2);
frame_size = frame_samples - (frame_samples % (codec->implementation->actual_samples_per_second / 400));
if (*flag & SFF_PLC) {
@ -589,7 +597,7 @@ static switch_status_t switch_opus_decode(switch_codec_t *codec,
return SWITCH_STATUS_GENERR;
}
*decoded_data_len = samples * 2 * codec->implementation->number_of_channels;
*decoded_data_len = samples * 2 * (!context->codec_settings.sprop_stereo ? codec->implementation->number_of_channels : 2);
return SWITCH_STATUS_SUCCESS;
}