Пример #1
0
 extern static unsafe VTStatus VTCompressionSessionEncodeFrameWithOutputHandler(
     /* VTCompressionSessionRef */ IntPtr session,
     /* CVImageBufferRef */ IntPtr imageBuffer,
     /* CMTime */ CMTime presentation,
     /* CMTime */ CMTime duration,             // can ve CMTime.Invalid
     /* CFDictionaryRef */ IntPtr dict,        // can be null, undocumented options
     /* VTEncodeInfoFlags */ out VTEncodeInfoFlags flags,
     /* VTCompressionOutputHandler */ BlockLiteral *outputHandler);
Пример #2
0
 extern static VTStatus VTCompressionSessionEncodeFrame(
     /* VTCompressionSessionRef */ IntPtr session,
     /* CVImageBufferRef */ IntPtr imageBuffer,
     /* CMTime */ CMTime presentation,
     /* CMTime */ CMTime duration,             // can ve CMTime.Invalid
     /* CFDictionaryRef */ IntPtr dict,        // can be null, undocumented options
     /* void* */ IntPtr sourceFrame,
     /* VTEncodeInfoFlags */ out VTEncodeInfoFlags flags);
Пример #3
0
		static void CompressionCallback (IntPtr outputCallbackClosure, IntPtr sourceFrame, VTStatus status, VTEncodeInfoFlags infoFlags, IntPtr cmSampleBufferPtr)
		{
			var gch = GCHandle.FromIntPtr (outputCallbackClosure);
			var func = (VTCompressionOutputCallback) gch.Target;
			using (var sampleBuffer = new CMSampleBuffer (cmSampleBufferPtr)) {
				func (sourceFrame, status, infoFlags, sampleBuffer);
			}
		}
Пример #4
0
        static unsafe void VTCompressionOutputHandlerTrampoline(BlockLiteral *block,
                                                                VTStatus status, VTEncodeInfoFlags infoFlags, IntPtr sampleBuffer)
        {
            var del = (VTCompressionOutputHandler)(block->Target);

            if (del != null)
            {
                del(status, infoFlags, new CMSampleBuffer(sampleBuffer));
            }
        }
Пример #5
0
 static void CompressionCallback(IntPtr outputCallbackClosure, IntPtr sourceFrame, VTStatus status, VTEncodeInfoFlags infoFlags, IntPtr cmSampleBufferPtr)
 {
     CompressionCallback(outputCallbackClosure, sourceFrame, status, infoFlags, cmSampleBufferPtr, true);
 }
Пример #6
0
        static void CompressionCallback(IntPtr outputCallbackClosure, IntPtr sourceFrame, VTStatus status, VTEncodeInfoFlags infoFlags, IntPtr cmSampleBufferPtr, bool owns)
        {
            var gch  = GCHandle.FromIntPtr(outputCallbackClosure);
            var func = (VTCompressionOutputCallback)gch.Target;

            if (cmSampleBufferPtr == IntPtr.Zero)
            {
                func(sourceFrame, status, infoFlags, null);
            }
            else
            {
                using (var sampleBuffer = new CMSampleBuffer(cmSampleBufferPtr, owns: owns))
                    func(sourceFrame, status, infoFlags, sampleBuffer);
            }
        }
Пример #7
0
        public VTStatus EncodeFrame(CVImageBuffer imageBuffer, CMTime presentationTimestamp, CMTime duration,
                                    NSDictionary frameProperties, IntPtr sourceFrame, out VTEncodeInfoFlags infoFlags,
                                    VTCompressionOutputHandler outputHandler)
        {
            if (Handle == IntPtr.Zero)
            {
                throw new ObjectDisposedException("CompressionSession");
            }
            if (imageBuffer == null)
            {
                throw new ArgumentNullException("imageBuffer");
            }
            if (outputHandler == null)
            {
                throw new ArgumentNullException("outputHandler");
            }

            unsafe {
                var block    = new BlockLiteral();
                var blockPtr = █
                block.SetupBlockUnsafe(compressionOutputHandlerTrampoline, outputHandler);

                try {
                    return(VTCompressionSessionEncodeFrameWithOutputHandler(Handle,
                                                                            imageBuffer.Handle, presentationTimestamp, duration,
                                                                            frameProperties == null ? IntPtr.Zero : frameProperties.Handle,
                                                                            out infoFlags, blockPtr));
                } finally {
                    blockPtr->CleanupBlock();
                }
            }
        }
