我正在尝试在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。
任何人都可以想到我可以采取的任何狡猾的快捷方式来加快这个过程,并避免像我现在那样复制缓冲区两次吗?
答案 0 :(得分:6)
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调用。