[FFmpeg-devel] [PATCH v2 63/69] avcodec/mpegvideo: Move context_initialized flag to MPVMainContext
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Tue Feb 1 15:07:00 EET 2022
This is not a per-slice property.
Also move context_reinit.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
libavcodec/h261dec.c | 2 +-
libavcodec/h263dec.c | 8 ++++----
libavcodec/mpeg12dec.c | 2 +-
libavcodec/mpeg4videodec.c | 8 ++++----
libavcodec/mpegvideo.c | 6 +++---
libavcodec/mpegvideo.h | 10 +++++-----
libavcodec/mpegvideo_dec.c | 12 ++++++------
libavcodec/rv10.c | 2 +-
libavcodec/rv34.c | 14 +++++++-------
libavcodec/vc1dec.c | 4 ++--
10 files changed, 34 insertions(+), 34 deletions(-)
diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c
index 8113d2ff7d..8774f4e7ad 100644
--- a/libavcodec/h261dec.c
+++ b/libavcodec/h261dec.c
@@ -625,7 +625,7 @@ retry:
ff_mpv_common_end(m);
}
- if (!s->context_initialized) {
+ if (!m->context_initialized) {
if ((ret = ff_mpv_common_init(m)) < 0)
return ret;
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 20a1348d88..b502878a4a 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -498,7 +498,7 @@ retry:
if (ret < 0)
return ret;
- if (!s->context_initialized)
+ if (!m->context_initialized)
// we need the idct permutation for reading a custom matrix
ff_mpv_idct_init(s);
@@ -540,7 +540,7 @@ retry:
return ret;
}
- if (!s->context_initialized) {
+ if (!m->context_initialized) {
avctx->pix_fmt = h263_get_format(avctx);
if ((ret = ff_mpv_common_init(m)) < 0)
return ret;
@@ -568,9 +568,9 @@ retry:
* an H263EncContext */
if (s->width != avctx->coded_width ||
s->height != avctx->coded_height ||
- s->context_reinit) {
+ m->context_reinit) {
/* H.263 could change picture size any time */
- s->context_reinit = 0;
+ m->context_reinit = 0;
ret = ff_set_dimensions(avctx, s->width, s->height);
if (ret < 0)
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 69d0bb809b..3b21b88337 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -1087,7 +1087,7 @@ static int mpeg_decode_update_thread_context(AVCodecContext *avctx,
if (avctx == avctx_from ||
!ctx_from->mpeg_ctx_allocated ||
- !s1->s.context_initialized)
+ !s1->context_initialized)
return 0;
err = ff_mpeg_update_thread_context(avctx, avctx_from);
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index 6e3981b523..ca6988fc48 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -2324,7 +2324,7 @@ static int decode_studio_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
return AVERROR_PATCHWELCOME;
}
if (rgb != ctx->rgb || s->chroma_format != chroma_format)
- s->context_reinit = 1;
+ m->context_reinit = 1;
s->avctx->bits_per_raw_sample = bits_per_raw_sample;
ctx->rgb = rgb;
s->chroma_format = chroma_format;
@@ -2340,7 +2340,7 @@ static int decode_studio_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
if (width && height) {
if (s->width && s->height &&
(s->width != width || s->height != height))
- s->context_reinit = 1;
+ m->context_reinit = 1;
s->width = width;
s->height = height;
}
@@ -2489,7 +2489,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
!(s->width && s->codec_tag == AV_RL32("MP4S"))) {
if (s->width && s->height &&
(s->width != width || s->height != height))
- s->context_reinit = 1;
+ m->context_reinit = 1;
s->width = width;
s->height = height;
}
@@ -3527,7 +3527,7 @@ static int mpeg4_update_thread_context(AVCodecContext *dst,
{
Mpeg4DecContext *s = dst->priv_data;
const Mpeg4DecContext *s1 = src->priv_data;
- int init = s->m.s.context_initialized;
+ int init = s->m.context_initialized;
int ret = ff_mpeg_update_thread_context(dst, src);
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 0e98680056..be18b428f5 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -737,7 +737,7 @@ av_cold int ff_mpv_common_init(MPVMainContext *m)
s->parse_context.state = -1;
#endif
- s->context_initialized = 1;
+ m->context_initialized = 1;
m->thread_context[0] = s;
m->slice_context_count = nb_slices;
@@ -814,8 +814,8 @@ void ff_mpv_common_end(MPVMainContext *m)
ff_mpv_picture_free(s->avctx, &s->next_picture);
ff_mpv_picture_free(s->avctx, &s->new_picture);
- s->context_initialized = 0;
- s->context_reinit = 0;
+ m->context_initialized = 0;
+ m->context_reinit = 0;
s->last_picture_ptr =
s->next_picture_ptr =
s->current_picture_ptr = NULL;
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 8632fadae5..df5a51577a 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -103,7 +103,6 @@ typedef struct MPVContext {
/* the following fields are managed internally by the encoder */
/* sequence parameters */
- int context_initialized;
int coded_picture_number; ///< used to set pic->coded_picture_number, should not be used for/by anything else
int picture_number; //FIXME remove, unclear definition
int mb_width, mb_height; ///< number of MBs horizontally & vertically
@@ -460,10 +459,6 @@ typedef struct MPVContext {
int vbv_ignore_qmax;
- /* flag to indicate a reinitialization is required, e.g. after
- * a frame size change */
- int context_reinit;
-
ERContext er;
int error_rate;
@@ -505,6 +500,11 @@ typedef struct MPVContext {
typedef struct MPVMainContext {
MPVContext s;
+ int context_initialized;
+ /* flag to indicate a reinitialization is required, e.g. after
+ * a frame size change */
+ int context_reinit;
+
int slice_context_count; ///< number of used thread_contexts
/* The first entry of this array points to the above MPVContext. */
MPVContext *thread_context[MAX_THREADS];
diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c
index 57c93de621..a4f751af71 100644
--- a/libavcodec/mpegvideo_dec.c
+++ b/libavcodec/mpegvideo_dec.c
@@ -66,7 +66,7 @@ int ff_mpeg_update_thread_context(AVCodecContext *dst,
// FIXME can parameters change on I-frames?
// in that case dst may need a reinit
- if (!s->context_initialized) {
+ if (!m->context_initialized) {
void *private_ctx = s->private_ctx;
int err;
memcpy(s, s1, sizeof(*s));
@@ -77,7 +77,7 @@ int ff_mpeg_update_thread_context(AVCodecContext *dst,
s->bitstream_buffer = NULL;
s->bitstream_buffer_size = s->allocated_bitstream_buffer_size = 0;
- if (s1->context_initialized) {
+ if (m1->context_initialized) {
// s->picture_range_start += MAX_PICTURE_COUNT;
// s->picture_range_end += MAX_PICTURE_COUNT;
ff_mpv_idct_init(s);
@@ -91,7 +91,7 @@ int ff_mpeg_update_thread_context(AVCodecContext *dst,
}
}
- if (s->height != s1->height || s->width != s1->width || s->context_reinit) {
+ if (s->height != s1->height || s->width != s1->width || m->context_reinit) {
s->height = s1->height;
s->width = s1->width;
if ((ret = ff_mpv_common_frame_size_change(m)) < 0)
@@ -202,7 +202,7 @@ int ff_mpv_common_frame_size_change(MPVMainDecContext *m)
MPVDecContext *const s = &m->s;
int err = 0;
- if (!s->context_initialized)
+ if (!m2->context_initialized)
return AVERROR(EINVAL);
ff_mpv_free_context_frame(m2);
@@ -243,12 +243,12 @@ int ff_mpv_common_frame_size_change(MPVMainDecContext *m)
if (err < 0)
goto fail;
}
- s->context_reinit = 0;
+ m2->context_reinit = 0;
return 0;
fail:
ff_mpv_free_context_frame(m2);
- s->context_reinit = 1;
+ m2->context_reinit = 1;
return err;
}
diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c
index 1a59b2a578..27e17c8677 100644
--- a/libavcodec/rv10.c
+++ b/libavcodec/rv10.c
@@ -228,7 +228,7 @@ static int rv20_decode_picture_header(RVDecContext *rv, int whole_size)
new_w = rv->orig_width;
new_h = rv->orig_height;
}
- if (new_w != s->width || new_h != s->height || !s->context_initialized) {
+ if (new_w != s->width || new_h != s->height || !m->context_initialized) {
AVRational old_aspect = s->avctx->sample_aspect_ratio;
av_log(s->avctx, AV_LOG_DEBUG,
"attempting to change resolution to %dx%d\n", new_w, new_h);
diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
index a3437099b2..4ed23b65dd 100644
--- a/libavcodec/rv34.c
+++ b/libavcodec/rv34.c
@@ -1384,7 +1384,7 @@ static int rv34_decoder_alloc(RV34DecContext *r)
if (!(r->cbp_chroma && r->cbp_luma && r->deblock_coefs &&
r->intra_types_hist && r->mb_type)) {
- r->s.s.context_reinit = 1;
+ r->s.context_reinit = 1;
rv34_decoder_free(r);
return AVERROR(ENOMEM);
}
@@ -1524,10 +1524,10 @@ int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte
const MPVDecContext *const s1 = &m1->s;
int err;
- if (dst == src || !s1->context_initialized)
+ if (dst == src || !m1->context_initialized)
return 0;
- if (s->height != s1->height || s->width != s1->width || s->context_reinit) {
+ if (s->height != s1->height || s->width != s1->width || m->context_reinit) {
s->height = s1->height;
s->width = s1->width;
if ((err = ff_mpv_common_frame_size_change(m)) < 0)
@@ -1544,7 +1544,7 @@ int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte
// Do no call ff_mpeg_update_thread_context on a partially initialized
// decoder context.
- if (!s1->context_initialized)
+ if (!m1->context_initialized)
return 0;
return ff_mpeg_update_thread_context(dst, src);
@@ -1666,12 +1666,12 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
if (s->mb_num_left > 0 && s->current_picture_ptr) {
av_log(avctx, AV_LOG_ERROR, "New frame but still %d MB left.\n",
s->mb_num_left);
- if (!s->context_reinit)
+ if (!m->context_reinit)
ff_er_frame_end(&s->er);
ff_mpv_frame_end(m);
}
- if (s->width != si.width || s->height != si.height || s->context_reinit) {
+ if (s->width != si.width || s->height != si.height || m->context_reinit) {
int err;
av_log(s->avctx, AV_LOG_WARNING, "Changing dimensions to %dx%d\n",
@@ -1743,7 +1743,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
}
s->mb_x = s->mb_y = 0;
ff_thread_finish_setup(s->avctx);
- } else if (s->context_reinit) {
+ } else if (m->context_reinit) {
av_log(s->avctx, AV_LOG_ERROR, "Decoder needs full frames to "
"reinitialize (start MB is %d).\n", si.start);
return AVERROR_INVALIDDATA;
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index 502ea2bae4..995761700b 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -797,13 +797,13 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data,
}
}
- if (s->context_initialized &&
+ if (m->context_initialized &&
(s->width != avctx->coded_width ||
s->height != avctx->coded_height)) {
ff_vc1_decode_end(avctx);
}
- if (!s->context_initialized) {
+ if (!m->context_initialized) {
if ((ret = ff_msmpeg4_decode_init(avctx)) < 0)
goto err;
if ((ret = ff_vc1_decode_init_alloc_tables(v)) < 0) {
--
2.32.0
More information about the ffmpeg-devel
mailing list