質問

私は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」としてデータを出力し、私はQImageのを構築することができるようにPythonの文字列にそれを有効にする必要があるということです。それは痛々しいほど遅いですので、私の倣い機構は、現在、ほぼ300msのイメージあたりを取っています。プロセスのデコードおよび表示部のみ50msのについて取っている。

私は現在やっていると誰もが二度バッファをコピーする必要性を、このプロセスをスピードアップし、回避するために私が取ることができる任意の狡猾なショートカットを考えることができますか?

役に立ちましたか?

解決

これは、1つまたは複数を含む場合ctypes.c_char_Array_829400インスタンスはおそらくNULバイトを含む文字列を返すプロパティ.raw、及び第NULバイトまでの文字列を返すプロパティ.valueを有している。

しかし、あなたはまた、このように、self.rgb_buffer_ptrにアクセスctypesの文字列を使用することができます。 ctypes.string_at(self.rgb_buffer_ptr, self.buffer_size);これはMEMMOVEコールの必要性を避けるだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top