2010-01-25 10 views
0

Je ne peux pas sembler comprendre pourquoi ce qui suit ne fonctionne pasposix_memalign python au sein

import ctypes 
from ctypes.util import find_library 
libc = ctypes.CDLL(find_library('c')) 

userpointer = ctypes.c_void_p 
sizeimage = 320*240*2 

if libc.posix_memalign(userpointer, libc.getpagesize(), sizeimage) != 0: 
    raise Exception('ENOMEM') 

Je suis en train de capturer en utilisant v4l2. Je ne peux pas allouer de la mémoire. J'ai essayé de passer ctypes.addressof(userpointer) J'ai essayé de lancer userpointer à c_void_p mais toujours rien.

+0

Une raison pour laquelle vous n'utilisez pas quelque chose comme 'pygst'? –

+0

Beaucoup. Un - je ne veux pas dépendre du gstreamer pour un projet particulier. – manson54

Répondre

1

Vous avez deux problèmes dans votre code: vous faites userpointer le ctypes.c_void_p de type plutôt que d'un exemple de celui-ci, et vous passez le vide * qui est userpointer à posix_memalign directement, au lieu du vide ** que posix_memalign nécessite. Ce qui suit fera ce que vous voulez:

import ctypes 
from ctypes.util import find_library 
libc = ctypes.CDLL(find_library('c')) 

userpointer = ctypes.c_void_p() 
sizeimage = 320*240*2 

if libc.posix_memalign(ctypes.byref(userpointer), libc.getpagesize(), 
         sizeimage) != 0: 
    raise Exception('ENOMEM') 
+0

oui. Cela a très bien fonctionné. Merci. – manson54