Index: libvo/vo_directx.c =================================================================== --- libvo/vo_directx.c (revision 27514) +++ libvo/vo_directx.c (working copy) @@ -1276,7 +1276,35 @@ } else //packed { - fast_memcpy( image, mpi->planes[0], image_height * dstride); + const srcStride = mpi->stride[0]; + const dstStride = dstride; + int srcPlane = mpi->planes[0]; + int dstPlane = image; + int minStride; + int srcH; + + if (srcStride == dstStride) + { + // Same buffer size, same line alignment. + fast_memcpy(dstPlane, srcPlane, image_height * srcStride); + } + else + { + // Line by line copy is required. + if (srcStride > dstStride) { + mp_msg(MSGT_VO, MSGL_DBG3,"Using shortest stride from back buffer (%d) instead of source stride.\n", dstStride, srcStride); + minStride = dstStride; + } else { + mp_msg(MSGT_VO, MSGL_DBG3,"Using shortest stride from source (%d) instead of back buffer stride.\n", srcStride, dstStride); + minStride = srcStride; + } + mp_msg(MSGT_VO, MSGL_DBG3 ,"Packed src=%x srcstride=%d dst=%x dststride=%d w=%d h=%d size=%d\n", srcPlane, srcStride, dstPlane, dstStride, image_width, image_height, image_height * minStride); + for (srcH=0; srcH