32 const uint8_t **bands,
const int* num_bands,
33 int num_groups,
const uint8_t *group_map)
49 memcpy(ctx->
bands, bands,
sizeof(ctx->
bands[0]) * num_lens);
53 for (i = 0; i < num_groups; i++) {
80 return &ctx->
group[i-1];
107 float cutoff_coeff = 0;
118 if (cutoff_coeff && cutoff_coeff < 0.98)
121 cutoff_coeff, 0.0, 0.0);
124 for (i = 0; i < avctx->
channels; i++)
141 for (ch = 0; ch < channels; ch++)
143 &audio[ch][frame_size], 1, &audio[ch][frame_size], 1);
void(* filter_flt)(const struct FFIIRFilterCoeffs *coeffs, struct FFIIRFilterState *state, int size, const float *src, int sstep, float *dst, int dstep)
Perform IIR filtering on floating-point input samples.
uint8_t ** bands
scalefactor band sizes for possible frame sizes
FFPsyChannelGroup * group
channel group information
memory handling functions
av_cold void ff_psy_preprocess_end(struct FFPsyPreprocessContext *ctx)
Cleanup audio preprocessing module.
psychoacoustic information for an arbitrary group of channels
av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx, int num_lens, const uint8_t **bands, const int *num_bands, int num_groups, const uint8_t *group_map)
Initialize psychoacoustic model.
int * num_bands
number of scalefactor bands for possible frame sizes
av_cold struct FFIIRFilterState * ff_iir_filter_init_state(int order)
Create new filter state.
av_cold struct FFIIRFilterCoeffs * ff_iir_filter_init_coeffs(void *avc, enum IIRFilterType filt_type, enum IIRFilterMode filt_mode, int order, float cutoff_ratio, float stopband, float ripple)
Initialize filter coefficients.
struct FFIIRFilterCoeffs * fcoeffs
context used by psychoacoustic model
const FFPsyModel ff_aac_psy_model
FFPsyChannel * ch[PSY_MAX_CHANS]
pointers to the individual channels in the group
av_cold void ff_iir_filter_free_statep(struct FFIIRFilterState **state)
Free and zero filter state.
codec-specific psychoacoustic model implementation
uint8_t num_ch
number of channels in this group
int frame_size
Number of samples per channel in an audio frame.
Libavcodec external API header.
int sample_rate
samples per second
FFPsyChannelGroup * ff_psy_find_group(FFPsyContext *ctx, int channel)
Determine what group a channel belongs to.
main external API structure.
void(* end)(FFPsyContext *apc)
int cutoff
lowpass frequency cutoff for analysis
const struct FFPsyModel * model
encoder-specific model functions
IIR filter global parameters.
void ff_iir_filter_init(FFIIRFilterContext *f)
Initialize FFIIRFilterContext.
struct FFIIRFilterState ** fstate
av_cold struct FFPsyPreprocessContext * ff_psy_preprocess_init(AVCodecContext *avctx)
psychoacoustic model audio preprocessing initialization
void ff_psy_preprocess(struct FFPsyPreprocessContext *ctx, float **audio, int channels)
Preprocess several channel in audio frame in order to compress it better.
struct FFIIRFilterContext fiir
int cutoff
Audio cutoff bandwidth (0 means "automatic")
int channels
number of audio channels
FFPsyChannel * ch
single channel information
int(* init)(FFPsyContext *apc)
static void * av_mallocz_array(size_t nmemb, size_t size)
av_cold void ff_iir_filter_free_coeffsp(struct FFIIRFilterCoeffs **coeffsp)
Free filter coefficients.
#define av_malloc_array(a, b)
AVCodecContext * avctx
encoder context
av_cold void ff_psy_end(FFPsyContext *ctx)
Cleanup model context at the end.
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...