On Thu, Dec 04, 2014 at 03:28:32PM +0100, Benoit Fouet wrote:
> Hi,
> 
> Le 03/12/2014 14:31, Benoit Fouet a écrit :
> >Rely on the way memcpy is optimized for one's system instead of looping
> >on a byte buffer for buffer copies to handle P frames.
> >---
> >  libavcodec/pngdec.c | 25 +++++++++++++------------
> >  1 file changed, 13 insertions(+), 12 deletions(-)
> >
> >diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
> >index 7e7b285..e6b7593 100644
> >--- a/libavcodec/pngdec.c
> >+++ b/libavcodec/pngdec.c
> >@@ -884,8 +884,7 @@ static int handle_p_frame_apng(AVCodecContext *avctx, 
> >PNGDecContext *s,
> >          ff_thread_await_progress(&s->previous_picture, INT_MAX, 0);
> >      for (j = 0; j < s->y_offset; j++) {
> >-        for (i = 0; i < ls; i++)
> >-            pd[i] = pd_last[i];
> >+        memcpy(pd, pd_last, ls);
> >          pd      += s->image_linesize;
> >          pd_last += s->image_linesize;
> >      }
> >@@ -907,8 +906,9 @@ static int handle_p_frame_apng(AVCodecContext *avctx, 
> >PNGDecContext *s,
> >          }
> >          for (j = s->y_offset; j < s->y_offset + s->cur_h; j++) {
> >-            for (i = 0; i < s->x_offset * s->bpp; i++)
> >-                pd[i] = pd_last[i];
> >+            i = s->x_offset * s->bpp;
> >+            if (i)
> >+                memcpy(pd, pd_last, i);
> >              for (; i < (s->x_offset + s->cur_w) * s->bpp; i += s->bpp) {
> >                  uint8_t alpha = pd[i+ai];
> >@@ -930,26 +930,27 @@ static int handle_p_frame_apng(AVCodecContext *avctx, 
> >PNGDecContext *s,
> >                      break;
> >                  }
> >              }
> >-            for (; i < ls; i++)
> >-                pd[i] = pd_last[i];
> >+            if (ls - i)
> >+                memcpy(pd+i, pd_last+i, ls - i);
> >              pd      += s->image_linesize;
> >              pd_last += s->image_linesize;
> >              pd_last_region += s->image_linesize;
> >          }
> >      } else {
> >          for (j = s->y_offset; j < s->y_offset + s->cur_h; j++) {
> >-            for (i = 0; i < s->x_offset * s->bpp; i++)
> >-                pd[i] = pd_last[i];
> >-            for (i = (s->x_offset + s->cur_w) * s->bpp; i < ls; i++)
> >-                pd[i] = pd_last[i];
> >+            int end_offset = (s->x_offset + s->cur_w) * s->bpp;
> >+            int end_len    = ls - end_offset;
> >+            if (s->x_offset)
> >+                memcpy(pd, pd_last, s->x_offset * s->bpp);
> >+            if (end_len)
> >+                memcpy(pd+end_offset, pd_last+end_offset, end_len);
> >              pd      += s->image_linesize;
> >              pd_last += s->image_linesize;
> >          }
> >      }
> >      for (j = s->y_offset + s->cur_h; j < s->height; j++) {
> >-        for (i = 0; i < ls; i++)
> >-            pd[i] = pd_last[i];
> >+        memcpy(pd, pd_last, ls);
> >          pd      += s->image_linesize;
> >          pd_last += s->image_linesize;
> >      }
> 
> Unless there is some more remarks on this one, I think it can be
> applied too.

applied

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Many things microsoft did are stupid, but not doing something just because
microsoft did it is even more stupid. If everything ms did were stupid they
would be bankrupt already.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to