[FFmpeg-devel] [PATCH] avcodec/h263dec: Avoid copying data when flipping image
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Thu Feb 24 11:45:37 EET 2022
Andreas Rheinhardt:
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> ---
> libavcodec/h263dec.c | 14 ++++----------
> 1 file changed, 4 insertions(+), 10 deletions(-)
>
> diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
> index e940b7f7c7..423036e97b 100644
> --- a/libavcodec/h263dec.c
> +++ b/libavcodec/h263dec.c
> @@ -703,17 +703,11 @@ frame_end:
> if (s->last_picture_ptr || s->low_delay) {
> if ( pict->format == AV_PIX_FMT_YUV420P
> && (s->codec_tag == AV_RL32("GEOV") || s->codec_tag == AV_RL32("GEOX"))) {
> - int x, y, p;
> - av_frame_make_writable(pict);
> - for (p=0; p<3; p++) {
> - int w = AV_CEIL_RSHIFT(pict-> width, !!p);
> + for (int p = 0; p < 3; p++) {
> int h = AV_CEIL_RSHIFT(pict->height, !!p);
> - int linesize = pict->linesize[p];
> - for (y=0; y<(h>>1); y++)
> - for (x=0; x<w; x++)
> - FFSWAP(int,
> - pict->data[p][x + y*linesize],
> - pict->data[p][x + (h-1-y)*linesize]);
> +
> + pict->data[p] += (h - 1) * pict->linesize[p];
> + pict->linesize[p] *= -1;
> }
> }
> *got_frame = 1;
Will apply this tomorrow unless there are objections.
- Andreas
More information about the ffmpeg-devel
mailing list