public static void FreeAMMediaType(AMMediaType mediaType) { if (mediaType == null) return; if (mediaType.formatSize != 0) { Marshal.FreeCoTaskMem(mediaType.formatPtr); mediaType.formatSize = 0; mediaType.formatPtr = IntPtr.Zero; } if (mediaType.unkPtr == IntPtr.Zero) return; Marshal.Release(mediaType.unkPtr); mediaType.unkPtr = IntPtr.Zero; }
private void SaveSizeInfo(ISampleGrabber sampGrabber) { var media = new AMMediaType(); var hr = sampGrabber.GetConnectedMediaType(media); DsError.ThrowExceptionForHR(hr); if ((media.formatType != FormatType.VideoInfo) || (media.formatPtr == IntPtr.Zero)) throw new NotSupportedException("Unknown Grabber Media Format"); var videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader)); Width = videoInfoHeader.BmiHeader.Width; Height = videoInfoHeader.BmiHeader.Height; Stride = Width * (videoInfoHeader.BmiHeader.BitCount / 8); DsUtils.FreeAMMediaType(media); }
private void ConfigureSampleGrabber(ISampleGrabber sampGrabber) { var media = new AMMediaType { majorType = MediaType.Video, subType = MediaSubType.RGB24, formatType = FormatType.VideoInfo }; var hr = sampGrabber.SetMediaType(media); DsError.ThrowExceptionForHR(hr); DsUtils.FreeAMMediaType(media); hr = sampGrabber.SetCallback(this, 1); DsError.ThrowExceptionForHR(hr); }