mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avcodec/mpeg12dec: Don't initialize IDCT more than once
Before 998c9f15d1
, the IDCTDSPContext
has only been initialized in ff_mpv_common_init() which is deferred
until immediately before decoding a picture; to nevertheless parse
the quant matrices in sequence headers or quant matrix extensions,
a dummy (identity) permutation has been stored in the codec's init
function; after ff_mpv_common_init() which could change the permutation
the matrices were repermutated.
Yet since said commit, the IDCTDSPContext is initialized during init
and does not change afterwards (unless the user forces different CPU
flags), so there is no need to reinitialize it; the repermutation code
can be removed as well.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
89c10d8d20
commit
bc7de8b63c
@ -1057,8 +1057,6 @@ static av_cold int mpeg_decode_init(AVCodecContext *avctx)
|
||||
avctx->coded_width = avctx->coded_height = 0; // do not trust dimensions from input
|
||||
ff_mpv_decode_init(s2, avctx);
|
||||
|
||||
/* we need some permutation to store matrices,
|
||||
* until the decoder sets the real permutation. */
|
||||
ff_mpv_idct_init(s2);
|
||||
ff_mpeg12_init_vlcs();
|
||||
|
||||
@ -1093,18 +1091,6 @@ static int mpeg_decode_update_thread_context(AVCodecContext *avctx,
|
||||
}
|
||||
#endif
|
||||
|
||||
static void quant_matrix_rebuild(uint16_t *matrix, const uint8_t *old_perm,
|
||||
const uint8_t *new_perm)
|
||||
{
|
||||
uint16_t temp_matrix[64];
|
||||
int i;
|
||||
|
||||
memcpy(temp_matrix, matrix, 64 * sizeof(uint16_t));
|
||||
|
||||
for (i = 0; i < 64; i++)
|
||||
matrix[new_perm[i]] = temp_matrix[old_perm[i]];
|
||||
}
|
||||
|
||||
static const enum AVPixelFormat mpeg1_hwaccel_pixfmt_list_420[] = {
|
||||
#if CONFIG_MPEG1_NVDEC_HWACCEL
|
||||
AV_PIX_FMT_CUDA,
|
||||
@ -1177,7 +1163,6 @@ static int mpeg_decode_postinit(AVCodecContext *avctx)
|
||||
{
|
||||
Mpeg1Context *s1 = avctx->priv_data;
|
||||
MpegEncContext *s = &s1->mpeg_enc_ctx;
|
||||
uint8_t old_permutation[64];
|
||||
int ret;
|
||||
|
||||
if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
|
||||
@ -1297,19 +1282,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
|
||||
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
|
||||
|
||||
/* Quantization matrices may need reordering
|
||||
* if DCT permutation is changed. */
|
||||
memcpy(old_permutation, s->idsp.idct_permutation, 64 * sizeof(uint8_t));
|
||||
|
||||
ff_mpv_idct_init(s);
|
||||
if ((ret = ff_mpv_common_init(s)) < 0)
|
||||
return ret;
|
||||
|
||||
quant_matrix_rebuild(s->intra_matrix, old_permutation, s->idsp.idct_permutation);
|
||||
quant_matrix_rebuild(s->inter_matrix, old_permutation, s->idsp.idct_permutation);
|
||||
quant_matrix_rebuild(s->chroma_intra_matrix, old_permutation, s->idsp.idct_permutation);
|
||||
quant_matrix_rebuild(s->chroma_inter_matrix, old_permutation, s->idsp.idct_permutation);
|
||||
|
||||
s1->mpeg_enc_ctx_allocated = 1;
|
||||
}
|
||||
return 0;
|
||||
@ -2169,7 +2144,6 @@ static int vcr2_init_sequence(AVCodecContext *avctx)
|
||||
|
||||
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
|
||||
|
||||
ff_mpv_idct_init(s);
|
||||
if ((ret = ff_mpv_common_init(s)) < 0)
|
||||
return ret;
|
||||
s1->mpeg_enc_ctx_allocated = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user