aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorAkihiko Odaki <akihiko.odaki@gmail.com>2021-02-22 23:40:12 +0900
committerGerd Hoffmann <kraxel@redhat.com>2021-03-04 09:35:03 +0100
commitd9c32b8f7f5f05511d77a1ec1d1d35bf7bff2961 (patch)
treeaf057dd59799f4af9271adf7a8afb3413ec6bd46 /ui
parent8eb13bbbac08aa077efcf9877c9646c4497d766c (diff)
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>
Diffstat (limited to 'ui')
-rw-r--r--ui/cocoa.m8
1 files changed, 4 insertions, 4 deletions
diff --git a/ui/cocoa.m b/ui/cocoa.m
index 5ad44b84aa..6a59f87316 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -450,19 +450,19 @@ QemuCocoaView *cocoaView;
int w = pixman_image_get_width(pixman_image);
int h = pixman_image_get_height(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(
NULL,
pixman_image_get_data(pixman_image),
- w * 4 * h,
+ stride * h,
NULL
);
CGImageRef imageRef = CGImageCreate(
w, //width
h, //height
- bitsPerComponent, //bitsPerComponent
+ DIV_ROUND_UP(bitsPerPixel, 8) * 2, //bitsPerComponent
bitsPerPixel, //bitsPerPixel
- (w * (bitsPerComponent/2)), //bytesPerRow
+ stride, //bytesPerRow
#ifdef __LITTLE_ENDIAN__
CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB), //colorspace for OS X >= 10.4
kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst,