我想写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的。目前我的仿形机构正在采取几乎每300ms的图像,这是痛苦的缓慢。该方法的解码和显示部只占据50ms左右。

任何人都可以想到的任何狡猾的捷径,我可以采取加速这一进程,并避免需要复制缓冲区的两倍,我目前在做什么?

有帮助吗?

解决方案

ctypes.c_char_Array_829400实例具有属性.raw返回可能含有NUL字节的串,并且其返回字符串到第一NUL字节的属性.value如果它包含一个或多个。

不过,您也可以使用ctypes的访问字符串以self.rgb_buffer_ptr,就像这样: ctypes.string_at(self.rgb_buffer_ptr, self.buffer_size);这将避免对的memmove呼叫的需要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top