Пример #8
0
        public VTStatus EncodeFrame(CVImageBuffer imageBuffer, CMTime presentationTimestampe, CMTime duration,
                                    NSDictionary frameProperties, IntPtr sourceFrame, out VTEncodeInfoFlags infoFlags)
        {
            if (Handle == IntPtr.Zero)
            {
                throw new ObjectDisposedException("CompressionSession");
            }
            if (imageBuffer == null)
            {
                throw new ArgumentNullException("imageBuffer");
            }

            return(VTCompressionSessionEncodeFrame(Handle, imageBuffer.Handle, presentationTimestampe, duration,
                                                   frameProperties == null ? IntPtr.Zero : frameProperties.Handle,
                                                   sourceFrame, out infoFlags));
        }
Пример #9
0
		public VTStatus EncodeFrame (CVImageBuffer imageBuffer, CMTime presentationTimestamp, CMTime duration,
			NSDictionary frameProperties, IntPtr sourceFrame, out VTEncodeInfoFlags infoFlags,
			VTCompressionOutputHandler outputHandler)
		{
			if (Handle == IntPtr.Zero)
				throw new ObjectDisposedException ("CompressionSession");
			if (imageBuffer == null)
				throw new ArgumentNullException ("imageBuffer");
			if (outputHandler == null)
				throw new ArgumentNullException ("outputHandler");

			unsafe {
				var block = new BlockLiteral ();
				var blockPtr = █
				block.SetupBlock (compressionOutputHandlerTrampoline, outputHandler);

				try {
					return VTCompressionSessionEncodeFrameWithOutputHandler (Handle,
						imageBuffer.Handle, presentationTimestamp, duration,
						frameProperties == null ? IntPtr.Zero : frameProperties.Handle,
						out infoFlags, blockPtr);
				} finally {
					blockPtr->CleanupBlock ();
				}
			}
		}
Пример #10
0
		static unsafe void VTCompressionOutputHandlerTrampoline (BlockLiteral *block,
			VTStatus status, VTEncodeInfoFlags infoFlags, IntPtr sampleBuffer)
		{
			var del = (VTCompressionOutputHandler)(block->Target);
			if (del != null)
				del (status, infoFlags, new CMSampleBuffer (sampleBuffer));
		}
Пример #11
0
		extern static unsafe VTStatus VTCompressionSessionEncodeFrameWithOutputHandler (
			/* VTCompressionSessionRef */ IntPtr session,
			/* CVImageBufferRef */ IntPtr imageBuffer,
			/* CMTime */ CMTime presentation,
			/* CMTime */ CMTime duration, // can ve CMTime.Invalid
			/* CFDictionaryRef */ IntPtr dict, // can be null, undocumented options
			/* VTEncodeInfoFlags */ out VTEncodeInfoFlags flags,
			/* VTCompressionOutputHandler */ BlockLiteral *outputHandler);
Пример #12
0
		public VTStatus EncodeFrame (CVImageBuffer imageBuffer, CMTime presentationTimestampe, CMTime duration, 
			NSDictionary frameProperties, IntPtr sourceFrame, out VTEncodeInfoFlags infoFlags)
		{
			if (Handle == IntPtr.Zero)
				throw new ObjectDisposedException ("CompressionSession");
			if (imageBuffer == null)
				throw new ArgumentNullException ("imageBuffer");
			
			return VTCompressionSessionEncodeFrame (Handle, imageBuffer.Handle, presentationTimestampe, duration,
				frameProperties == null ? IntPtr.Zero : frameProperties.Handle,
				sourceFrame, out infoFlags);
		}		
Пример #13
0
		extern static VTStatus VTCompressionSessionEncodeFrame (
			/* VTCompressionSessionRef */ IntPtr session, 
			/* CVImageBufferRef */ IntPtr imageBuffer, 
			/* CMTime */ CMTime presentation, 
			/* CMTime */ CMTime duration, // can ve CMTime.Invalid
			/* CFDictionaryRef */ IntPtr dict, // can be null, undocumented options
			/* void* */ IntPtr sourceFrame, 
			/* VTEncodeInfoFlags */ out VTEncodeInfoFlags flags);
        static void CompressionCallback(IntPtr outputCallbackClosure, IntPtr sourceFrame, VTStatus status, VTEncodeInfoFlags infoFlags, IntPtr cmSampleBufferPtr)
        {
            var gch  = GCHandle.FromIntPtr(outputCallbackClosure);
            var func = (VTCompressionOutputCallback)gch.Target;

            using (var sampleBuffer = new CMSampleBuffer(cmSampleBufferPtr)) {
                func(sourceFrame, status, infoFlags, sampleBuffer);
            }
        }