Commit 5333450c authored by Reimar Döffinger's avatar Reimar Döffinger

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

Originally committed as revision 19774 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 7a656933
...@@ -181,13 +181,14 @@ static inline void xan_wc3_output_pixel_run(XanContext *s, ...@@ -181,13 +181,14 @@ static inline void xan_wc3_output_pixel_run(XanContext *s,
line_inc = stride - width; line_inc = stride - width;
index = y * stride + x; index = y * stride + x;
current_x = x; current_x = x;
while((pixel_count--) && (index < s->frame_size)) { 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;
/* 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++;
current_x++;
if (current_x >= width) { if (current_x >= width) {
index += line_inc; index += line_inc;
current_x = 0; current_x = 0;
...@@ -213,18 +214,21 @@ static inline void xan_wc3_copy_pixel_run(XanContext *s, ...@@ -213,18 +214,21 @@ static inline void xan_wc3_copy_pixel_run(XanContext *s,
curframe_x = x; curframe_x = x;
prevframe_index = (y + motion_y) * stride + x + motion_x; prevframe_index = (y + motion_y) * stride + x + motion_x;
prevframe_x = 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++] = memcpy(palette_plane + curframe_index, prev_palette_plane + prevframe_index, count);
prev_palette_plane[prevframe_index++]; pixel_count -= count;
curframe_index += count;
prevframe_index += count;
curframe_x += count;
prevframe_x += count;
curframe_x++;
if (curframe_x >= width) { if (curframe_x >= width) {
curframe_index += line_inc; curframe_index += line_inc;
curframe_x = 0; curframe_x = 0;
} }
prevframe_x++;
if (prevframe_x >= width) { if (prevframe_x >= width) {
prevframe_index += line_inc; prevframe_index += line_inc;
prevframe_x = 0; prevframe_x = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment