Message ID | PR3PR03MB66651E136CF2D4AD8D81AFD78F3B9@PR3PR03MB6665.eurprd03.prod.outlook.com |
---|---|
State | Accepted |
Commit | 3ca347900e336dd750f00a7f1e988d4fc2c4321e |
Headers | show |
Series | [FFmpeg-devel] avcodec/h263dec: Avoid copying data when flipping image | expand |
Context | Check | Description |
---|---|---|
andriy/make_aarch64_jetson | success | Make finished |
andriy/make_fate_aarch64_jetson | success | Make fate finished |
andriy/make_armv7_RPi4 | success | Make finished |
andriy/make_fate_armv7_RPi4 | success | Make fate finished |
Andreas Rheinhardt: > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@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
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;
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/h263dec.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-)