/* * public override int OnReceive(ref IMediaSampleImpl _sample) * { * Console.WriteLine("OnReceive "); * * Output.Deliver(ref _sample); * * return S_OK; * } */ public override int GetMediaType(int iPosition, ref AMMediaType pMediaType) { Console.WriteLine("GetMediaType"); if (iPosition > 0) { return(VFW_S_NO_MORE_ITEMS); } if (pMediaType == null) { return(E_INVALIDARG); } if (!Input.IsConnected) { return(VFW_E_NOT_CONNECTED); } AMMediaType.Copy(Input.CurrentMediaType, ref pMediaType); VideoInfoHeader vhi = new VideoInfoHeader(); Marshal.PtrToStructure(pMediaType.formatPtr, vhi); vhi.BmiHeader.Compression = 0; vhi.BmiHeader.BitCount = 24; vhi.BmiHeader.ImageSize = vhi.BmiHeader.Width * vhi.BmiHeader.Height * 3; pMediaType.formatPtr = Marshal.AllocCoTaskMem(pMediaType.formatSize); Marshal.StructureToPtr(vhi, pMediaType.formatPtr, false); pMediaType.majorType = MediaType.Video; pMediaType.subType = MediaSubType.RGB24; pMediaType.formatType = FormatType.VideoInfo; pMediaType.sampleSize = vhi.BmiHeader.ImageSize; return(NOERROR); }