[FFmpeg-cvslog] r19774 - trunk/libavcodec/xan.c

reimar subversion
Sat Sep 5 21:35:59 CEST 2009


Author: reimar
Date: Sat Sep  5 21:35:59 2009
New Revision: 19774

Log:
Use memcpy to copy till end of line in one go instead of copying pixel by pixel
in xan_wc3_output_pixel_run and xan_wc3_copy_pixel_run

Modified:
   trunk/libavcodec/xan.c

Modified: trunk/libavcodec/xan.c
==============================================================================
--- trunk/libavcodec/xan.c	Sat Sep  5 21:31:01 2009	(r19773)
+++ trunk/libavcodec/xan.c	Sat Sep  5 21:35:59 2009	(r19774)
@@ -181,13 +181,14 @@ static inline void xan_wc3_output_pixel_
     line_inc = stride - width;
     index = y * stride + x;
     current_x = x;
-    while((pixel_count--) && (index < s->frame_size)) {
-
-        /* don't do a memcpy() here; keyframes generally copy an entire
-         * frame of data and the stride needs to be accounted for */
-        palette_plane[index++] = *pixel_buffer++;
+    while(pixel_count && (index < s->frame_size)) {
+        int count = FFMIN(pixel_count, width - current_x);
+        memcpy(palette_plane + index, pixel_buffer, count);
+        pixel_count  -= count;
+        index        += count;
+        pixel_buffer += count;
+        current_x    += count;
 
-        current_x++;
         if (current_x >= width) {
             index += line_inc;
             current_x = 0;
@@ -213,18 +214,21 @@ static inline void xan_wc3_copy_pixel_ru
     curframe_x = x;
     prevframe_index = (y + motion_y) * stride + x + motion_x;
     prevframe_x = x + motion_x;
-    while((pixel_count--) && (curframe_index < s->frame_size)) {
+    while(pixel_count && (curframe_index < s->frame_size)) {
+        int count = FFMIN3(pixel_count, width - curframe_x, width - prevframe_x);
 
-        palette_plane[curframe_index++] =
-            prev_palette_plane[prevframe_index++];
+        memcpy(palette_plane + curframe_index, prev_palette_plane + prevframe_index, count);
+        pixel_count     -= count;
+        curframe_index  += count;
+        prevframe_index += count;
+        curframe_x      += count;
+        prevframe_x     += count;
 
-        curframe_x++;
         if (curframe_x >= width) {
             curframe_index += line_inc;
             curframe_x = 0;
         }
 
-        prevframe_x++;
         if (prevframe_x >= width) {
             prevframe_index += line_inc;
             prevframe_x = 0;



More information about the ffmpeg-cvslog mailing list