mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-23 19:30:05 +00:00
vima: generate predict_table once, and share it with all decoders
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
77570a390d
commit
da22760364
@ -25,9 +25,8 @@
|
||||
#include "internal.h"
|
||||
#include "adpcm_data.h"
|
||||
|
||||
typedef struct {
|
||||
uint16_t predict_table[5786 * 2];
|
||||
} VimaContext;
|
||||
static int predict_table_init = 0;
|
||||
static uint16_t predict_table[5786 * 2];
|
||||
|
||||
static const uint8_t size_table[] =
|
||||
{
|
||||
@ -103,8 +102,12 @@ static const int8_t* const step_index_tables[] =
|
||||
|
||||
static av_cold int decode_init(AVCodecContext *avctx)
|
||||
{
|
||||
VimaContext *vima = avctx->priv_data;
|
||||
int start_pos;
|
||||
int start_pos;
|
||||
|
||||
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
|
||||
if (predict_table_init)
|
||||
return 0;
|
||||
|
||||
for (start_pos = 0; start_pos < 64; start_pos++) {
|
||||
unsigned int dest_pos, table_pos;
|
||||
@ -120,11 +123,10 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
put += table_value;
|
||||
table_value >>= 1;
|
||||
}
|
||||
vima->predict_table[dest_pos] = put;
|
||||
predict_table[dest_pos] = put;
|
||||
}
|
||||
}
|
||||
|
||||
avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
predict_table_init = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -133,7 +135,6 @@ static int decode_frame(AVCodecContext *avctx, void *data,
|
||||
int *got_frame_ptr, AVPacket *pkt)
|
||||
{
|
||||
GetBitContext gb;
|
||||
VimaContext *vima = avctx->priv_data;
|
||||
AVFrame *frame = data;
|
||||
int16_t pcm_data[2];
|
||||
uint32_t samples;
|
||||
@ -200,7 +201,7 @@ static int decode_frame(AVCodecContext *avctx, void *data,
|
||||
|
||||
predict_index = (lookup << (7 - lookup_size)) | (step_index << 6);
|
||||
predict_index = av_clip(predict_index, 0, 5785);
|
||||
diff = vima->predict_table[predict_index];
|
||||
diff = predict_table[predict_index];
|
||||
if (lookup)
|
||||
diff += ff_adpcm_step_table[step_index] >> (lookup_size - 1);
|
||||
if (highbit)
|
||||
@ -225,7 +226,6 @@ AVCodec ff_vima_decoder = {
|
||||
.name = "vima",
|
||||
.type = AVMEDIA_TYPE_AUDIO,
|
||||
.id = AV_CODEC_ID_VIMA,
|
||||
.priv_data_size = sizeof(VimaContext),
|
||||
.init = decode_init,
|
||||
.decode = decode_frame,
|
||||
.capabilities = CODEC_CAP_DR1,
|
||||
|
Loading…
Reference in New Issue
Block a user