|
|
|
@ -2823,7 +2823,7 @@ static void amr_set_dec_codec_options(str *key, str *value, void *data) { |
|
|
|
if (!str_cmp(key, "CMR-interval")) |
|
|
|
dec->codec_options.amr.cmr_interval_us = str_to_i(value, 0) * 1000L; |
|
|
|
else if (!str_cmp(key, "mode-change-interval")) |
|
|
|
dec->codec_options.amr.mode_change_interval = str_to_i(value, 0); |
|
|
|
dec->codec_options.amr.mode_change_interval_us = str_to_i(value, 0) * 1000L; |
|
|
|
|
|
|
|
} |
|
|
|
static void amr_set_enc_codec_options(str *key, str *value, void *data) { |
|
|
|
@ -3002,12 +3002,12 @@ static int amr_decoder_input(decoder_t *dec, const str *data, GQueue *out) { |
|
|
|
decoder_event(dec, CE_AMR_CMR_RECV, GUINT_TO_POINTER(cmr_int)); |
|
|
|
dec->avc.amr.last_cmr = rtpe_now; |
|
|
|
} |
|
|
|
else if (dec->codec_options.amr.mode_change_interval) { |
|
|
|
else if (dec->codec_options.amr.mode_change_interval_us) { |
|
|
|
// no CMR, check if we're due to do our own mode change |
|
|
|
if (!dec->avc.amr.last_cmr) // start tracking now |
|
|
|
dec->avc.amr.last_cmr = rtpe_now; |
|
|
|
else if (rtpe_now - dec->avc.amr.last_cmr |
|
|
|
>= dec->codec_options.amr.mode_change_interval * 1000LL) { // XXX scale to micro |
|
|
|
>= dec->codec_options.amr.mode_change_interval_us) { |
|
|
|
// switch up if we can |
|
|
|
decoder_event(dec, CE_AMR_CMR_RECV, GUINT_TO_POINTER(0xffff)); |
|
|
|
dec->avc.amr.last_cmr = rtpe_now; |
|
|
|
|