Esempio n. 1
0
        public CaptureFormat[] GetCaptureFormats()
        {
            if (m_pSource == null)
            {
                CreateVideoCaptureSource();
            }
            IMFPresentationDescriptor pPD      = null;
            IMFStreamDescriptor       pSD      = null;
            IMFMediaTypeHandler       pHandler = null;
            IMFMediaType pType = null;

            int hr = m_pSource.CreatePresentationDescriptor(out pPD);

            MFError.ThrowExceptionForHR(hr);

            bool fSelected;

            hr = pPD.GetStreamDescriptorByIndex(0, out fSelected, out pSD);
            MFError.ThrowExceptionForHR(hr);

            hr = pSD.GetMediaTypeHandler(out pHandler);
            MFError.ThrowExceptionForHR(hr);

            int cTypes = 0;

            hr = pHandler.GetMediaTypeCount(out cTypes);
            MFError.ThrowExceptionForHR(hr);

            CaptureFormat[] captureFormats = new CaptureFormat[cTypes];

            for (int i = 0; i < cTypes; i++)
            {
                hr = pHandler.GetMediaTypeByIndex(i, out pType);
                MFError.ThrowExceptionForHR(hr);


                CaptureFormat mediatype = LogMediaType(pType);
                Trace.WriteLine(mediatype);
                Trace.WriteLine("Media Type " + i.ToString());
                captureFormats[i] = mediatype;

                //OutputDebugString(L"\n");
                Marshal.FinalReleaseComObject(pType);
            }

            Marshal.FinalReleaseComObject(pPD);
            Marshal.FinalReleaseComObject(pSD);
            Marshal.FinalReleaseComObject(pHandler);
            Marshal.FinalReleaseComObject(pType);
            return(captureFormats);
        }
Esempio n. 2
0
        private CaptureFormat LogMediaType(IMFMediaType pType)
        {
            int count = 0;

            int hr = pType.GetCount(out count);

            MFError.ThrowExceptionForHR(hr);

            if (count == 0)
            {
                Trace.WriteLine("Empty media type.");
            }
            CaptureFormat capFormat = new CaptureFormat();

            for (int i = 0; i < count; i++)
            {
                LogAttributeValueByIndex(pType, i, ref capFormat);
                MFError.ThrowExceptionForHR(hr);
            }
            return(capFormat);
        }
Esempio n. 3
0
        private string LogAttributeValueByIndex(IMFAttributes pAttr, int index, ref CaptureFormat capFormat)
        {
            //string pGuidName = null;
            //string pGuidValName = null;

            Guid guid = Guid.Empty;

            PropVariant var = new PropVariant();
            //PropVariantInit(&var);


            int hr = pAttr.GetItemByIndex(index, out guid, var);

            MFError.ThrowExceptionForHR(hr);



            if (guid == MFAttributesClsid.MF_MT_FRAME_RATE)
            {
                //Trace.WriteLine("MF_MT_FRAME_RATE");
                int lower = (int)var.GetULong();
                //Trace.WriteLine("LogAttr1_1 = " + lower.ToString());
                int upperbits = (int)(var.GetULong() >> 32);
                //Trace.WriteLine("LogAttr1_2 = " + upperbits.ToString());
                float fr = (float)upperbits / (float)lower;
                capFormat.Framerate = fr;
                Trace.WriteLine("FrameRate = " + fr.ToString());
                return("Framerate=" + fr.ToString() + ", ");
            }
            else if (guid == MFAttributesClsid.MF_MT_FRAME_RATE_RANGE_MAX)
            {
                //Trace.WriteLine("MF_MT_FRAME_RATE_RANGE_MAX");
                int lower = (int)var.GetULong();
                //Trace.WriteLine("LogAttr1_1 = " + lower.ToString());
                int upperbits = (int)(var.GetULong() >> 32);
                //Trace.WriteLine("LogAttr1_2 = " + upperbits.ToString());
                //return "MaxFramerate=" + fr.ToString() + ", ";
            }
            else if (guid == MFAttributesClsid.MF_MT_FRAME_RATE_RANGE_MIN)
            {
                //Trace.WriteLine("MF_MT_FRAME_RATE_RANGE_MIN");
                int lower = (int)var.GetULong();
                //Trace.WriteLine("LogAttr1_1 = " + lower.ToString());
                int   upperbits = (int)(var.GetULong() >> 32);
                float fr        = (float)upperbits / (float)lower;
                //return "MinFramerate=" + fr.ToString() + ", ";
                //Trace.WriteLine("LogAttr1_2 = " + upperbits.ToString());
            }
            else if (guid == MFAttributesClsid.MF_MT_FRAME_SIZE)
            {
                //Trace.WriteLine("MF_MT_FRAME_SIZE");
                int lower = (int)var.GetULong();
                // Trace.WriteLine("LogAttr1_1 = " + lower.ToString());
                int upperbits = (int)(var.GetULong() >> 32);
                //Trace.WriteLine("LogAttr1_2 = " + upperbits.ToString());
                capFormat.Height = lower;
                capFormat.Width  = upperbits;
                Trace.WriteLine("Resolution=" + lower.ToString() + "X" + upperbits.ToString());
                return("Resolution=" + lower.ToString() + "X" + upperbits.ToString());
            }
            else if (guid == MFAttributesClsid.MF_MT_PIXEL_ASPECT_RATIO)
            {
                //Trace.WriteLine("MF_MT_PIXEL_ASPECT_RATIO");
                int lower = (int)var.GetULong();
                //Trace.WriteLine("LogAttr1_1 = " + lower.ToString());
                int upperbits = (int)(var.GetULong() >> 32);
                //Trace.WriteLine("LogAttr1_2 = " + upperbits.ToString());
            }
            else if (guid == MFAttributesClsid.MF_MT_GEOMETRIC_APERTURE)
            {
                //Trace.WriteLine("MF_MT_GEOMETRIC_APERTURE");
                //Trace.WriteLine("LogAttr2 = " + var.ToString());
            }
            else if (guid == MFAttributesClsid.MF_MT_MINIMUM_DISPLAY_APERTURE)
            {
                //Trace.WriteLine("MF_MT_MINIMUM_DISPLAY_APERTURE");
                //Trace.WriteLine("LogAttr2 = " + var.ToString());
            }
            else if (guid == MFAttributesClsid.MF_MT_PAN_SCAN_APERTURE)
            {
                //Trace.WriteLine("MF_MT_PAN_SCAN_APERTURE");
                //Trace.WriteLine("LogAttr2 = " + var.ToString());
            }
            else if (guid == MFAttributesClsid.MF_MT_SUBTYPE)
            {
                capFormat.PixelFormat = var.GetGuid();
            }
            else
            {
                Trace.WriteLine("Unknown attr " + guid.ToString() + " val = " + var.ToString());
            }
            return("");
        }