Question

Je suis en train d'écrire une application vidéo dans PyQt4 et je l'ai utilisé Python ctypes pour accrocher dans une ancienne bibliothèque de décodeur vidéo existant. La bibliothèque me donne des données ARVB 32 bits et je dois transformer en un QImage. Je l'ai travaillé comme suit:


# 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)

Le problème est que ctypes délivre les données en tant que type « ctypes.c_char_Array_829440 » et je dois en faire une chaîne de python afin que je puisse construire un QImage. Mon mécanisme de copie actuellement prend presque 300ms par image il est douloureusement lent. La partie de décodage et l'affichage du processus ne prend environ 50 ms.

Quelqu'un peut-il penser à des raccourcis rusés que je peux prendre pour accélérer ce processus et d'éviter la nécessité de copier le tampon deux fois que je suis en train de faire?

Était-ce utile?

La solution

L'instance de ctypes.c_char_Array_829400 a la propriété de .raw qui retourne une chaîne contenant éventuellement des octets NUL, et le .value de propriété qui renvoie la chaîne jusqu'au premier octet NUL si elle contient une ou plusieurs.

Cependant, vous pouvez également utiliser ctypes l'accès à la chaîne self.rgb_buffer_ptr, comme ceci: ctypes.string_at(self.rgb_buffer_ptr, self.buffer_size); cela éviterait la nécessité de l'appel memmove.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top