Commit 11ddc8cb authored by Steve Lhomme's avatar Steve Lhomme Committed by Jean-Baptiste Kempf

direct3d9: optimize the region copy of RGBA buffers

Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent bdc8dd67
...@@ -1650,12 +1650,18 @@ static void Direct3D9ImportSubpicture(vout_display_t *vd, ...@@ -1650,12 +1650,18 @@ static void Direct3D9ImportSubpicture(vout_display_t *vd,
r->fmt.i_x_offset * r->p_picture->p->i_pixel_pitch; r->fmt.i_x_offset * r->p_picture->p->i_pixel_pitch;
uint8_t *src_data = &r->p_picture->p->p_pixels[src_offset]; uint8_t *src_data = &r->p_picture->p->p_pixels[src_offset];
int src_pitch = r->p_picture->p->i_pitch; int src_pitch = r->p_picture->p->i_pitch;
for (unsigned y = 0; y < r->fmt.i_visible_height; y++) {
int copy_pitch = __MIN(dst_pitch, r->p_picture->p->i_visible_pitch);
if (d3dr->format == D3DFMT_A8B8G8R8) { if (d3dr->format == D3DFMT_A8B8G8R8) {
memcpy(&dst_data[y * dst_pitch], &src_data[y * src_pitch], if (dst_pitch == r->p_picture->p->i_visible_pitch) {
copy_pitch); memcpy(dst_data, src_data, r->fmt.i_visible_height * dst_pitch);
} else { } else {
int copy_pitch = __MIN(dst_pitch, r->p_picture->p->i_visible_pitch);
for (unsigned y = 0; y < r->fmt.i_visible_height; y++) {
memcpy(&dst_data[y * dst_pitch], &src_data[y * src_pitch], copy_pitch);
}
}
} else {
int copy_pitch = __MIN(dst_pitch, r->p_picture->p->i_visible_pitch);
for (unsigned y = 0; y < r->fmt.i_visible_height; y++) {
for (int x = 0; x < copy_pitch; x += 4) { for (int x = 0; x < copy_pitch; x += 4) {
dst_data[y * dst_pitch + x + 0] = src_data[y * src_pitch + x + 2]; dst_data[y * dst_pitch + x + 0] = src_data[y * src_pitch + x + 2];
dst_data[y * dst_pitch + x + 1] = src_data[y * src_pitch + x + 1]; dst_data[y * dst_pitch + x + 1] = src_data[y * src_pitch + x + 1];
......
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