From ee87e89b30f22743d0f1e2468d6c07e205ae353a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 16 Apr 2016 05:09:57 +0000 Subject: [PATCH] #391: ensure that picture_encode can deal with pixels wrapped in NSCFData objects git-svn-id: https://xpra.org/svn/Xpra/trunk@12392 3bb7dfac-3a0b-4e04-842a-767bc560f471 --- src/xpra/platform/darwin/shadow_server.py | 14 ++++++++++++++ src/xpra/server/picture_encode.py | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/xpra/platform/darwin/shadow_server.py b/src/xpra/platform/darwin/shadow_server.py index 8b7007825d..d81faeffb9 100644 --- a/src/xpra/platform/darwin/shadow_server.py +++ b/src/xpra/platform/darwin/shadow_server.py @@ -24,6 +24,20 @@ CG.kCGImageAlphaNoneSkipFirst : "SkipFirst", } +#ensure that picture_encode can deal with pixels as NSCFData: +def patch_picture_encode(): + from Foundation import NSCFData #@UnresolvedImport + from CoreFoundation import CFDataGetBytes, CFDataGetLength #@UnresolvedImport + from xpra.os_util import memoryview_to_bytes + def pixels_to_bytes(v): + if isinstance(v, NSCFData): + l = CFDataGetLength(v) + return CFDataGetBytes(v, (0, l), None) + return memoryview_to_bytes(v) + from xpra.server import picture_encode + picture_encode.pixels_to_bytes = pixels_to_bytes +patch_picture_encode() + class OSXRootWindowModel(RootWindowModel): diff --git a/src/xpra/server/picture_encode.py b/src/xpra/server/picture_encode.py index 7a4b14d08c..2bf8f6e89a 100644 --- a/src/xpra/server/picture_encode.py +++ b/src/xpra/server/picture_encode.py @@ -13,7 +13,8 @@ from xpra.net import compression from xpra.codecs.argb.argb import bgra_to_rgb, bgra_to_rgba, argb_to_rgb, argb_to_rgba #@UnresolvedImport from xpra.codecs.loader import get_codec -from xpra.os_util import memoryview_to_bytes, _memoryview +#"pixels_to_bytes" gets patched up by the OSX shadow server +from xpra.os_util import memoryview_to_bytes as pixels_to_bytes, _memoryview try: from xpra.net.mmap_pipe import mmap_write except: @@ -138,7 +139,7 @@ def rgb_encode(coding, image, rgb_formats, supports_transparency, speed, rgb_zli if level==0: #can't pass a raw buffer to bencode / rencode, #and even if we could, the image containing those pixels may be freed by the time we get to the encoder - cwrapper = compression.Compressed(coding, memoryview_to_bytes(pixels), True) + cwrapper = compression.Compressed(coding, pixels_to_bytes(pixels), True) if pixel_format.upper().find("A")>=0 or pixel_format.upper().find("X")>=0: bpp = 32 else: