3

PyQt4でビデオアプリケーションを作成しようとしていますが、Pythonctypesを使用して古いレガシービデオデコーダーライブラリにフックしました。ライブラリは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文字列に変換する必要があります。私のコピーメカニズムは現在、画像ごとにほぼ300ミリ秒かかるため、非常に遅くなります。プロセスのデコードと表示の部分は、約50ミリ秒しかかかりません。

このプロセスをスピードアップし、現在行っているようにバッファを2回コピーする必要をなくすために、私が取ることができる狡猾なショートカットを誰かが思いつくことができますか?

4

1 に答える 1

6

ctypes.c_char_Array_829400インスタンスには、.rawNUL バイトを含む可能性のある文字列を返すプロパティと.value、文字列に 1 つ以上含まれる場合は最初の NUL バイトまでを返すプロパティがあります。

ただし、次のように ctypes を使用して の文字列にアクセスすることもできself.rgb_buffer_ptrます ctypes.string_at(self.rgb_buffer_ptr, self.buffer_size)。これにより、memmove 呼び出しの必要がなくなります。

于 2009-04-03T16:38:18.413 に答える