summaryrefslogtreecommitdiff
path: root/libavcodec/libfdk-aacdec.c
diff options
context:
space:
mode:
authorOmer Osman <omer.osman@iis.fraunhofer.de>2014-07-04 11:05:44 +0200
committerMartin Storsjö <martin@martin.st>2014-07-05 00:47:36 +0300
commite0bfe34ea8ccf333ec5b17961fd58eb575e74f8b (patch)
tree93aacd363df24936b5d55703b99ab1a238e1a872 /libavcodec/libfdk-aacdec.c
parent391ecc961ced2bde7aecb3053ac35191f838fae8 (diff)
libfdk-aacdec: Reduce the default decoder delay by one frame
The default error concealment method if none is set via aacDecoder_SetParam(AAC_CONCEAL_METHOD) is set in CConcealment_InitCommonData within the fdk-aac library and is set to Energy Interpolation. This method requires one frame delay to the output. To reduce the default decoder output delay and avoid missing the last frame in file based decoding, use Noise Substitution as the default concealment method. Signed-off-by: Omer Osman <omer.osman@iis.fraunhofer.de> Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec/libfdk-aacdec.c')
-rw-r--r--libavcodec/libfdk-aacdec.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/libavcodec/libfdk-aacdec.c b/libavcodec/libfdk-aacdec.c
index 5b2b094efc..2a975b0ff4 100644
--- a/libavcodec/libfdk-aacdec.c
+++ b/libavcodec/libfdk-aacdec.c
@@ -26,7 +26,6 @@
#include "internal.h"
enum ConcealMethod {
- CONCEAL_METHOD_DEFAULT = -1,
CONCEAL_METHOD_SPECTRAL_MUTING = 0,
CONCEAL_METHOD_NOISE_SUBSTITUTION = 1,
CONCEAL_METHOD_ENERGY_INTERPOLATION = 2,
@@ -43,8 +42,7 @@ typedef struct FDKAACDecContext {
#define OFFSET(x) offsetof(FDKAACDecContext, x)
#define AD AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM
static const AVOption fdk_aac_dec_options[] = {
- { "conceal", "Error concealment method", OFFSET(conceal_method), AV_OPT_TYPE_INT, { .i64 = CONCEAL_METHOD_DEFAULT }, CONCEAL_METHOD_DEFAULT, CONCEAL_METHOD_NB - 1, AD, "conceal" },
- { "default", "Default", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_DEFAULT }, INT_MIN, INT_MAX, AD, "conceal" },
+ { "conceal", "Error concealment method", OFFSET(conceal_method), AV_OPT_TYPE_INT, { .i64 = CONCEAL_METHOD_NOISE_SUBSTITUTION }, CONCEAL_METHOD_SPECTRAL_MUTING, CONCEAL_METHOD_NB - 1, AD, "conceal" },
{ "spectral", "Spectral muting", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_SPECTRAL_MUTING }, INT_MIN, INT_MAX, AD, "conceal" },
{ "noise", "Noise Substitution", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_NOISE_SUBSTITUTION }, INT_MIN, INT_MAX, AD, "conceal" },
{ "energy", "Energy Interpolation", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_ENERGY_INTERPOLATION }, INT_MIN, INT_MAX, AD, "conceal" },
@@ -195,12 +193,10 @@ static av_cold int fdk_aac_decode_init(AVCodecContext *avctx)
}
}
- if (s->conceal_method != CONCEAL_METHOD_DEFAULT) {
- if ((err = aacDecoder_SetParam(s->handle, AAC_CONCEAL_METHOD,
- s->conceal_method)) != AAC_DEC_OK) {
- av_log(avctx, AV_LOG_ERROR, "Unable to set error concealment method\n");
- return AVERROR_UNKNOWN;
- }
+ if ((err = aacDecoder_SetParam(s->handle, AAC_CONCEAL_METHOD,
+ s->conceal_method)) != AAC_DEC_OK) {
+ av_log(avctx, AV_LOG_ERROR, "Unable to set error concealment method\n");
+ return AVERROR_UNKNOWN;
}
avctx->sample_fmt = AV_SAMPLE_FMT_S16;