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>: ...@@ -6,7 +6,7 @@ version <next>:
- TDSC decoder - TDSC decoder
- DTS lossless extension (XLL) decoding (not lossless, disabled by default) - DTS lossless extension (XLL) decoding (not lossless, disabled by default)
- showwavespic filter - showwavespic filter
- libdcadec wrapper - DTS decoding through libdcadec
- Drop support for nvenc API before 5.0 - Drop support for nvenc API before 5.0
- nvenc H265 encoder - nvenc H265 encoder
- Detelecine filter - Detelecine filter
......
...@@ -736,7 +736,7 @@ OBJS-$(CONFIG_ELBG_FILTER) += elbg.o ...@@ -736,7 +736,7 @@ OBJS-$(CONFIG_ELBG_FILTER) += elbg.o
# external codec libraries # external codec libraries
OBJS-$(CONFIG_LIBAACPLUS_ENCODER) += libaacplus.o OBJS-$(CONFIG_LIBAACPLUS_ENCODER) += libaacplus.o
OBJS-$(CONFIG_LIBCELT_DECODER) += libcelt_dec.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_LIBFAAC_ENCODER) += libfaac.o
OBJS-$(CONFIG_LIBFDK_AAC_DECODER) += libfdk-aacdec.o OBJS-$(CONFIG_LIBFDK_AAC_DECODER) += libfdk-aacdec.o
OBJS-$(CONFIG_LIBFDK_AAC_ENCODER) += libfdk-aacenc.o OBJS-$(CONFIG_LIBFDK_AAC_ENCODER) += libfdk-aacenc.o
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "libavutil/common.h" #include "libavutil/common.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "avcodec.h" #include "avcodec.h"
#include "dca.h" #include "dca.h"
#include "dca_syncwords.h" #include "dca_syncwords.h"
...@@ -48,6 +49,10 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void *data, ...@@ -48,6 +49,10 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void *data,
int input_size = avpkt->size; int input_size = avpkt->size;
/* convert bytestream syntax to RAW BE format if required */ /* 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); mrk = AV_RB32(input);
if (mrk != DCA_SYNCWORD_CORE_BE && mrk != DCA_SYNCWORD_SUBSTREAM) { 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); 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, ...@@ -75,11 +80,16 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void *data,
avctx->channel_layout = channel_mask; avctx->channel_layout = channel_mask;
avctx->sample_rate = sample_rate; 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) if (bits_per_sample == 16)
avctx->sample_fmt = AV_SAMPLE_FMT_S16P; avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
else else if (bits_per_sample <= 24)
avctx->sample_fmt = AV_SAMPLE_FMT_S32P; 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; 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