mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
dcadec: add disable_xch private option.
This supplements the deprecated request_channels-based control of XCh decoding. Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
220494ad0b
commit
3c8507a845
@ -32,6 +32,7 @@
|
||||
#include "libavutil/internal.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "libavutil/samplefmt.h"
|
||||
#include "avcodec.h"
|
||||
#include "fft.h"
|
||||
@ -283,6 +284,7 @@ static av_always_inline int get_bitalloc(GetBitContext *gb, BitAlloc *ba,
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
AVClass *class; ///< class for AVOptions
|
||||
AVCodecContext *avctx;
|
||||
/* Frame header */
|
||||
int frame_type; ///< type of the current frame
|
||||
@ -380,6 +382,7 @@ typedef struct {
|
||||
/* XCh extension information */
|
||||
int xch_present; ///< XCh extension present and valid
|
||||
int xch_base_channel; ///< index of first (only) channel containing XCH data
|
||||
int xch_disable; ///< whether the XCh extension should be decoded or not
|
||||
|
||||
/* ExSS header parser */
|
||||
int static_fields; ///< static fields present
|
||||
@ -1840,11 +1843,12 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
|
||||
|
||||
#if FF_API_REQUEST_CHANNELS
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (s->xch_present && (!avctx->request_channels ||
|
||||
avctx->request_channels > num_core_channels + !!s->lfe)) {
|
||||
if (s->xch_present && !s->xch_disable &&
|
||||
(!avctx->request_channels ||
|
||||
avctx->request_channels > num_core_channels + !!s->lfe)) {
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#else
|
||||
if (s->xch_present) {
|
||||
if (s->xch_present && !s->xch_disable) {
|
||||
#endif
|
||||
avctx->channel_layout |= AV_CH_BACK_CENTER;
|
||||
if (s->lfe) {
|
||||
@ -2039,6 +2043,18 @@ static const AVProfile profiles[] = {
|
||||
{ FF_PROFILE_UNKNOWN },
|
||||
};
|
||||
|
||||
static const AVOption options[] = {
|
||||
{ "disable_xch", "disable decoding of the XCh extension", offsetof(DCAContext, xch_disable), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM|AV_OPT_FLAG_AUDIO_PARAM },
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
static const AVClass dca_decoder_class = {
|
||||
.class_name = "DCA decoder",
|
||||
.item_name = av_default_item_name,
|
||||
.option = options,
|
||||
.version = LIBAVUTIL_VERSION_INT,
|
||||
};
|
||||
|
||||
AVCodec ff_dca_decoder = {
|
||||
.name = "dca",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
|
||||
@ -2052,4 +2068,5 @@ AVCodec ff_dca_decoder = {
|
||||
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
|
||||
AV_SAMPLE_FMT_NONE },
|
||||
.profiles = NULL_IF_CONFIG_SMALL(profiles),
|
||||
.priv_class = &dca_decoder_class,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user