ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinha...@outlook.com> | Thu Apr 17 06:34:22 2025 +0200| [05bda9d3dfdda826de02f5bc43da45120f551f71] | committer: Andreas Rheinhardt
avcodec/magicyuvenc: Store slice width and height Avoids rederiving it every time. Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=05bda9d3dfdda826de02f5bc43da45120f551f71 --- libavcodec/magicyuvenc.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/libavcodec/magicyuvenc.c b/libavcodec/magicyuvenc.c index 52057c6838..1c77048021 100644 --- a/libavcodec/magicyuvenc.c +++ b/libavcodec/magicyuvenc.c @@ -54,6 +54,8 @@ typedef struct PTable { } PTable; typedef struct Slice { + int width; + int height; unsigned pos; unsigned size; uint8_t *slice; @@ -226,6 +228,10 @@ static av_cold int magy_encode_init(AVCodecContext *avctx) for (int i = 0; i < s->planes; i++) { Slice *sl = &s->slices[n * s->planes + i]; + sl->height = n == s->nb_slices - 1 ? avctx->height - n * s->slice_height : s->slice_height; + sl->height = AV_CEIL_RSHIFT(sl->height, s->vshift[i]); + sl->width = AV_CEIL_RSHIFT(avctx->width, s->hshift[i]); + sl->bitslice = av_malloc(s->bitslice_size + AV_INPUT_BUFFER_PADDING_SIZE); sl->slice = av_malloc(avctx->width * (s->slice_height + 2) + AV_INPUT_BUFFER_PADDING_SIZE); @@ -379,14 +385,10 @@ static int count_plane_slice(AVCodecContext *avctx, int n, int plane) Slice *sl = &s->slices[n * s->planes + plane]; const uint8_t *dst = sl->slice; int64_t *counts = sl->counts; - const int slice_height = s->slice_height; - const int last_height = FFMIN(slice_height, avctx->height - n * slice_height); - const int height = (n < (s->nb_slices - 1)) ? slice_height : last_height; memset(counts, 0, sizeof(sl->counts)); - count_usage(dst, AV_CEIL_RSHIFT(avctx->width, s->hshift[plane]), - AV_CEIL_RSHIFT(height, s->vshift[plane]), counts); + count_usage(dst, sl->width, sl->height, counts); return 0; } @@ -478,9 +480,6 @@ static int encode_slice(AVCodecContext *avctx, void *tdata, int n, int threadnr) { MagicYUVContext *s = avctx->priv_data; - const int slice_height = s->slice_height; - const int last_height = FFMIN(slice_height, avctx->height - n * slice_height); - const int height = (n < (s->nb_slices - 1)) ? slice_height : last_height; for (int i = 0; i < s->planes; i++) { Slice *sl = &s->slices[n * s->planes + i]; @@ -489,8 +488,7 @@ static int encode_slice(AVCodecContext *avctx, void *tdata, encode_plane_slice(sl->slice, sl->bitslice, s->bitslice_size, - AV_CEIL_RSHIFT(avctx->width, s->hshift[i]), - AV_CEIL_RSHIFT(height, s->vshift[i]), + sl->width, sl->height, s->he[i], s->frame_pred); } @@ -546,8 +544,7 @@ static int predict_slice(AVCodecContext *avctx, void *tdata, s->predict(s, frame->data[i] + n * (slice_height >> s->vshift[i]) * frame->linesize[i], sl->slice, frame->linesize[i], - AV_CEIL_RSHIFT(frame->width, s->hshift[i]), - AV_CEIL_RSHIFT(height, s->vshift[i])); + sl->width, sl->height); } } _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".