summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-03-29 12:47:10 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-03-29 13:01:26 +0200
commit93704e09c77e991e18c8bc1f0ab7f1e03062150e (patch)
tree79708be5bda73fe13855cbab2d7be6c5c84aa03b
parent97a407f696ae212d53b77ab7e37e0be749e3167e (diff)
parent72025ac36c740f031d7e413041fdfe97087c83c4 (diff)
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>
-rw-r--r--Changelog2
-rw-r--r--libavcodec/Makefile2
-rw-r--r--libavcodec/libdcadec.c14
3 files changed, 14 insertions, 4 deletions
diff --git a/Changelog b/Changelog
index dcddca479e..75da156607 100644
--- a/Changelog
+++ b/Changelog
@@ -6,7 +6,7 @@ version <next>:
- TDSC decoder
- DTS lossless extension (XLL) decoding (not lossless, disabled by default)
- showwavespic filter
-- libdcadec wrapper
+- DTS decoding through libdcadec
- Drop support for nvenc API before 5.0
- nvenc H265 encoder
- Detelecine filter
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;