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
This commit is contained in:
parent
7a656933c9
commit
5333450ce6
@ -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,
|
|||||||
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user