diff options
author | Gustaf Ullberg <gustaf.ullberg@gmail.com> | 2018-12-20 15:35:41 +0100 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2019-04-10 17:26:57 -0400 |
commit | 4f4b11c2398e96134dc62ee794bfe33ecd6e9bd2 (patch) | |
tree | b10d512517d899b686f76d50ecc1ec00c70154cc /src | |
parent | afea46e9d795bd08ee7f82fb65a9ff4a7d842b66 (diff) | |
download | opus-4f4b11c2398e96134dc62ee794bfe33ecd6e9bd2.tar.gz |
API for checking whether the encoder is in DTX
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
Diffstat (limited to 'src')
-rw-r--r-- | src/opus_encoder.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c index 2768aa37..e98ac5b8 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -2727,6 +2727,33 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...) ret = celt_encoder_ctl(celt_enc, OPUS_SET_ENERGY_MASK(value)); } break; + case OPUS_GET_IN_DTX_REQUEST: + { + opus_int32 *value = va_arg(ap, opus_int32*); + if (!value) + { + goto bad_arg; + } + if (st->silk_mode.useDTX && (st->prev_mode == MODE_SILK_ONLY || st->prev_mode == MODE_HYBRID)) { + /* DTX determined by Silk. */ + int n; + void *silk_enc = (char*)st+st->silk_enc_offset; + *value = 1; + for (n=0;n<st->silk_mode.nChannelsInternal;n++) { + *value = *value && ((silk_encoder*)silk_enc)->state_Fxx[n].sCmn.noSpeechCounter >= NB_SPEECH_FRAMES_BEFORE_DTX; + } + } +#ifndef DISABLE_FLOAT_API + else if (st->use_dtx) { + /* DTX determined by Opus. */ + *value = st->nb_no_activity_frames >= NB_SPEECH_FRAMES_BEFORE_DTX; + } +#endif + else { + *value = 0; + } + } + break; case CELT_GET_MODE_REQUEST: { |