(不定期更新。。。。)
1 在硬解码中,当你使用回调的方式拿解码后的数据,又想解码前传一个东西(结构体,指针等等),解码后仍然能拿到这个东西,用来操作解码后数据的时候:
VT_EXPORT OSStatus VTDecompressionSessionDecodeFrame( CM_NONNULL VTDecompressionSessionRef session, CM_NONNULL CMSampleBufferRef sampleBuffer, VTDecodeFrameFlags decodeFlags, // bit 0 is enableAsynchronousDecompression void * CM_NULLABLE sourceFrameRefCon, VTDecodeInfoFlags * CM_NULLABLE infoFlagsOut) API_AVAILABLE(macosx(10.8), ios(8.0), tvos(10.2));
@param sourceFrameRefCon
Your reference value for the frame.
Note that if sampleBuffer contains multiple frames, the output callback function will be called
multiple times with this sourceFrameRefCon.
@param sampleBuffer
A CMSampleBuffer containing one or more video frames.
hardDecOutputCallback(void *DEComprOutputRefCon, void *sourceFrameRefCon, OSStatus status, VTDecodeInfoFlags infoFlags, CVImageBufferRef ImageBuffer, CMTime TimeStamp, CMTime Duration) //注册回调 const VTDecompressionOutputCallbackRecord CallBack = {hardDecOutputCallback, this}; nStatus = VTDecompressionSessionCreate(NULL, FormatDEC, NULL, PixelBufferAttributes, &CallBack, &DecSession);
注意;上边两个函数里的 sourceFrameRefCon不限于非得是CVPixelBufferRef类型;这个东西是一个指针,可以是你自己定义的一个 char* ,void* 结构体指针强转,只要你需要通过解码附带传输什么地址,你就可以用它;