#define CONFIG_FFT_FLOAT 0
#undef CONFIG_AC3ENC_FLOAT
#include "ac3enc.h"
+#include "eac3enc.h"
#define AC3ENC_TYPE AC3ENC_TYPE_AC3_FIXED
#include "ac3enc_opts_template.c"
/**
* Finalize MDCT and free allocated memory.
+ *
+ * @param s AC-3 encoder private context
*/
av_cold void AC3_NAME(mdct_end)(AC3EncodeContext *s)
{
/**
* Initialize MDCT tables.
- * @param nbits log2(MDCT size)
+ *
+ * @param s AC-3 encoder private context
+ * @return 0 on success, negative error code on failure
*/
av_cold int AC3_NAME(mdct_init)(AC3EncodeContext *s)
{
}
-/**
+/*
* Apply KBD window to input samples prior to MDCT.
*/
static void apply_window(DSPContext *dsp, int16_t *output, const int16_t *input,
}
-/**
+/*
* Normalize the input samples to use the maximum available precision.
* This assumes signed 16-bit input samples.
- *
- * @return exponent shift
*/
static int normalize_samples(AC3EncodeContext *s)
{
}
-/**
+/*
* Scale MDCT coefficients to 25-bit signed fixed-point.
*/
static void scale_coefficients(AC3EncodeContext *s)
}
-/**
+/*
* Clip MDCT coefficients to allowable range.
*/
static void clip_coefficients(DSPContext *dsp, int32_t *coef, unsigned int len)
}
+/*
+ * Calculate a single coupling coordinate.
+ */
+static CoefType calc_cpl_coord(CoefSumType energy_ch, CoefSumType energy_cpl)
+{
+ if (energy_cpl <= COEF_MAX) {
+ return 1048576;
+ } else {
+ uint64_t coord = energy_ch / (energy_cpl >> 24);
+ uint32_t coord32 = FFMIN(coord, 1073741824);
+ coord32 = ff_sqrt(coord32) << 9;
+ return FFMIN(coord32, COEF_MAX);
+ }
+}
+
+
static av_cold int ac3_fixed_encode_init(AVCodecContext *avctx)
{
AC3EncodeContext *s = avctx->priv_data;
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
.priv_class = &ac3enc_class,
.channel_layouts = ff_ac3_channel_layouts,
+ .defaults = ac3_defaults,
};