[英]Turning ctypes data into python string as quickly as possible
我正在尝试在PyQt4中编写一个视频应用程序,我使用Python ctypes挂钩到一个旧的传统视频解码器库。 该库为我提供了32位ARGB数据,我需要将其转换为QImage。 我的工作方式如下:
# Copy the rgb image data from the pointer into the buffer
memmove(self.rgb_buffer, self.rgb_buffer_ptr, self.buffer_size)
# Copy the buffer to a python string
imgdata = ""
for a in self.rgb_buffer:
imgdata = imgdata + a
# Create a QImage from the string data
img = QImage(imgdata, 720, 288, QImage.Format_ARGB32)
问题是ctypes将数据输出为类型“ ctypes.c_char_Array_829440
”,我需要将其转换为python字符串,以便我可以构造一个QImage。 我的复制机制目前每张图像花费近300毫秒,所以它很慢。 该过程的解码和显示部分仅需要大约50ms。
任何人都可以想到我可以采取的任何狡猾的快捷方式来加快这个过程,并避免需要复制缓冲区两次,因为我目前正在做?
ctypes.c_char_Array_829400
实例具有属性.raw
,它返回一个可能包含NUL字节的字符串,以及属性.value
,如果它包含一个或多个,则返回第一个NUL字节的字符串。
但是,您也可以使用ctypes访问self.rgb_buffer_ptr
的字符串,如下所示: ctypes.string_at(self.rgb_buffer_ptr, self.buffer_size)
; 这将避免需要memmove调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.