iOS8中新增了新的硬件解码方法,我们可以使用“VTDecompressionSessionDecodeFrame”解码iOS8中的h264格式。我尝试编写一个程序来打印硬件解码的fps,但是这里有一个问题,回调是异步的,所以我该如何精确计算fps呢?我发现了一个方法,“VTDecompressionSessionWaitForAsynchronousFrames”,这是我想要的吗?
解码函数:
解码回调函数
解码函数:
- (void)render:(CMSampleBufferRef)sampleBuffer
{
if (_isDecoding == NO) {
_isDecoding = YES;
_lastTime = [NSDate date];
}
VTDecodeFrameFlags flags = kVTDecodeFrame_EnableAsynchronousDecompression;
VTDecodeInfoFlags flagOut;
VTDecompressionSessionDecodeFrame(_decompression, sampleBuffer, flags, NULL, &flagOut);
VTDecompressionSessionWaitForAsynchronousFrames(_decompression);
if (_gotFrame == YES) {
_gotFrame = NO;
_isDecoding = NO;
}
CFRelease(sampleBuffer);
}
解码回调函数
void didDecompress( void *decompressionOutputRefCon, void *sourceFrameRefCon, OSStatus status, VTDecodeInfoFlags infoFlags, CVImageBufferRef imageBuffer, CMTime presentationTimeStamp, CMTime presentationDuration ){
VideoView* THIS = (__bridge VideoView*)decompressionOutputRefCon;
THIS->_gotFrame = YES;
NSDate* currentTime = [NSDate date];
NSTimeInterval runTime = currentTime.timeIntervalSince1970 - THIS->_lastTime.timeIntervalSince1970;
THIS->_totalTime += runTime;
THIS->_counts++;
THIS->_lastTime = currentTime;
}
sourceFrameRefCon
传递数据,然后在另一侧使用 Swift 的UnsafeMutableRawPointer
进行转换。 - LLooggaann