mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
sipr: use a function pointer to select the decode_frame function
This commit is contained in:
parent
3468ff1060
commit
979c8de549
@ -492,8 +492,12 @@ static av_cold int sipr_decoder_init(AVCodecContext * avctx)
|
|||||||
|
|
||||||
av_log(avctx, AV_LOG_DEBUG, "Mode: %s\n", modes[ctx->mode].mode_name);
|
av_log(avctx, AV_LOG_DEBUG, "Mode: %s\n", modes[ctx->mode].mode_name);
|
||||||
|
|
||||||
if (ctx->mode == MODE_16k)
|
if (ctx->mode == MODE_16k) {
|
||||||
ff_sipr_init_16k(ctx);
|
ff_sipr_init_16k(ctx);
|
||||||
|
ctx->decode_frame = ff_sipr_decode_frame_16k;
|
||||||
|
} else {
|
||||||
|
ctx->decode_frame = decode_frame;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < LP_FILTER_ORDER; i++)
|
for (i = 0; i < LP_FILTER_ORDER; i++)
|
||||||
ctx->lsp_history[i] = cos((i+1) * M_PI / (LP_FILTER_ORDER + 1));
|
ctx->lsp_history[i] = cos((i+1) * M_PI / (LP_FILTER_ORDER + 1));
|
||||||
@ -541,10 +545,7 @@ static int sipr_decode_frame(AVCodecContext *avctx, void *datap,
|
|||||||
for (i = 0; i < mode_par->frames_per_packet; i++) {
|
for (i = 0; i < mode_par->frames_per_packet; i++) {
|
||||||
decode_parameters(&parm, &gb, mode_par);
|
decode_parameters(&parm, &gb, mode_par);
|
||||||
|
|
||||||
if (ctx->mode == MODE_16k)
|
ctx->decode_frame(ctx, &parm, data);
|
||||||
ff_sipr_decode_frame_16k(ctx, &parm, data);
|
|
||||||
else
|
|
||||||
decode_frame(ctx, &parm, data);
|
|
||||||
|
|
||||||
data += subframe_size * mode_par->subframe_count;
|
data += subframe_size * mode_par->subframe_count;
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,18 @@ typedef enum {
|
|||||||
MODE_COUNT
|
MODE_COUNT
|
||||||
} SiprMode;
|
} SiprMode;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct SiprParameters {
|
||||||
|
int ma_pred_switch; ///< switched moving average predictor
|
||||||
|
int vq_indexes[5];
|
||||||
|
int pitch_delay[5]; ///< pitch delay
|
||||||
|
int gp_index[5]; ///< adaptive-codebook gain indexes
|
||||||
|
int16_t fc_indexes[5][10]; ///< fixed-codebook indexes
|
||||||
|
int gc_index[5]; ///< fixed-codebook gain indexes
|
||||||
|
} SiprParameters;
|
||||||
|
|
||||||
|
typedef struct SiprContext {
|
||||||
AVCodecContext *avctx;
|
AVCodecContext *avctx;
|
||||||
|
AVFrame frame;
|
||||||
|
|
||||||
SiprMode mode;
|
SiprMode mode;
|
||||||
|
|
||||||
@ -85,16 +95,10 @@ typedef struct {
|
|||||||
float mem_preemph[LP_FILTER_ORDER_16k];
|
float mem_preemph[LP_FILTER_ORDER_16k];
|
||||||
float synth[LP_FILTER_ORDER_16k];
|
float synth[LP_FILTER_ORDER_16k];
|
||||||
double lsp_history_16k[16];
|
double lsp_history_16k[16];
|
||||||
} SiprContext;
|
|
||||||
|
|
||||||
typedef struct {
|
void (*decode_frame)(struct SiprContext *ctx, SiprParameters *params,
|
||||||
int ma_pred_switch; ///< switched moving average predictor
|
float *out_data);
|
||||||
int vq_indexes[5];
|
} SiprContext;
|
||||||
int pitch_delay[5]; ///< pitch delay
|
|
||||||
int gp_index[5]; ///< adaptive-codebook gain indexes
|
|
||||||
int16_t fc_indexes[5][10]; ///< fixed-codebook indexes
|
|
||||||
int gc_index[5]; ///< fixed-codebook gain indexes
|
|
||||||
} SiprParameters;
|
|
||||||
|
|
||||||
extern const float ff_pow_0_5[16];
|
extern const float ff_pow_0_5[16];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user