diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-03-29 12:47:10 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-03-29 13:01:26 +0200 |
commit | 93704e09c77e991e18c8bc1f0ab7f1e03062150e (patch) | |
tree | 79708be5bda73fe13855cbab2d7be6c5c84aa03b /libavcodec | |
parent | 97a407f696ae212d53b77ab7e37e0be749e3167e (diff) | |
parent | 72025ac36c740f031d7e413041fdfe97087c83c4 (diff) | |
download | ffmpeg-93704e09c77e991e18c8bc1f0ab7f1e03062150e.tar.gz |
Merge commit '72025ac36c740f031d7e413041fdfe97087c83c4'
* commit '72025ac36c740f031d7e413041fdfe97087c83c4':
lavc: add libdcadec decoder
Conflicts:
Changelog
configure
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/libdcadec.c
See: 519868de7d9c99876efcaf57d6a9683c22732cde
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/Makefile | 2 | ||||
-rw-r--r-- | libavcodec/libdcadec.c | 14 |
2 files changed, 13 insertions, 3 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 91a40ad049..6aa0208d4f 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -736,7 +736,7 @@ OBJS-$(CONFIG_ELBG_FILTER) += elbg.o # external codec libraries OBJS-$(CONFIG_LIBAACPLUS_ENCODER) += libaacplus.o OBJS-$(CONFIG_LIBCELT_DECODER) += libcelt_dec.o -OBJS-$(CONFIG_LIBDCADEC_DECODER) += libdcadec.o +OBJS-$(CONFIG_LIBDCADEC_DECODER) += libdcadec.o dca.o OBJS-$(CONFIG_LIBFAAC_ENCODER) += libfaac.o OBJS-$(CONFIG_LIBFDK_AAC_DECODER) += libfdk-aacdec.o OBJS-$(CONFIG_LIBFDK_AAC_ENCODER) += libfdk-aacenc.o diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c index a28b983f7e..6e8926258d 100644 --- a/libavcodec/libdcadec.c +++ b/libavcodec/libdcadec.c @@ -25,6 +25,7 @@ #include "libavutil/channel_layout.h" #include "libavutil/common.h" #include "libavutil/opt.h" + #include "avcodec.h" #include "dca.h" #include "dca_syncwords.h" @@ -48,6 +49,10 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void *data, int input_size = avpkt->size; /* convert bytestream syntax to RAW BE format if required */ + if (input_size < 8) { + av_log(avctx, AV_LOG_ERROR, "Input size too small\n"); + return AVERROR_INVALIDDATA; + } mrk = AV_RB32(input); if (mrk != DCA_SYNCWORD_CORE_BE && mrk != DCA_SYNCWORD_SUBSTREAM) { s->buffer = av_fast_realloc(s->buffer, &s->buffer_size, avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE); @@ -75,11 +80,16 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void *data, avctx->channel_layout = channel_mask; avctx->sample_rate = sample_rate; - av_assert0(bits_per_sample >= 16 && bits_per_sample <= 24); + av_assert0(bits_per_sample >= 16); if (bits_per_sample == 16) avctx->sample_fmt = AV_SAMPLE_FMT_S16P; - else + else if (bits_per_sample <= 24) avctx->sample_fmt = AV_SAMPLE_FMT_S32P; + else { + av_log(avctx, AV_LOG_ERROR, "Unsupported number of bits per sample: %d\n", + bits_per_sample); + return AVERROR(ENOSYS); + } avctx->bits_per_raw_sample = bits_per_sample; |