mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
avcodec/mpegvideo: Move setting mb_height to ff_mpv_init_context_frame
It is the proper place to set it, directly besides mb_width and mb_stride. The reason for doing it the way it is done now seems to be that the code does not create more slice contexts than necessary (i.e. not more than one per row), so that this number needs to be known before setting the number of slices. But this can always be arranged by just moving the code that sets the number of slices. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
300e31457a
commit
3443330b17
@ -526,6 +526,11 @@ int ff_mpv_init_context_frame(MpegEncContext *s)
|
||||
{
|
||||
int y_size, c_size, yc_size, i, mb_array_size, mv_table_size, x, y;
|
||||
|
||||
if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO && !s->progressive_sequence)
|
||||
s->mb_height = (s->height + 31) / 32 * 2;
|
||||
else
|
||||
s->mb_height = (s->height + 15) / 16;
|
||||
|
||||
s->mb_width = (s->width + 15) / 16;
|
||||
s->mb_stride = s->mb_width + 1;
|
||||
s->b8_stride = s->mb_width * 2 + 1;
|
||||
@ -747,28 +752,12 @@ av_cold int ff_mpv_common_init(MpegEncContext *s)
|
||||
if (s->encoding && s->avctx->slices)
|
||||
nb_slices = s->avctx->slices;
|
||||
|
||||
if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO && !s->progressive_sequence)
|
||||
s->mb_height = (s->height + 31) / 32 * 2;
|
||||
else
|
||||
s->mb_height = (s->height + 15) / 16;
|
||||
|
||||
if (s->avctx->pix_fmt == AV_PIX_FMT_NONE) {
|
||||
av_log(s->avctx, AV_LOG_ERROR,
|
||||
"decoding to AV_PIX_FMT_NONE is not supported.\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
if (nb_slices > MAX_THREADS || (nb_slices > s->mb_height && s->mb_height)) {
|
||||
int max_slices;
|
||||
if (s->mb_height)
|
||||
max_slices = FFMIN(MAX_THREADS, s->mb_height);
|
||||
else
|
||||
max_slices = MAX_THREADS;
|
||||
av_log(s->avctx, AV_LOG_WARNING, "too many threads/slices (%d),"
|
||||
" reducing to %d\n", nb_slices, max_slices);
|
||||
nb_slices = max_slices;
|
||||
}
|
||||
|
||||
if ((s->width || s->height) &&
|
||||
av_image_check_size(s->width, s->height, 0, s->avctx))
|
||||
return AVERROR(EINVAL);
|
||||
@ -799,6 +788,17 @@ av_cold int ff_mpv_common_init(MpegEncContext *s)
|
||||
if ((ret = ff_mpv_init_context_frame(s)))
|
||||
goto fail;
|
||||
|
||||
if (nb_slices > MAX_THREADS || (nb_slices > s->mb_height && s->mb_height)) {
|
||||
int max_slices;
|
||||
if (s->mb_height)
|
||||
max_slices = FFMIN(MAX_THREADS, s->mb_height);
|
||||
else
|
||||
max_slices = MAX_THREADS;
|
||||
av_log(s->avctx, AV_LOG_WARNING, "too many threads/slices (%d),"
|
||||
" reducing to %d\n", nb_slices, max_slices);
|
||||
nb_slices = max_slices;
|
||||
}
|
||||
|
||||
#if FF_API_FLAG_TRUNCATED
|
||||
s->parse_context.state = -1;
|
||||
#endif
|
||||
|
@ -208,12 +208,6 @@ int ff_mpv_common_frame_size_change(MpegEncContext *s)
|
||||
s->next_picture_ptr =
|
||||
s->current_picture_ptr = NULL;
|
||||
|
||||
// init
|
||||
if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO && !s->progressive_sequence)
|
||||
s->mb_height = (s->height + 31) / 32 * 2;
|
||||
else
|
||||
s->mb_height = (s->height + 15) / 16;
|
||||
|
||||
if ((s->width || s->height) &&
|
||||
(err = av_image_check_size(s->width, s->height, 0, s->avctx)) < 0)
|
||||
goto fail;
|
||||
|
Loading…
x
Reference in New Issue
Block a user