mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-03 05:10:03 +02:00
avcodec/ac3enc: Move ff_ac3_validate_metadate() upwards
Will avoid a forward declaration in the next commit. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
6244ecf8ec
commit
1042ee36cd
@ -273,6 +273,215 @@ static const int8_t ac3_coupling_start_tab[6][3][19] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define FLT_OPTION_THRESHOLD 0.01
|
||||||
|
|
||||||
|
static int validate_float_option(float v, const float *v_list, int v_list_size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < v_list_size; i++) {
|
||||||
|
if (v < (v_list[i] + FLT_OPTION_THRESHOLD) &&
|
||||||
|
v > (v_list[i] - FLT_OPTION_THRESHOLD))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i == v_list_size)
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void validate_mix_level(void *log_ctx, const char *opt_name,
|
||||||
|
float *opt_param, const float *list,
|
||||||
|
int list_size, int default_value, int min_value,
|
||||||
|
int *ctx_param)
|
||||||
|
{
|
||||||
|
int mixlev = validate_float_option(*opt_param, list, list_size);
|
||||||
|
if (mixlev < min_value) {
|
||||||
|
mixlev = default_value;
|
||||||
|
if (*opt_param >= 0.0) {
|
||||||
|
av_log(log_ctx, AV_LOG_WARNING, "requested %s is not valid. using "
|
||||||
|
"default value: %0.3f\n", opt_name, list[mixlev]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*opt_param = list[mixlev];
|
||||||
|
*ctx_param = mixlev;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate metadata options as set by AVOption system.
|
||||||
|
* These values can optionally be changed per-frame.
|
||||||
|
*
|
||||||
|
* @param s AC-3 encoder private context
|
||||||
|
*/
|
||||||
|
int ff_ac3_validate_metadata(AC3EncodeContext *s)
|
||||||
|
{
|
||||||
|
AVCodecContext *avctx = s->avctx;
|
||||||
|
AC3EncOptions *opt = &s->options;
|
||||||
|
|
||||||
|
opt->audio_production_info = 0;
|
||||||
|
opt->extended_bsi_1 = 0;
|
||||||
|
opt->extended_bsi_2 = 0;
|
||||||
|
opt->eac3_mixing_metadata = 0;
|
||||||
|
opt->eac3_info_metadata = 0;
|
||||||
|
|
||||||
|
/* determine mixing metadata / xbsi1 use */
|
||||||
|
if (s->channel_mode > AC3_CHMODE_STEREO && opt->preferred_stereo_downmix != AC3ENC_OPT_NONE) {
|
||||||
|
opt->extended_bsi_1 = 1;
|
||||||
|
opt->eac3_mixing_metadata = 1;
|
||||||
|
}
|
||||||
|
if (s->has_center &&
|
||||||
|
(opt->ltrt_center_mix_level >= 0 || opt->loro_center_mix_level >= 0)) {
|
||||||
|
opt->extended_bsi_1 = 1;
|
||||||
|
opt->eac3_mixing_metadata = 1;
|
||||||
|
}
|
||||||
|
if (s->has_surround &&
|
||||||
|
(opt->ltrt_surround_mix_level >= 0 || opt->loro_surround_mix_level >= 0)) {
|
||||||
|
opt->extended_bsi_1 = 1;
|
||||||
|
opt->eac3_mixing_metadata = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s->eac3) {
|
||||||
|
/* determine info metadata use */
|
||||||
|
if (avctx->audio_service_type != AV_AUDIO_SERVICE_TYPE_MAIN)
|
||||||
|
opt->eac3_info_metadata = 1;
|
||||||
|
if (opt->copyright != AC3ENC_OPT_NONE || opt->original != AC3ENC_OPT_NONE)
|
||||||
|
opt->eac3_info_metadata = 1;
|
||||||
|
if (s->channel_mode == AC3_CHMODE_STEREO &&
|
||||||
|
(opt->dolby_headphone_mode != AC3ENC_OPT_NONE || opt->dolby_surround_mode != AC3ENC_OPT_NONE))
|
||||||
|
opt->eac3_info_metadata = 1;
|
||||||
|
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode != AC3ENC_OPT_NONE)
|
||||||
|
opt->eac3_info_metadata = 1;
|
||||||
|
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->eac3_info_metadata = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* determine audio production info use */
|
||||||
|
if (opt->mixing_level != AC3ENC_OPT_NONE || opt->room_type != AC3ENC_OPT_NONE)
|
||||||
|
opt->audio_production_info = 1;
|
||||||
|
|
||||||
|
/* determine xbsi2 use */
|
||||||
|
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode != AC3ENC_OPT_NONE)
|
||||||
|
opt->extended_bsi_2 = 1;
|
||||||
|
if (s->channel_mode == AC3_CHMODE_STEREO && opt->dolby_headphone_mode != AC3ENC_OPT_NONE)
|
||||||
|
opt->extended_bsi_2 = 1;
|
||||||
|
if (opt->ad_converter_type != AC3ENC_OPT_NONE)
|
||||||
|
opt->extended_bsi_2 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* validate AC-3 mixing levels */
|
||||||
|
if (!s->eac3) {
|
||||||
|
if (s->has_center) {
|
||||||
|
validate_mix_level(avctx, "center_mix_level", &opt->center_mix_level,
|
||||||
|
cmixlev_options, CMIXLEV_NUM_OPTIONS, 1, 0,
|
||||||
|
&s->center_mix_level);
|
||||||
|
}
|
||||||
|
if (s->has_surround) {
|
||||||
|
validate_mix_level(avctx, "surround_mix_level", &opt->surround_mix_level,
|
||||||
|
surmixlev_options, SURMIXLEV_NUM_OPTIONS, 1, 0,
|
||||||
|
&s->surround_mix_level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* validate extended bsi 1 / mixing metadata */
|
||||||
|
if (opt->extended_bsi_1 || opt->eac3_mixing_metadata) {
|
||||||
|
/* default preferred stereo downmix */
|
||||||
|
if (opt->preferred_stereo_downmix == AC3ENC_OPT_NONE)
|
||||||
|
opt->preferred_stereo_downmix = AC3ENC_OPT_NOT_INDICATED;
|
||||||
|
if (!s->eac3 || s->has_center) {
|
||||||
|
/* validate Lt/Rt center mix level */
|
||||||
|
validate_mix_level(avctx, "ltrt_center_mix_level",
|
||||||
|
&opt->ltrt_center_mix_level, extmixlev_options,
|
||||||
|
EXTMIXLEV_NUM_OPTIONS, 5, 0,
|
||||||
|
&s->ltrt_center_mix_level);
|
||||||
|
/* validate Lo/Ro center mix level */
|
||||||
|
validate_mix_level(avctx, "loro_center_mix_level",
|
||||||
|
&opt->loro_center_mix_level, extmixlev_options,
|
||||||
|
EXTMIXLEV_NUM_OPTIONS, 5, 0,
|
||||||
|
&s->loro_center_mix_level);
|
||||||
|
}
|
||||||
|
if (!s->eac3 || s->has_surround) {
|
||||||
|
/* validate Lt/Rt surround mix level */
|
||||||
|
validate_mix_level(avctx, "ltrt_surround_mix_level",
|
||||||
|
&opt->ltrt_surround_mix_level, extmixlev_options,
|
||||||
|
EXTMIXLEV_NUM_OPTIONS, 6, 3,
|
||||||
|
&s->ltrt_surround_mix_level);
|
||||||
|
/* validate Lo/Ro surround mix level */
|
||||||
|
validate_mix_level(avctx, "loro_surround_mix_level",
|
||||||
|
&opt->loro_surround_mix_level, extmixlev_options,
|
||||||
|
EXTMIXLEV_NUM_OPTIONS, 6, 3,
|
||||||
|
&s->loro_surround_mix_level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* validate audio service type / channels combination */
|
||||||
|
if ((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_KARAOKE &&
|
||||||
|
avctx->ch_layout.nb_channels == 1) ||
|
||||||
|
((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_COMMENTARY ||
|
||||||
|
avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_EMERGENCY ||
|
||||||
|
avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_VOICE_OVER)
|
||||||
|
&& avctx->ch_layout.nb_channels > 1)) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "invalid audio service type for the "
|
||||||
|
"specified number of channels\n");
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* validate extended bsi 2 / info metadata */
|
||||||
|
if (opt->extended_bsi_2 || opt->eac3_info_metadata) {
|
||||||
|
/* default dolby headphone mode */
|
||||||
|
if (opt->dolby_headphone_mode == AC3ENC_OPT_NONE)
|
||||||
|
opt->dolby_headphone_mode = AC3ENC_OPT_NOT_INDICATED;
|
||||||
|
/* default dolby surround ex mode */
|
||||||
|
if (opt->dolby_surround_ex_mode == AC3ENC_OPT_NONE)
|
||||||
|
opt->dolby_surround_ex_mode = AC3ENC_OPT_NOT_INDICATED;
|
||||||
|
/* default A/D converter type */
|
||||||
|
if (opt->ad_converter_type == AC3ENC_OPT_NONE)
|
||||||
|
opt->ad_converter_type = AC3ENC_OPT_ADCONV_STANDARD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* copyright & original defaults */
|
||||||
|
if (!s->eac3 || opt->eac3_info_metadata) {
|
||||||
|
/* default copyright */
|
||||||
|
if (opt->copyright == AC3ENC_OPT_NONE)
|
||||||
|
opt->copyright = AC3ENC_OPT_OFF;
|
||||||
|
/* default original */
|
||||||
|
if (opt->original == AC3ENC_OPT_NONE)
|
||||||
|
opt->original = AC3ENC_OPT_ON;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dolby surround mode default */
|
||||||
|
if (!s->eac3 || opt->eac3_info_metadata) {
|
||||||
|
if (opt->dolby_surround_mode == AC3ENC_OPT_NONE)
|
||||||
|
opt->dolby_surround_mode = AC3ENC_OPT_NOT_INDICATED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* validate audio production info */
|
||||||
|
if (opt->audio_production_info) {
|
||||||
|
if (opt->mixing_level == AC3ENC_OPT_NONE) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "mixing_level must be set if "
|
||||||
|
"room_type is set\n");
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
|
if (opt->mixing_level < 80) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "invalid mixing level. must be between "
|
||||||
|
"80dB and 111dB\n");
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
|
/* default room type */
|
||||||
|
if (opt->room_type == AC3ENC_OPT_NONE)
|
||||||
|
opt->room_type = AC3ENC_OPT_NOT_INDICATED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set bitstream id for alternate bitstream syntax */
|
||||||
|
if (!s->eac3 && (opt->extended_bsi_1 || opt->extended_bsi_2))
|
||||||
|
s->bitstream_id = 6;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adjust the frame size to make the average bit rate match the target bit rate.
|
* Adjust the frame size to make the average bit rate match the target bit rate.
|
||||||
* This is only needed for 11025, 22050, and 44100 sample rates or any E-AC-3.
|
* This is only needed for 11025, 22050, and 44100 sample rates or any E-AC-3.
|
||||||
@ -1930,217 +2139,6 @@ static void dprint_options(AC3EncodeContext *s)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define FLT_OPTION_THRESHOLD 0.01
|
|
||||||
|
|
||||||
static int validate_float_option(float v, const float *v_list, int v_list_size)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < v_list_size; i++) {
|
|
||||||
if (v < (v_list[i] + FLT_OPTION_THRESHOLD) &&
|
|
||||||
v > (v_list[i] - FLT_OPTION_THRESHOLD))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (i == v_list_size)
|
|
||||||
return AVERROR(EINVAL);
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void validate_mix_level(void *log_ctx, const char *opt_name,
|
|
||||||
float *opt_param, const float *list,
|
|
||||||
int list_size, int default_value, int min_value,
|
|
||||||
int *ctx_param)
|
|
||||||
{
|
|
||||||
int mixlev = validate_float_option(*opt_param, list, list_size);
|
|
||||||
if (mixlev < min_value) {
|
|
||||||
mixlev = default_value;
|
|
||||||
if (*opt_param >= 0.0) {
|
|
||||||
av_log(log_ctx, AV_LOG_WARNING, "requested %s is not valid. using "
|
|
||||||
"default value: %0.3f\n", opt_name, list[mixlev]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*opt_param = list[mixlev];
|
|
||||||
*ctx_param = mixlev;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validate metadata options as set by AVOption system.
|
|
||||||
* These values can optionally be changed per-frame.
|
|
||||||
*
|
|
||||||
* @param s AC-3 encoder private context
|
|
||||||
*/
|
|
||||||
int ff_ac3_validate_metadata(AC3EncodeContext *s)
|
|
||||||
{
|
|
||||||
AVCodecContext *avctx = s->avctx;
|
|
||||||
AC3EncOptions *opt = &s->options;
|
|
||||||
|
|
||||||
opt->audio_production_info = 0;
|
|
||||||
opt->extended_bsi_1 = 0;
|
|
||||||
opt->extended_bsi_2 = 0;
|
|
||||||
opt->eac3_mixing_metadata = 0;
|
|
||||||
opt->eac3_info_metadata = 0;
|
|
||||||
|
|
||||||
/* determine mixing metadata / xbsi1 use */
|
|
||||||
if (s->channel_mode > AC3_CHMODE_STEREO && opt->preferred_stereo_downmix != AC3ENC_OPT_NONE) {
|
|
||||||
opt->extended_bsi_1 = 1;
|
|
||||||
opt->eac3_mixing_metadata = 1;
|
|
||||||
}
|
|
||||||
if (s->has_center &&
|
|
||||||
(opt->ltrt_center_mix_level >= 0 || opt->loro_center_mix_level >= 0)) {
|
|
||||||
opt->extended_bsi_1 = 1;
|
|
||||||
opt->eac3_mixing_metadata = 1;
|
|
||||||
}
|
|
||||||
if (s->has_surround &&
|
|
||||||
(opt->ltrt_surround_mix_level >= 0 || opt->loro_surround_mix_level >= 0)) {
|
|
||||||
opt->extended_bsi_1 = 1;
|
|
||||||
opt->eac3_mixing_metadata = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->eac3) {
|
|
||||||
/* determine info metadata use */
|
|
||||||
if (avctx->audio_service_type != AV_AUDIO_SERVICE_TYPE_MAIN)
|
|
||||||
opt->eac3_info_metadata = 1;
|
|
||||||
if (opt->copyright != AC3ENC_OPT_NONE || opt->original != AC3ENC_OPT_NONE)
|
|
||||||
opt->eac3_info_metadata = 1;
|
|
||||||
if (s->channel_mode == AC3_CHMODE_STEREO &&
|
|
||||||
(opt->dolby_headphone_mode != AC3ENC_OPT_NONE || opt->dolby_surround_mode != AC3ENC_OPT_NONE))
|
|
||||||
opt->eac3_info_metadata = 1;
|
|
||||||
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode != AC3ENC_OPT_NONE)
|
|
||||||
opt->eac3_info_metadata = 1;
|
|
||||||
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->eac3_info_metadata = 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* determine audio production info use */
|
|
||||||
if (opt->mixing_level != AC3ENC_OPT_NONE || opt->room_type != AC3ENC_OPT_NONE)
|
|
||||||
opt->audio_production_info = 1;
|
|
||||||
|
|
||||||
/* determine xbsi2 use */
|
|
||||||
if (s->channel_mode >= AC3_CHMODE_2F2R && opt->dolby_surround_ex_mode != AC3ENC_OPT_NONE)
|
|
||||||
opt->extended_bsi_2 = 1;
|
|
||||||
if (s->channel_mode == AC3_CHMODE_STEREO && opt->dolby_headphone_mode != AC3ENC_OPT_NONE)
|
|
||||||
opt->extended_bsi_2 = 1;
|
|
||||||
if (opt->ad_converter_type != AC3ENC_OPT_NONE)
|
|
||||||
opt->extended_bsi_2 = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate AC-3 mixing levels */
|
|
||||||
if (!s->eac3) {
|
|
||||||
if (s->has_center) {
|
|
||||||
validate_mix_level(avctx, "center_mix_level", &opt->center_mix_level,
|
|
||||||
cmixlev_options, CMIXLEV_NUM_OPTIONS, 1, 0,
|
|
||||||
&s->center_mix_level);
|
|
||||||
}
|
|
||||||
if (s->has_surround) {
|
|
||||||
validate_mix_level(avctx, "surround_mix_level", &opt->surround_mix_level,
|
|
||||||
surmixlev_options, SURMIXLEV_NUM_OPTIONS, 1, 0,
|
|
||||||
&s->surround_mix_level);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate extended bsi 1 / mixing metadata */
|
|
||||||
if (opt->extended_bsi_1 || opt->eac3_mixing_metadata) {
|
|
||||||
/* default preferred stereo downmix */
|
|
||||||
if (opt->preferred_stereo_downmix == AC3ENC_OPT_NONE)
|
|
||||||
opt->preferred_stereo_downmix = AC3ENC_OPT_NOT_INDICATED;
|
|
||||||
if (!s->eac3 || s->has_center) {
|
|
||||||
/* validate Lt/Rt center mix level */
|
|
||||||
validate_mix_level(avctx, "ltrt_center_mix_level",
|
|
||||||
&opt->ltrt_center_mix_level, extmixlev_options,
|
|
||||||
EXTMIXLEV_NUM_OPTIONS, 5, 0,
|
|
||||||
&s->ltrt_center_mix_level);
|
|
||||||
/* validate Lo/Ro center mix level */
|
|
||||||
validate_mix_level(avctx, "loro_center_mix_level",
|
|
||||||
&opt->loro_center_mix_level, extmixlev_options,
|
|
||||||
EXTMIXLEV_NUM_OPTIONS, 5, 0,
|
|
||||||
&s->loro_center_mix_level);
|
|
||||||
}
|
|
||||||
if (!s->eac3 || s->has_surround) {
|
|
||||||
/* validate Lt/Rt surround mix level */
|
|
||||||
validate_mix_level(avctx, "ltrt_surround_mix_level",
|
|
||||||
&opt->ltrt_surround_mix_level, extmixlev_options,
|
|
||||||
EXTMIXLEV_NUM_OPTIONS, 6, 3,
|
|
||||||
&s->ltrt_surround_mix_level);
|
|
||||||
/* validate Lo/Ro surround mix level */
|
|
||||||
validate_mix_level(avctx, "loro_surround_mix_level",
|
|
||||||
&opt->loro_surround_mix_level, extmixlev_options,
|
|
||||||
EXTMIXLEV_NUM_OPTIONS, 6, 3,
|
|
||||||
&s->loro_surround_mix_level);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate audio service type / channels combination */
|
|
||||||
if ((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_KARAOKE &&
|
|
||||||
avctx->ch_layout.nb_channels == 1) ||
|
|
||||||
((avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_COMMENTARY ||
|
|
||||||
avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_EMERGENCY ||
|
|
||||||
avctx->audio_service_type == AV_AUDIO_SERVICE_TYPE_VOICE_OVER)
|
|
||||||
&& avctx->ch_layout.nb_channels > 1)) {
|
|
||||||
av_log(avctx, AV_LOG_ERROR, "invalid audio service type for the "
|
|
||||||
"specified number of channels\n");
|
|
||||||
return AVERROR(EINVAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate extended bsi 2 / info metadata */
|
|
||||||
if (opt->extended_bsi_2 || opt->eac3_info_metadata) {
|
|
||||||
/* default dolby headphone mode */
|
|
||||||
if (opt->dolby_headphone_mode == AC3ENC_OPT_NONE)
|
|
||||||
opt->dolby_headphone_mode = AC3ENC_OPT_NOT_INDICATED;
|
|
||||||
/* default dolby surround ex mode */
|
|
||||||
if (opt->dolby_surround_ex_mode == AC3ENC_OPT_NONE)
|
|
||||||
opt->dolby_surround_ex_mode = AC3ENC_OPT_NOT_INDICATED;
|
|
||||||
/* default A/D converter type */
|
|
||||||
if (opt->ad_converter_type == AC3ENC_OPT_NONE)
|
|
||||||
opt->ad_converter_type = AC3ENC_OPT_ADCONV_STANDARD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* copyright & original defaults */
|
|
||||||
if (!s->eac3 || opt->eac3_info_metadata) {
|
|
||||||
/* default copyright */
|
|
||||||
if (opt->copyright == AC3ENC_OPT_NONE)
|
|
||||||
opt->copyright = AC3ENC_OPT_OFF;
|
|
||||||
/* default original */
|
|
||||||
if (opt->original == AC3ENC_OPT_NONE)
|
|
||||||
opt->original = AC3ENC_OPT_ON;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* dolby surround mode default */
|
|
||||||
if (!s->eac3 || opt->eac3_info_metadata) {
|
|
||||||
if (opt->dolby_surround_mode == AC3ENC_OPT_NONE)
|
|
||||||
opt->dolby_surround_mode = AC3ENC_OPT_NOT_INDICATED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate audio production info */
|
|
||||||
if (opt->audio_production_info) {
|
|
||||||
if (opt->mixing_level == AC3ENC_OPT_NONE) {
|
|
||||||
av_log(avctx, AV_LOG_ERROR, "mixing_level must be set if "
|
|
||||||
"room_type is set\n");
|
|
||||||
return AVERROR(EINVAL);
|
|
||||||
}
|
|
||||||
if (opt->mixing_level < 80) {
|
|
||||||
av_log(avctx, AV_LOG_ERROR, "invalid mixing level. must be between "
|
|
||||||
"80dB and 111dB\n");
|
|
||||||
return AVERROR(EINVAL);
|
|
||||||
}
|
|
||||||
/* default room type */
|
|
||||||
if (opt->room_type == AC3ENC_OPT_NONE)
|
|
||||||
opt->room_type = AC3ENC_OPT_NOT_INDICATED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set bitstream id for alternate bitstream syntax */
|
|
||||||
if (!s->eac3 && (opt->extended_bsi_1 || opt->extended_bsi_2))
|
|
||||||
s->bitstream_id = 6;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finalize encoding and free any memory allocated by the encoder.
|
* Finalize encoding and free any memory allocated by the encoder.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user