You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
avcodec/pcm: Cache sample_size value
No need to go through two switches per packet. Reviewed-by: Ramiro Polla <ramiro.polla@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
@@ -243,6 +243,7 @@ static int pcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef struct PCMDecode {
|
typedef struct PCMDecode {
|
||||||
|
int sample_size;
|
||||||
short table[256];
|
short table[256];
|
||||||
void (*vector_fmul_scalar)(float *dst, const float *src, float mul,
|
void (*vector_fmul_scalar)(float *dst, const float *src, float mul,
|
||||||
int len);
|
int len);
|
||||||
@@ -286,8 +287,14 @@ static av_cold int pcm_decode_init(AVCodecContext *avctx)
|
|||||||
|
|
||||||
avctx->sample_fmt = avctx->codec->sample_fmts[0];
|
avctx->sample_fmt = avctx->codec->sample_fmts[0];
|
||||||
|
|
||||||
|
if (avctx->codec_id != AV_CODEC_ID_PCM_LXF) {
|
||||||
|
int bits_per_sample = av_get_exact_bits_per_sample(avctx->codec_id);
|
||||||
if (avctx->sample_fmt == AV_SAMPLE_FMT_S32)
|
if (avctx->sample_fmt == AV_SAMPLE_FMT_S32)
|
||||||
avctx->bits_per_raw_sample = av_get_bits_per_sample(avctx->codec_id);
|
avctx->bits_per_raw_sample = bits_per_sample;
|
||||||
|
s->sample_size = bits_per_sample / 8;
|
||||||
|
} else {
|
||||||
|
s->sample_size = 5;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -328,17 +335,15 @@ static int pcm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
|
|||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
PCMDecode *s = avctx->priv_data;
|
PCMDecode *s = avctx->priv_data;
|
||||||
int channels = avctx->ch_layout.nb_channels;
|
int channels = avctx->ch_layout.nb_channels;
|
||||||
int sample_size, c, n, ret, samples_per_block;
|
int sample_size = s->sample_size;
|
||||||
|
int c, n, ret, samples_per_block;
|
||||||
uint8_t *samples;
|
uint8_t *samples;
|
||||||
int32_t *dst_int32_t;
|
int32_t *dst_int32_t;
|
||||||
|
|
||||||
sample_size = av_get_bits_per_sample(avctx->codec_id) / 8;
|
|
||||||
|
|
||||||
samples_per_block = 1;
|
samples_per_block = 1;
|
||||||
if (avctx->codec_id == AV_CODEC_ID_PCM_LXF) {
|
if (avctx->codec_id == AV_CODEC_ID_PCM_LXF) {
|
||||||
/* we process 40-bit blocks per channel for LXF */
|
/* we process 40-bit blocks per channel for LXF */
|
||||||
samples_per_block = 2;
|
samples_per_block = 2;
|
||||||
sample_size = 5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channels == 0) {
|
if (channels == 0) {
|
||||||
|
Reference in New Issue
Block a user