Esempio n. 1
0
        /*
         * 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);
        }