!!!!!!!!!!!结帖,散分!!!!!!!!问题解决了!!!!!!!!!!!!!!!!!!!
********************先感谢FLandY1982和Terryzou对本帖的参与***************************
********************同时分享经验****************************************************
问题出在了:
PIN_IOControl(
DWORD dwContext,
DWORD Ioctl,
PUCHAR pInBuf ,
DWORD InBufLen,
PUCHAR pOutBuf,
DWORD OutBufLen,
PDWORD pdwBytesTransferred
)
PinHandleBufferRequest( dwCommand, pOutBuf, OutBufLen, pdwBytesTransferred );
、、、、
PCS_STREAM_DESCRIPTOR pCsDescriptor = (PCS_STREAM_DESCRIPTOR) pOutBuf;
、、、、
EnqueueDescriptor( pCsDescriptor );
还是那个问题,等参数传入的EnqueueDescriptor()里面的时候,是Pin_IoControl里的pOutbuf.问题就在这里,不应该是pOutbuf的,而应该是pInbuf.
当然,对与应用层传入的指针或者嵌套指针,在CE6驱动里必须进行检测与映射的。这个就是FLandY1982所连接介绍的。其实在驱动中marshal.hpp定义了一个类MarshalledBuffer_t,专门来处理应用层传入的指针。对于FLandY1982的第二种方法,真接强制分配一块内存给poutbuf,我以前也试过,是在Allocatbuffer中截获的pinbuf的地址付回去的。那样只能在开始时进行still模式下拍一两张照片,预览与拍照不能持续下去。
现在俺的平台能够用摄像头进行预览,拍照和录像了。一个字,爽!!!!!!
FLandY1982所 |