mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: ac3enc: add macros for option names to make them more understandable. ac3enc: fix 'channel_coupling' option to actually allow 'auto'. cavs: fix some crashes with invalid bitstreams ac3enc: clip coupling coordinates during calculation Remove incorrect info in documentation of AVCodecContext.bits_per_raw_sample. lavc: fix parentheses placement in avcodec_open2(). Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
d912e449b6
@ -1664,9 +1664,9 @@ static void dprint_options(AC3EncodeContext *s)
|
|||||||
if (opt->audio_production_info) {
|
if (opt->audio_production_info) {
|
||||||
av_dlog(avctx, "mixing_level: %ddB\n", opt->mixing_level);
|
av_dlog(avctx, "mixing_level: %ddB\n", opt->mixing_level);
|
||||||
switch (opt->room_type) {
|
switch (opt->room_type) {
|
||||||
case 0: av_strlcpy(strbuf, "notindicated", 32); break;
|
case AC3ENC_OPT_NOT_INDICATED: av_strlcpy(strbuf, "notindicated", 32); break;
|
||||||
case 1: av_strlcpy(strbuf, "large", 32); break;
|
case AC3ENC_OPT_LARGE_ROOM: av_strlcpy(strbuf, "large", 32); break;
|
||||||
case 2: av_strlcpy(strbuf, "small", 32); break;
|
case AC3ENC_OPT_SMALL_ROOM: av_strlcpy(strbuf, "small", 32); break;
|
||||||
default: snprintf(strbuf, 32, "ERROR (%d)", opt->room_type);
|
default: snprintf(strbuf, 32, "ERROR (%d)", opt->room_type);
|
||||||
}
|
}
|
||||||
av_dlog(avctx, "room_type: %s\n", strbuf);
|
av_dlog(avctx, "room_type: %s\n", strbuf);
|
||||||
@ -1678,9 +1678,9 @@ static void dprint_options(AC3EncodeContext *s)
|
|||||||
av_dlog(avctx, "dialnorm: %ddB\n", opt->dialogue_level);
|
av_dlog(avctx, "dialnorm: %ddB\n", opt->dialogue_level);
|
||||||
if (s->channel_mode == AC3_CHMODE_STEREO) {
|
if (s->channel_mode == AC3_CHMODE_STEREO) {
|
||||||
switch (opt->dolby_surround_mode) {
|
switch (opt->dolby_surround_mode) {
|
||||||
case 0: av_strlcpy(strbuf, "notindicated", 32); break;
|
case AC3ENC_OPT_NOT_INDICATED: av_strlcpy(strbuf, "notindicated", 32); break;
|
||||||
case 1: av_strlcpy(strbuf, "on", 32); break;
|
case AC3ENC_OPT_MODE_ON: av_strlcpy(strbuf, "on", 32); break;
|
||||||
case 2: av_strlcpy(strbuf, "off", 32); break;
|
case AC3ENC_OPT_MODE_OFF: av_strlcpy(strbuf, "off", 32); break;
|
||||||
default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_mode);
|
default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_mode);
|
||||||
}
|
}
|
||||||
av_dlog(avctx, "dsur_mode: %s\n", strbuf);
|
av_dlog(avctx, "dsur_mode: %s\n", strbuf);
|
||||||
@ -1692,9 +1692,9 @@ static void dprint_options(AC3EncodeContext *s)
|
|||||||
if (s->bitstream_id == 6) {
|
if (s->bitstream_id == 6) {
|
||||||
if (opt->extended_bsi_1) {
|
if (opt->extended_bsi_1) {
|
||||||
switch (opt->preferred_stereo_downmix) {
|
switch (opt->preferred_stereo_downmix) {
|
||||||
case 0: av_strlcpy(strbuf, "notindicated", 32); break;
|
case AC3ENC_OPT_NOT_INDICATED: av_strlcpy(strbuf, "notindicated", 32); break;
|
||||||
case 1: av_strlcpy(strbuf, "ltrt", 32); break;
|
case AC3ENC_OPT_DOWNMIX_LTRT: av_strlcpy(strbuf, "ltrt", 32); break;
|
||||||
case 2: av_strlcpy(strbuf, "loro", 32); break;
|
case AC3ENC_OPT_DOWNMIX_LORO: av_strlcpy(strbuf, "loro", 32); break;
|
||||||
default: snprintf(strbuf, 32, "ERROR (%d)", opt->preferred_stereo_downmix);
|
default: snprintf(strbuf, 32, "ERROR (%d)", opt->preferred_stereo_downmix);
|
||||||
}
|
}
|
||||||
av_dlog(avctx, "dmix_mode: %s\n", strbuf);
|
av_dlog(avctx, "dmix_mode: %s\n", strbuf);
|
||||||
@ -1711,23 +1711,23 @@ static void dprint_options(AC3EncodeContext *s)
|
|||||||
}
|
}
|
||||||
if (opt->extended_bsi_2) {
|
if (opt->extended_bsi_2) {
|
||||||
switch (opt->dolby_surround_ex_mode) {
|
switch (opt->dolby_surround_ex_mode) {
|
||||||
case 0: av_strlcpy(strbuf, "notindicated", 32); break;
|
case AC3ENC_OPT_NOT_INDICATED: av_strlcpy(strbuf, "notindicated", 32); break;
|
||||||
case 1: av_strlcpy(strbuf, "on", 32); break;
|
case AC3ENC_OPT_MODE_ON: av_strlcpy(strbuf, "on", 32); break;
|
||||||
case 2: av_strlcpy(strbuf, "off", 32); break;
|
case AC3ENC_OPT_MODE_OFF: av_strlcpy(strbuf, "off", 32); break;
|
||||||
default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_ex_mode);
|
default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_surround_ex_mode);
|
||||||
}
|
}
|
||||||
av_dlog(avctx, "dsurex_mode: %s\n", strbuf);
|
av_dlog(avctx, "dsurex_mode: %s\n", strbuf);
|
||||||
switch (opt->dolby_headphone_mode) {
|
switch (opt->dolby_headphone_mode) {
|
||||||
case 0: av_strlcpy(strbuf, "notindicated", 32); break;
|
case AC3ENC_OPT_NOT_INDICATED: av_strlcpy(strbuf, "notindicated", 32); break;
|
||||||
case 1: av_strlcpy(strbuf, "on", 32); break;
|
case AC3ENC_OPT_MODE_ON: av_strlcpy(strbuf, "on", 32); break;
|
||||||
case 2: av_strlcpy(strbuf, "off", 32); break;
|
case AC3ENC_OPT_MODE_OFF: av_strlcpy(strbuf, "off", 32); break;
|
||||||
default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_headphone_mode);
|
default: snprintf(strbuf, 32, "ERROR (%d)", opt->dolby_headphone_mode);
|
||||||
}
|
}
|
||||||
av_dlog(avctx, "dheadphone_mode: %s\n", strbuf);
|
av_dlog(avctx, "dheadphone_mode: %s\n", strbuf);
|
||||||
|
|
||||||
switch (opt->ad_converter_type) {
|
switch (opt->ad_converter_type) {
|
||||||
case 0: av_strlcpy(strbuf, "standard", 32); break;
|
case AC3ENC_OPT_ADCONV_STANDARD: av_strlcpy(strbuf, "standard", 32); break;
|
||||||
case 1: av_strlcpy(strbuf, "hdcd", 32); break;
|
case AC3ENC_OPT_ADCONV_HDCD: av_strlcpy(strbuf, "hdcd", 32); break;
|
||||||
default: snprintf(strbuf, 32, "ERROR (%d)", opt->ad_converter_type);
|
default: snprintf(strbuf, 32, "ERROR (%d)", opt->ad_converter_type);
|
||||||
}
|
}
|
||||||
av_dlog(avctx, "ad_conv_type: %s\n", strbuf);
|
av_dlog(avctx, "ad_conv_type: %s\n", strbuf);
|
||||||
@ -1791,7 +1791,7 @@ int ff_ac3_validate_metadata(AC3EncodeContext *s)
|
|||||||
opt->eac3_info_metadata = 0;
|
opt->eac3_info_metadata = 0;
|
||||||
|
|
||||||
/* determine mixing metadata / xbsi1 use */
|
/* determine mixing metadata / xbsi1 use */
|
||||||
if (s->channel_mode > AC3_CHMODE_STEREO && opt->preferred_stereo_downmix >= 0) {
|
if (s->channel_mode > AC3_CHMODE_STEREO && opt->preferred_stereo_downmix != AC3ENC_OPT_NONE) {
|
||||||
opt->extended_bsi_1 = 1;
|
opt->extended_bsi_1 = 1;
|
||||||
opt->eac3_mixing_metadata = 1;
|
opt->eac3_mixing_metadata = 1;
|
||||||
}
|
}
|
||||||
@ -1810,28 +1810,29 @@ int ff_ac3_validate_metadata(AC3EncodeContext *s)
|
|||||||
/* determine info metadata use */
|
/* determine info metadata use */
|
||||||
if (avctx->audio_service_type != AV_AUDIO_SERVICE_TYPE_MAIN)
|
if (avctx->audio_service_type != AV_AUDIO_SERVICE_TYPE_MAIN)
|
||||||
opt->eac3_info_metadata = 1;
|
opt->eac3_info_metadata = 1;
|
||||||
if (opt->copyright >= 0 || opt->original >= 0)
|
if (opt->copyright != AC3ENC_OPT_NONE || opt->original != AC3ENC_OPT_NONE)
|
||||||
opt->eac3_info_metadata = 1;
|
opt->eac3_info_metadata = 1;
|
||||||
if (s->channel_mode == AC3_CHMODE_STEREO &&
|
if (s->channel_mode == AC3_CHMODE_STEREO &&
|
||||||
(opt->dolby_headphone_mode >= 0 || opt->dolby_surround_mode >= 0))
|
(opt->dolby_headphone_mode != AC3ENC_OPT_NONE || opt->dolby_surround_mode != AC3ENC_OPT_NONE))
|
||||||
opt->eac3_info_metadata = 1;
|
opt->eac3_info_metadata = 1;
|
||||||
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode >= 0)
|
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode != AC3ENC_OPT_NONE)
|
||||||
opt->eac3_info_metadata = 1;
|
opt->eac3_info_metadata = 1;
|
||||||
if (opt->mixing_level >= 0 || opt->room_type >= 0 || opt->ad_converter_type >= 0) {
|
if (opt->mixing_level != AC3ENC_OPT_NONE || opt->room_type != AC3ENC_OPT_NONE ||
|
||||||
|
opt->ad_converter_type != AC3ENC_OPT_NONE) {
|
||||||
opt->audio_production_info = 1;
|
opt->audio_production_info = 1;
|
||||||
opt->eac3_info_metadata = 1;
|
opt->eac3_info_metadata = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* determine audio production info use */
|
/* determine audio production info use */
|
||||||
if (opt->mixing_level >= 0 || opt->room_type >= 0)
|
if (opt->mixing_level != AC3ENC_OPT_NONE || opt->room_type != AC3ENC_OPT_NONE)
|
||||||
opt->audio_production_info = 1;
|
opt->audio_production_info = 1;
|
||||||
|
|
||||||
/* determine xbsi2 use */
|
/* determine xbsi2 use */
|
||||||
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode >= 0)
|
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode != AC3ENC_OPT_NONE)
|
||||||
opt->extended_bsi_2 = 1;
|
opt->extended_bsi_2 = 1;
|
||||||
if (s->channel_mode == AC3_CHMODE_STEREO && opt->dolby_headphone_mode >= 0)
|
if (s->channel_mode == AC3_CHMODE_STEREO && opt->dolby_headphone_mode != AC3ENC_OPT_NONE)
|
||||||
opt->extended_bsi_2 = 1;
|
opt->extended_bsi_2 = 1;
|
||||||
if (opt->ad_converter_type >= 0)
|
if (opt->ad_converter_type != AC3ENC_OPT_NONE)
|
||||||
opt->extended_bsi_2 = 1;
|
opt->extended_bsi_2 = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1852,8 +1853,8 @@ int ff_ac3_validate_metadata(AC3EncodeContext *s)
|
|||||||
/* validate extended bsi 1 / mixing metadata */
|
/* validate extended bsi 1 / mixing metadata */
|
||||||
if (opt->extended_bsi_1 || opt->eac3_mixing_metadata) {
|
if (opt->extended_bsi_1 || opt->eac3_mixing_metadata) {
|
||||||
/* default preferred stereo downmix */
|
/* default preferred stereo downmix */
|
||||||
if (opt->preferred_stereo_downmix < 0)
|
if (opt->preferred_stereo_downmix == AC3ENC_OPT_NONE)
|
||||||
opt->preferred_stereo_downmix = 0;
|
opt->preferred_stereo_downmix = AC3ENC_OPT_NOT_INDICATED;
|
||||||
if (!s->eac3 || s->has_center) {
|
if (!s->eac3 || s->has_center) {
|
||||||
/* validate Lt/Rt center mix level */
|
/* validate Lt/Rt center mix level */
|
||||||
validate_mix_level(avctx, "ltrt_center_mix_level",
|
validate_mix_level(avctx, "ltrt_center_mix_level",
|
||||||
@ -1895,35 +1896,35 @@ int ff_ac3_validate_metadata(AC3EncodeContext *s)
|
|||||||
/* validate extended bsi 2 / info metadata */
|
/* validate extended bsi 2 / info metadata */
|
||||||
if (opt->extended_bsi_2 || opt->eac3_info_metadata) {
|
if (opt->extended_bsi_2 || opt->eac3_info_metadata) {
|
||||||
/* default dolby headphone mode */
|
/* default dolby headphone mode */
|
||||||
if (opt->dolby_headphone_mode < 0)
|
if (opt->dolby_headphone_mode == AC3ENC_OPT_NONE)
|
||||||
opt->dolby_headphone_mode = 0;
|
opt->dolby_headphone_mode = AC3ENC_OPT_NOT_INDICATED;
|
||||||
/* default dolby surround ex mode */
|
/* default dolby surround ex mode */
|
||||||
if (opt->dolby_surround_ex_mode < 0)
|
if (opt->dolby_surround_ex_mode == AC3ENC_OPT_NONE)
|
||||||
opt->dolby_surround_ex_mode = 0;
|
opt->dolby_surround_ex_mode = AC3ENC_OPT_NOT_INDICATED;
|
||||||
/* default A/D converter type */
|
/* default A/D converter type */
|
||||||
if (opt->ad_converter_type < 0)
|
if (opt->ad_converter_type == AC3ENC_OPT_NONE)
|
||||||
opt->ad_converter_type = 0;
|
opt->ad_converter_type = AC3ENC_OPT_ADCONV_STANDARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copyright & original defaults */
|
/* copyright & original defaults */
|
||||||
if (!s->eac3 || opt->eac3_info_metadata) {
|
if (!s->eac3 || opt->eac3_info_metadata) {
|
||||||
/* default copyright */
|
/* default copyright */
|
||||||
if (opt->copyright < 0)
|
if (opt->copyright == AC3ENC_OPT_NONE)
|
||||||
opt->copyright = 0;
|
opt->copyright = AC3ENC_OPT_OFF;
|
||||||
/* default original */
|
/* default original */
|
||||||
if (opt->original < 0)
|
if (opt->original == AC3ENC_OPT_NONE)
|
||||||
opt->original = 1;
|
opt->original = AC3ENC_OPT_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dolby surround mode default */
|
/* dolby surround mode default */
|
||||||
if (!s->eac3 || opt->eac3_info_metadata) {
|
if (!s->eac3 || opt->eac3_info_metadata) {
|
||||||
if (opt->dolby_surround_mode < 0)
|
if (opt->dolby_surround_mode == AC3ENC_OPT_NONE)
|
||||||
opt->dolby_surround_mode = 0;
|
opt->dolby_surround_mode = AC3ENC_OPT_NOT_INDICATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* validate audio production info */
|
/* validate audio production info */
|
||||||
if (opt->audio_production_info) {
|
if (opt->audio_production_info) {
|
||||||
if (opt->mixing_level < 0) {
|
if (opt->mixing_level == AC3ENC_OPT_NONE) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "mixing_level must be set if "
|
av_log(avctx, AV_LOG_ERROR, "mixing_level must be set if "
|
||||||
"room_type is set\n");
|
"room_type is set\n");
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
@ -1934,8 +1935,8 @@ int ff_ac3_validate_metadata(AC3EncodeContext *s)
|
|||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
/* default room type */
|
/* default room type */
|
||||||
if (opt->room_type < 0)
|
if (opt->room_type == AC3ENC_OPT_NONE)
|
||||||
opt->room_type = 0;
|
opt->room_type = AC3ENC_OPT_NOT_INDICATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set bitstream id for alternate bitstream syntax */
|
/* set bitstream id for alternate bitstream syntax */
|
||||||
@ -2207,12 +2208,16 @@ static av_cold void set_bandwidth(AC3EncodeContext *s)
|
|||||||
|
|
||||||
/* initialize coupling strategy */
|
/* initialize coupling strategy */
|
||||||
if (s->cpl_enabled) {
|
if (s->cpl_enabled) {
|
||||||
if (s->options.cpl_start >= 0) {
|
if (s->options.cpl_start != AC3ENC_OPT_AUTO) {
|
||||||
cpl_start = s->options.cpl_start;
|
cpl_start = s->options.cpl_start;
|
||||||
} else {
|
} else {
|
||||||
cpl_start = ac3_coupling_start_tab[s->channel_mode-2][s->bit_alloc.sr_code][s->frame_size_code/2];
|
cpl_start = ac3_coupling_start_tab[s->channel_mode-2][s->bit_alloc.sr_code][s->frame_size_code/2];
|
||||||
if (cpl_start < 0)
|
if (cpl_start < 0) {
|
||||||
s->cpl_enabled = 0;
|
if (s->options.channel_coupling == AC3ENC_OPT_AUTO)
|
||||||
|
s->cpl_enabled = 0;
|
||||||
|
else
|
||||||
|
cpl_start = 15;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (s->cpl_enabled) {
|
if (s->cpl_enabled) {
|
||||||
|
@ -65,6 +65,23 @@ typedef int32_t CoefType;
|
|||||||
typedef int64_t CoefSumType;
|
typedef int64_t CoefSumType;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* common option values */
|
||||||
|
#define AC3ENC_OPT_NONE -1
|
||||||
|
#define AC3ENC_OPT_AUTO -1
|
||||||
|
#define AC3ENC_OPT_OFF 0
|
||||||
|
#define AC3ENC_OPT_ON 1
|
||||||
|
#define AC3ENC_OPT_NOT_INDICATED 0
|
||||||
|
#define AC3ENC_OPT_MODE_ON 1
|
||||||
|
#define AC3ENC_OPT_MODE_OFF 2
|
||||||
|
|
||||||
|
/* specific option values */
|
||||||
|
#define AC3ENC_OPT_LARGE_ROOM 1
|
||||||
|
#define AC3ENC_OPT_SMALL_ROOM 2
|
||||||
|
#define AC3ENC_OPT_DOWNMIX_LTRT 1
|
||||||
|
#define AC3ENC_OPT_DOWNMIX_LORO 2
|
||||||
|
#define AC3ENC_OPT_ADCONV_STANDARD 0
|
||||||
|
#define AC3ENC_OPT_ADCONV_HDCD 1
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/**
|
/**
|
||||||
|
@ -19,6 +19,24 @@ typedef struct CombineContext{
|
|||||||
#define AC3ENC_TYPE_EAC3 2
|
#define AC3ENC_TYPE_EAC3 2
|
||||||
|
|
||||||
#define AC3ENC_TYPE 12354
|
#define AC3ENC_TYPE 12354
|
||||||
|
|
||||||
|
/* common option values */
|
||||||
|
#define AC3ENC_OPT_NONE -1
|
||||||
|
#define AC3ENC_OPT_AUTO -1
|
||||||
|
#define AC3ENC_OPT_OFF 0
|
||||||
|
#define AC3ENC_OPT_ON 1
|
||||||
|
#define AC3ENC_OPT_NOT_INDICATED 0
|
||||||
|
#define AC3ENC_OPT_MODE_ON 1
|
||||||
|
#define AC3ENC_OPT_MODE_OFF 2
|
||||||
|
|
||||||
|
/* specific option values */
|
||||||
|
#define AC3ENC_OPT_LARGE_ROOM 1
|
||||||
|
#define AC3ENC_OPT_SMALL_ROOM 2
|
||||||
|
#define AC3ENC_OPT_DOWNMIX_LTRT 1
|
||||||
|
#define AC3ENC_OPT_DOWNMIX_LORO 2
|
||||||
|
#define AC3ENC_OPT_ADCONV_STANDARD 0
|
||||||
|
#define AC3ENC_OPT_ADCONV_HDCD 1
|
||||||
|
|
||||||
#include "ac3enc_opts_template.c"
|
#include "ac3enc_opts_template.c"
|
||||||
|
|
||||||
static AVClass ac3enc_class = { "AC-3 Encoder", av_default_item_name,
|
static AVClass ac3enc_class = { "AC-3 Encoder", av_default_item_name,
|
||||||
|
@ -37,46 +37,46 @@ static const AVOption eac3_options[] = {
|
|||||||
{"surround_mixlev", "Surround Mix Level", OFFSET(surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = LEVEL_MINUS_6DB }, 0.0, 1.0, AC3ENC_PARAM},
|
{"surround_mixlev", "Surround Mix Level", OFFSET(surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = LEVEL_MINUS_6DB }, 0.0, 1.0, AC3ENC_PARAM},
|
||||||
#endif
|
#endif
|
||||||
/* audio production information */
|
/* audio production information */
|
||||||
{"mixing_level", "Mixing Level", OFFSET(mixing_level), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 111, AC3ENC_PARAM},
|
{"mixing_level", "Mixing Level", OFFSET(mixing_level), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, 111, AC3ENC_PARAM},
|
||||||
{"room_type", "Room Type", OFFSET(room_type), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "room_type"},
|
{"room_type", "Room Type", OFFSET(room_type), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_SMALL_ROOM, AC3ENC_PARAM, "room_type"},
|
||||||
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
|
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
|
||||||
{"large", "Large Room", 0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
|
{"large", "Large Room", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_LARGE_ROOM }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
|
||||||
{"small", "Small Room", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
|
{"small", "Small Room", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_SMALL_ROOM }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"},
|
||||||
/* other metadata options */
|
/* other metadata options */
|
||||||
{"copyright", "Copyright Bit", OFFSET(copyright), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 1, AC3ENC_PARAM},
|
{"copyright", "Copyright Bit", OFFSET(copyright), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, 1, AC3ENC_PARAM},
|
||||||
{"dialnorm", "Dialogue Level (dB)", OFFSET(dialogue_level), FF_OPT_TYPE_INT, {.dbl = -31 }, -31, -1, AC3ENC_PARAM},
|
{"dialnorm", "Dialogue Level (dB)", OFFSET(dialogue_level), FF_OPT_TYPE_INT, {.dbl = -31 }, -31, -1, AC3ENC_PARAM},
|
||||||
{"dsur_mode", "Dolby Surround Mode", OFFSET(dolby_surround_mode), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "dsur_mode"},
|
{"dsur_mode", "Dolby Surround Mode", OFFSET(dolby_surround_mode), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_MODE_OFF, AC3ENC_PARAM, "dsur_mode"},
|
||||||
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
|
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
|
||||||
{"on", "Dolby Surround Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
|
{"on", "Dolby Surround Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
|
||||||
{"off", "Not Dolby Surround Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
|
{"off", "Not Dolby Surround Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"},
|
||||||
{"original", "Original Bit Stream", OFFSET(original), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 1, AC3ENC_PARAM},
|
{"original", "Original Bit Stream", OFFSET(original), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, 1, AC3ENC_PARAM},
|
||||||
/* extended bitstream information */
|
/* extended bitstream information */
|
||||||
{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "dmix_mode"},
|
{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_DOWNMIX_LORO, AC3ENC_PARAM, "dmix_mode"},
|
||||||
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
|
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
|
||||||
{"ltrt", "Lt/Rt Downmix Preferred", 0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
|
{"ltrt", "Lt/Rt Downmix Preferred", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_DOWNMIX_LTRT }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
|
||||||
{"loro", "Lo/Ro Downmix Preferred", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
|
{"loro", "Lo/Ro Downmix Preferred", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_DOWNMIX_LORO }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"},
|
||||||
{"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
{"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
||||||
{"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
{"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
||||||
{"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
{"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
||||||
{"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
{"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level), FF_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM},
|
||||||
{"dsurex_mode", "Dolby Surround EX Mode", OFFSET(dolby_surround_ex_mode), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "dsurex_mode"},
|
{"dsurex_mode", "Dolby Surround EX Mode", OFFSET(dolby_surround_ex_mode), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_MODE_OFF, AC3ENC_PARAM, "dsurex_mode"},
|
||||||
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
|
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
|
||||||
{"on", "Dolby Surround EX Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
|
{"on", "Dolby Surround EX Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
|
||||||
{"off", "Not Dolby Surround EX Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
|
{"off", "Not Dolby Surround EX Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"},
|
||||||
{"dheadphone_mode", "Dolby Headphone Mode", OFFSET(dolby_headphone_mode), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 2, AC3ENC_PARAM, "dheadphone_mode"},
|
{"dheadphone_mode", "Dolby Headphone Mode", OFFSET(dolby_headphone_mode), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_MODE_OFF, AC3ENC_PARAM, "dheadphone_mode"},
|
||||||
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
|
{"notindicated", "Not Indicated (default)", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
|
||||||
{"on", "Dolby Headphone Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
|
{"on", "Dolby Headphone Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
|
||||||
{"off", "Not Dolby Headphone Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = 2 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
|
{"off", "Not Dolby Headphone Encoded", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"},
|
||||||
{"ad_conv_type", "A/D Converter Type", OFFSET(ad_converter_type), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 1, AC3ENC_PARAM, "ad_conv_type"},
|
{"ad_conv_type", "A/D Converter Type", OFFSET(ad_converter_type), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_ADCONV_HDCD, AC3ENC_PARAM, "ad_conv_type"},
|
||||||
{"standard", "Standard (default)", 0, FF_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"},
|
{"standard", "Standard (default)", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_ADCONV_STANDARD }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"},
|
||||||
{"hdcd", "HDCD", 0, FF_OPT_TYPE_CONST, {.dbl = 1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"},
|
{"hdcd", "HDCD", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_ADCONV_HDCD }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"},
|
||||||
/* Other Encoding Options */
|
/* Other Encoding Options */
|
||||||
{"stereo_rematrixing", "Stereo Rematrixing", OFFSET(stereo_rematrixing), FF_OPT_TYPE_INT, {.dbl = 1 }, 0, 1, AC3ENC_PARAM},
|
{"stereo_rematrixing", "Stereo Rematrixing", OFFSET(stereo_rematrixing), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_ON }, AC3ENC_OPT_OFF, AC3ENC_OPT_ON, AC3ENC_PARAM},
|
||||||
#if AC3ENC_TYPE != AC3ENC_TYPE_AC3_FIXED
|
#if AC3ENC_TYPE != AC3ENC_TYPE_AC3_FIXED
|
||||||
{"channel_coupling", "Channel Coupling", OFFSET(channel_coupling), FF_OPT_TYPE_INT, {.dbl = 1 }, 0, 1, AC3ENC_PARAM, "channel_coupling"},
|
{"channel_coupling", "Channel Coupling", OFFSET(channel_coupling), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_AUTO }, AC3ENC_OPT_AUTO, AC3ENC_OPT_ON, AC3ENC_PARAM, "channel_coupling"},
|
||||||
{"auto", "Selected by the Encoder", 0, FF_OPT_TYPE_CONST, {.dbl = -1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "channel_coupling"},
|
{"auto", "Selected by the Encoder", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_AUTO }, INT_MIN, INT_MAX, AC3ENC_PARAM, "channel_coupling"},
|
||||||
{"cpl_start_band", "Coupling Start Band", OFFSET(cpl_start), FF_OPT_TYPE_INT, {.dbl = -1 }, -1, 15, AC3ENC_PARAM, "cpl_start_band"},
|
{"cpl_start_band", "Coupling Start Band", OFFSET(cpl_start), FF_OPT_TYPE_INT, {.dbl = AC3ENC_OPT_AUTO }, AC3ENC_OPT_AUTO, 15, AC3ENC_PARAM, "cpl_start_band"},
|
||||||
{"auto", "Selected by the Encoder", 0, FF_OPT_TYPE_CONST, {.dbl = -1 }, INT_MIN, INT_MAX, AC3ENC_PARAM, "cpl_start_band"},
|
{"auto", "Selected by the Encoder", 0, FF_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_AUTO }, INT_MIN, INT_MAX, AC3ENC_PARAM, "cpl_start_band"},
|
||||||
#endif
|
#endif
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
@ -126,7 +126,7 @@ static inline float calc_cpl_coord(float energy_ch, float energy_cpl)
|
|||||||
float coord = 0.125;
|
float coord = 0.125;
|
||||||
if (energy_cpl > 0)
|
if (energy_cpl > 0)
|
||||||
coord *= sqrtf(energy_ch / energy_cpl);
|
coord *= sqrtf(energy_ch / energy_cpl);
|
||||||
return coord;
|
return FFMIN(coord, COEF_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -291,7 +291,6 @@ static void apply_channel_coupling(AC3EncodeContext *s)
|
|||||||
if (!block->cpl_in_use)
|
if (!block->cpl_in_use)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
clip_coefficients(&s->dsp, cpl_coords[blk][1], s->fbw_channels * 16);
|
|
||||||
s->ac3dsp.float_to_fixed24(fixed_cpl_coords[blk][1],
|
s->ac3dsp.float_to_fixed24(fixed_cpl_coords[blk][1],
|
||||||
cpl_coords[blk][1],
|
cpl_coords[blk][1],
|
||||||
s->fbw_channels * 16);
|
s->fbw_channels * 16);
|
||||||
|
@ -2635,7 +2635,6 @@ typedef struct AVCodecContext {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Bits per sample/pixel of internal libavcodec pixel/sample format.
|
* Bits per sample/pixel of internal libavcodec pixel/sample format.
|
||||||
* This field is applicable only when sample_fmt is AV_SAMPLE_FMT_S32.
|
|
||||||
* - encoding: set by user.
|
* - encoding: set by user.
|
||||||
* - decoding: set by libavcodec.
|
* - decoding: set by libavcodec.
|
||||||
*/
|
*/
|
||||||
|
@ -192,7 +192,8 @@ static inline int decode_residual_inter(AVSContext *h) {
|
|||||||
|
|
||||||
static int decode_mb_i(AVSContext *h, int cbp_code) {
|
static int decode_mb_i(AVSContext *h, int cbp_code) {
|
||||||
GetBitContext *gb = &h->s.gb;
|
GetBitContext *gb = &h->s.gb;
|
||||||
int block, pred_mode_uv;
|
unsigned pred_mode_uv;
|
||||||
|
int block;
|
||||||
uint8_t top[18];
|
uint8_t top[18];
|
||||||
uint8_t *left = NULL;
|
uint8_t *left = NULL;
|
||||||
uint8_t *d;
|
uint8_t *d;
|
||||||
@ -448,6 +449,8 @@ static inline int check_for_slice(AVSContext *h) {
|
|||||||
if((show_bits_long(gb,24+align) & 0xFFFFFF) == 0x000001) {
|
if((show_bits_long(gb,24+align) & 0xFFFFFF) == 0x000001) {
|
||||||
skip_bits_long(gb,24+align);
|
skip_bits_long(gb,24+align);
|
||||||
h->stc = get_bits(gb,8);
|
h->stc = get_bits(gb,8);
|
||||||
|
if (h->stc >= h->mb_height)
|
||||||
|
return 0;
|
||||||
decode_slice_header(h,gb);
|
decode_slice_header(h,gb);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -662,7 +665,7 @@ static int cavs_decode_frame(AVCodecContext * avctx,void *data, int *data_size,
|
|||||||
buf_end = buf + buf_size;
|
buf_end = buf + buf_size;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
buf_ptr = ff_find_start_code(buf_ptr,buf_end, &stc);
|
buf_ptr = ff_find_start_code(buf_ptr,buf_end, &stc);
|
||||||
if(stc & 0xFFFFFE00)
|
if((stc & 0xFFFFFE00) || buf_ptr == buf_end)
|
||||||
return FFMAX(0, buf_ptr - buf - s->parse_context.last_index);
|
return FFMAX(0, buf_ptr - buf - s->parse_context.last_index);
|
||||||
input_size = (buf_end - buf_ptr)*8;
|
input_size = (buf_end - buf_ptr)*8;
|
||||||
switch(stc) {
|
switch(stc) {
|
||||||
|
Loading…
Reference in New Issue
Block a user