Commit 93704e09 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '72025ac3'

* commit '72025ac3':
  lavc: add libdcadec decoder

Conflicts:
	Changelog
	configure
	libavcodec/Makefile
	libavcodec/allcodecs.c
	libavcodec/libdcadec.c

See: 519868deMerged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 97a407f6 72025ac3
......@@ -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
......
......@@ -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
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment