diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-02-22 19:09:16 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-02-25 22:31:30 +0100 |
commit | 3ca347900e336dd750f00a7f1e988d4fc2c4321e (patch) | |
tree | 432defc0f127381bb01dbe6699484315c4e60199 | |
parent | 70a1024290b7a6a6d544a16dc80daea9bfce0b13 (diff) | |
download | ffmpeg-3ca347900e336dd750f00a7f1e988d4fc2c4321e.tar.gz |
avcodec/h263dec: Avoid copying data when flipping image
Also remove an unchecked av_frame_make_writable().
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | libavcodec/h263dec.c | 14 |
1 files 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; |