mirror of https://github.com/xemu-project/xemu.git
ui/cocoa: Fix stride resolution of pixman image
A display can receive an image which its stride is greater than its width. In fact, when a guest requests virtio-gpu to scan out a smaller part of an image, virtio-gpu passes it to a display as an image which its width represents the one of the part and its stride equals to the one of the whole image. This change makes ui/cocoa to cover such cases. Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com> Message-Id: <20210222144012.21486-1-akihiko.odaki@gmail.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
8eb13bbbac
commit
d9c32b8f7f
|
@ -450,19 +450,19 @@ QemuCocoaView *cocoaView;
|
||||||
int w = pixman_image_get_width(pixman_image);
|
int w = pixman_image_get_width(pixman_image);
|
||||||
int h = pixman_image_get_height(pixman_image);
|
int h = pixman_image_get_height(pixman_image);
|
||||||
int bitsPerPixel = PIXMAN_FORMAT_BPP(pixman_image_get_format(pixman_image));
|
int bitsPerPixel = PIXMAN_FORMAT_BPP(pixman_image_get_format(pixman_image));
|
||||||
int bitsPerComponent = DIV_ROUND_UP(bitsPerPixel, 8) * 2;
|
int stride = pixman_image_get_stride(pixman_image);
|
||||||
CGDataProviderRef dataProviderRef = CGDataProviderCreateWithData(
|
CGDataProviderRef dataProviderRef = CGDataProviderCreateWithData(
|
||||||
NULL,
|
NULL,
|
||||||
pixman_image_get_data(pixman_image),
|
pixman_image_get_data(pixman_image),
|
||||||
w * 4 * h,
|
stride * h,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
CGImageRef imageRef = CGImageCreate(
|
CGImageRef imageRef = CGImageCreate(
|
||||||
w, //width
|
w, //width
|
||||||
h, //height
|
h, //height
|
||||||
bitsPerComponent, //bitsPerComponent
|
DIV_ROUND_UP(bitsPerPixel, 8) * 2, //bitsPerComponent
|
||||||
bitsPerPixel, //bitsPerPixel
|
bitsPerPixel, //bitsPerPixel
|
||||||
(w * (bitsPerComponent/2)), //bytesPerRow
|
stride, //bytesPerRow
|
||||||
#ifdef __LITTLE_ENDIAN__
|
#ifdef __LITTLE_ENDIAN__
|
||||||
CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB), //colorspace for OS X >= 10.4
|
CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB), //colorspace for OS X >= 10.4
|
||||||
kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst,
|
kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst,
|
||||||
|
|
Loading…
Reference in New Issue