Merge commit '72025ac36c740f031d7e413041fdfe97087c83c4'
* commit '72025ac36c740f031d7e413041fdfe97087c83c4':
lavc: add libdcadec decoder
Conflicts:
Changelog
configure
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/libdcadec.c
See: 519868de7d
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
93704e09c7
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user