Xpra: Ticket #934: Pillow errors with Ubuntu Vivid

Found on an up to date vivid 64-bit system:

2015-07-30 13:37:42,939 PIL_encode((314, 283, 'webp', '355448 bytes', 'RGBA', 1256)) converting to RGBA failed
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/xpra/codecs/pillow/encode.py", line 69, in encode
    im = PIL.Image.frombuffer(rgb, (w, h), pixels, "raw", pixel_format, image.get_rowstride())
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 2119, in frombuffer
    core.map_buffer(data, size, decoder_name, None, 0, args)
TypeError: must be sequence of length 3, not 2

and

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/xpra/server/source.py", line 1837, in encode_loop
    fn_and_args[0](*fn_and_args[1:])
  File "/usr/lib/python2.7/dist-packages/xpra/server/window_source.py", line 1320, in make_data_packet_cb
    packet = self.make_data_packet(damage_time, process_damage_time, wid, image, coding, sequence, options, flush)
  File "/usr/lib/python2.7/dist-packages/xpra/server/window_source.py", line 1669, in make_data_packet
    ret = encoder(coding, image, options)
  File "/usr/lib/python2.7/dist-packages/xpra/server/window_source.py", line 1752, in webp_encode
    return webp_encode(coding, image, self.rgb_formats, self.supports_transparency, q, s, options)
  File "/usr/lib/python2.7/dist-packages/xpra/server/picture_encode.py", line 72, in webp_encode
    return enc_pillow.encode(x, image, quality, speed, supports_transparency)
  File "/usr/lib/python2.7/dist-packages/xpra/codecs/pillow/encode.py", line 69, in encode
    im = PIL.Image.frombuffer(rgb, (w, h), pixels, "raw", pixel_format, image.get_rowstride())
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 2119, in frombuffer
    core.map_buffer(data, size, decoder_name, None, 0, args)
TypeError: must be sequence of length 3, not 2

and

2015-07-30 18:48:53,010 draw error
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/xpra/client/ui_client_base.py", line 2054, in _do_draw
    window.draw_region(x, y, width, height, coding, data, rowstride, packet_sequence, options, [record_decode_time])
  File "/usr/lib/python2.7/dist-packages/xpra/client/client_window_base.py", line 462, in draw_region
    self._backing.draw_region(x, y, width, height, coding, img_data, rowstride, options, callbacks)
  File "/usr/lib/python2.7/dist-packages/xpra/client/window_backing_base.py", line 488, in draw_region
    self.paint_webp(img_data, x, y, width, height, options, callbacks)
  File "/usr/lib/python2.7/dist-packages/xpra/client/window_backing_base.py", line 245, in paint_webp
    buffer_wrapper, width, height, stride, has_alpha, rgb_format = dec_webp.decompress(img_data, has_alpha, options.get("rgb_format"))
AttributeError: 'NoneType' object has no attribute 'decompress'

and

2015-07-30 18:48:54,669 gtk2.GLWindowBacking(1, (499, 316), YUV444P).gl_paint_planar(..) error: ("No array-type handler for type <type 'memoryview'> (value: <memory at 0x7f6a000d20e8>) registered", <OpenGL.GL.images.ImageInputConverter object at 0x7f6a028480d0>)
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/xpra/client/gl/gl_window_backing_base.py", line 695, in gl_paint_planar
    self.update_planar_textures(x, y, enc_width, enc_height, img, pixel_format, scaling=(enc_width!=width or enc_height!=height))
  File "/usr/lib/python2.7/dist-packages/xpra/client/gl/gl_window_backing_base.py", line 749, in update_planar_textures
    glTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width//div_w, height//div_h, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixel_data)
  File "/usr/lib/python2.7/dist-packages/OpenGL/latebind.py", line 45, in __call__
    return self._finalCall( *args, **named )
  File "/usr/lib/python2.7/dist-packages/OpenGL/wrapper.py", line 782, in wrapperCall
    pyArgs = tuple( calculate_pyArgs( args ))
  File "/usr/lib/python2.7/dist-packages/OpenGL/wrapper.py", line 355, in calculate_pyArgs
    yield converter(args[index], self, args)
  File "/usr/lib/python2.7/dist-packages/OpenGL/GL/images.py", line 400, in __call__
    return arrayType.asArray( arg )
  File "/usr/lib/python2.7/dist-packages/OpenGL/arrays/arraydatatype.py", line 141, in asArray
    return cls.getHandler(value).asArray( value, typeCode or cls.typeConstant )
  File "/usr/lib/python2.7/dist-packages/OpenGL/arrays/arraydatatype.py", line 52, in __call__
    typ, repr(value)[:50]


Thu, 30 Jul 2015 11:50:19 GMT - Antoine Martin: status, description changed


Thu, 30 Jul 2015 11:56:07 GMT - Antoine Martin: description changed


Thu, 30 Jul 2015 15:24:35 GMT - Antoine Martin:


Fri, 31 Jul 2015 09:09:06 GMT - Antoine Martin: status changed; resolution set

r10172 fixes the memoryview error, which only happens on clients without opengl accelerate. (may backport)

As for TypeError: must be sequence of length 3, not 2, I am now unable to reproduce it. r10177 improved the error logging, so if it does occur again, we'll have more details on what is wrong.

Closing for now.


Sat, 23 Jan 2021 05:10:12 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/934