public VTStatus DecodeFrame(CMSampleBuffer sampleBuffer, VTDecodeFrameFlags decodeFlags, out VTDecodeInfoFlags infoFlags, VTDecompressionOutputHandler outputHandler) { if (Handle == IntPtr.Zero) { throw new ObjectDisposedException("DecompressionSession"); } if (sampleBuffer == null) { throw new ArgumentNullException("sampleBuffer"); } if (outputHandler == null) { throw new ArgumentNullException("outputHandler"); } unsafe { var block = new BlockLiteral(); var blockPtr = █ block.SetupBlockUnsafe(decompressionOutputHandlerTrampoline, outputHandler); try { return(VTDecompressionSessionDecodeFrameWithOutputHandler(Handle, sampleBuffer.Handle, decodeFlags, out infoFlags, blockPtr)); } finally { blockPtr->CleanupBlock(); } } }
void ReadSampleBuffers(AVAsset asset) { NSError error; assetReader = AVAssetReader.FromAsset(asset, out error); if (error != null) { Console.WriteLine("Error creating Asset Reader: {0}", error.Description); } AVAssetTrack[] videoTracks = asset.TracksWithMediaType(AVMediaType.Video); AVAssetTrack videoTrack = videoTracks [0]; CreateDecompressionSession(videoTrack); var videoTrackOutput = AVAssetReaderTrackOutput.Create(videoTrack, (AVVideoSettingsUncompressed)null); if (assetReader.CanAddOutput(videoTrackOutput)) { assetReader.AddOutput(videoTrackOutput); } if (!assetReader.StartReading()) { return; } while (assetReader.Status == AVAssetReaderStatus.Reading) { CMSampleBuffer sampleBuffer = videoTrackOutput.CopyNextSampleBuffer(); if (sampleBuffer != null) { VTDecodeFrameFlags flags = VTDecodeFrameFlags.EnableAsynchronousDecompression; VTDecodeInfoFlags flagOut; decompressionSession.DecodeFrame(sampleBuffer, flags, IntPtr.Zero, out flagOut); sampleBuffer.Dispose(); if (presentationTimes.Count >= 5) { bufferSemaphore.Wait(); } } else if (assetReader.Status == AVAssetReaderStatus.Failed) { Console.WriteLine("Asset Reader failed with error: {0}", assetReader.Error.Description); } else if (assetReader.Status == AVAssetReaderStatus.Completed) { Console.WriteLine("Reached the end of the video."); ChangeStatus(); ReadSampleBuffers(asset); } } }
public VTStatus DecodeFrame(CMSampleBuffer sampleBuffer, VTDecodeFrameFlags decodeFlags, IntPtr sourceFrame, out VTDecodeInfoFlags infoFlags) { if (Handle == IntPtr.Zero) { throw new ObjectDisposedException("DecompressionSession"); } if (sampleBuffer == null) { throw new ArgumentNullException("sampleBuffer"); } return(VTDecompressionSessionDecodeFrame(Handle, sampleBuffer.Handle, decodeFlags, sourceFrame, out infoFlags)); }
extern static unsafe VTStatus VTDecompressionSessionDecodeFrameWithOutputHandler( /* VTDecompressionSessionRef */ IntPtr session, /* CMSampleBufferRef */ IntPtr sampleBuffer, /* VTDecodeFrameFlags */ VTDecodeFrameFlags decodeFlags, /* VTDecodeInfoFlags */ out VTDecodeInfoFlags infoFlagsOut, /* VTDecompressionOutputHandler */ BlockLiteral *outputHandler);
extern static VTStatus VTDecompressionSessionDecodeFrame( /* VTDecompressionSessionRef */ IntPtr session, /* CMSampleBufferRef */ IntPtr sampleBuffer, /* VTDecodeFrameFlags */ VTDecodeFrameFlags decodeFlags, /* void* */ IntPtr sourceFrame, /* VTDecodeInfoFlags */ out VTDecodeInfoFlags infoFlagsOut);
public VTStatus DecodeFrame (CMSampleBuffer sampleBuffer, VTDecodeFrameFlags decodeFlags, out VTDecodeInfoFlags infoFlags, VTDecompressionOutputHandler outputHandler) { if (Handle == IntPtr.Zero) throw new ObjectDisposedException ("DecompressionSession"); if (sampleBuffer == null) throw new ArgumentNullException ("sampleBuffer"); if (outputHandler == null) throw new ArgumentNullException ("outputHandler"); unsafe { var block = new BlockLiteral (); var blockPtr = █ block.SetupBlock (decompressionOutputHandlerTrampoline, outputHandler); try { return VTDecompressionSessionDecodeFrameWithOutputHandler (Handle, sampleBuffer.Handle, decodeFlags, out infoFlags, blockPtr); } finally { blockPtr->CleanupBlock (); } } }
extern static unsafe VTStatus VTDecompressionSessionDecodeFrameWithOutputHandler ( /* VTDecompressionSessionRef */ IntPtr session, /* CMSampleBufferRef */ IntPtr sampleBuffer, /* VTDecodeFrameFlags */ VTDecodeFrameFlags decodeFlags, /* VTDecodeInfoFlags */ out VTDecodeInfoFlags infoFlagsOut, /* VTDecompressionOutputHandler */ BlockLiteral *outputHandler);
public VTStatus DecodeFrame (CMSampleBuffer sampleBuffer, VTDecodeFrameFlags decodeFlags, IntPtr sourceFrame, out VTDecodeInfoFlags infoFlags) { if (Handle == IntPtr.Zero) throw new ObjectDisposedException ("DecompressionSession"); if (sampleBuffer == null) throw new ArgumentNullException ("sampleBuffer"); return VTDecompressionSessionDecodeFrame (Handle, sampleBuffer.Handle, decodeFlags, sourceFrame, out infoFlags); }
extern static VTStatus VTDecompressionSessionDecodeFrame ( /* VTDecompressionSessionRef */ IntPtr session, /* CMSampleBufferRef */ IntPtr sampleBuffer, /* VTDecodeFrameFlags */ VTDecodeFrameFlags decodeFlags, /* void* */ IntPtr sourceFrame, /* VTDecodeInfoFlags */ out VTDecodeInfoFlags infoFlagsOut);