Пример #1
0
        /// <summary>
        /// Gets the current frame size
        /// </summary>
        /// <returns>The frame size in a bitmap info header</returns>
        private BitmapInfoHeader GetFrameSize()
        {
            BitmapInfoHeader bmiHeader = null;

            try
            {
                IntPtr      pmt       = IntPtr.Zero;
                AMMediaType mediaType = new AMMediaType();
                try
                {
                    // Get the current format info
                    mediaType.formatType = FormatType.VideoInfo2;
                    int hr = _streamConfig.GetFormat(out mediaType);
                    if (hr != 0)
                    {
                        Log.Log.Info("GetFrameSize: FAILED to get format - {0}", hr);
                        Marshal.ThrowExceptionForHR(hr);
                        return(bmiHeader);
                    }
                    // The formatPtr member points to different structures
                    // dependingon the formatType
                    if (mediaType.formatType == FormatType.VideoInfo)
                    {
                        VideoInfoHeader temp = new VideoInfoHeader();
                        Marshal.PtrToStructure(mediaType.formatPtr, temp);
                        bmiHeader = temp.BmiHeader;
                    }
                    else if (mediaType.formatType == FormatType.VideoInfo2)
                    {
                        VideoInfoHeader2 temp = new VideoInfoHeader2();
                        Marshal.PtrToStructure(mediaType.formatPtr, temp);
                        bmiHeader = temp.BmiHeader;
                    }
                    else if (mediaType.formatType == FormatType.Mpeg2Video)
                    {
                        MPEG2VideoInfo temp = new MPEG2VideoInfo();
                        Marshal.PtrToStructure(mediaType.formatPtr, temp);
                        bmiHeader = temp.hdr.BmiHeader;
                    }
                    else if (mediaType.formatType == FormatType.MpegVideo)
                    {
                        MPEG1VideoInfo temp = new MPEG1VideoInfo();
                        Marshal.PtrToStructure(mediaType.formatPtr, temp);
                        bmiHeader = temp.hdr.BmiHeader;
                    }
                }
                finally
                {
                    Marshal.FreeCoTaskMem(pmt);
                }
            }
            catch (Exception)
            {
                Log.Log.Info("  VideoCaptureDevice.getStreamConfigSetting() FAILED ");
            }
            return(bmiHeader);
        }
Пример #2
0
 public static extern void MFInitMediaTypeFromMPEG1VideoInfo(
     [In] IMFMediaType pMFType,
     MPEG1VideoInfo pMP1VI,
     [In] int cbBufSize,
     [In, MarshalAs(UnmanagedType.LPStruct)] Guid pSubtype
     );
Пример #3
0
 /// <summary>
 /// Sets the frame size
 /// </summary>
 /// <param name="bmiHeader">The bitmap info header with the frame size</param>
 /// <returns>true, if it was successful; false otherwise</returns>
 private bool SetFrameSize(BitmapInfoHeader bmiHeader)
 {
     try
     {
         IntPtr      pmt = IntPtr.Zero;
         AMMediaType mediaType;
         try
         {
             // Get the current format info
             int hr = _streamConfig.GetFormat(out mediaType);
             if (hr != 0)
             {
                 Log.Log.Info("SetFrameSize: Failed to get the video format - {0}", hr);
                 return(false);
             }
             // The formatPtr member points to different structures
             // dependingon the formatType
             object formatStruct;
             if (mediaType.formatType == FormatType.VideoInfo)
             {
                 VideoInfoHeader temp = new VideoInfoHeader();
                 Marshal.PtrToStructure(mediaType.formatPtr, temp);
                 temp.BmiHeader = bmiHeader;
                 formatStruct   = temp;
             }
             else if (mediaType.formatType == FormatType.VideoInfo2)
             {
                 VideoInfoHeader2 temp = new VideoInfoHeader2();
                 Marshal.PtrToStructure(mediaType.formatPtr, temp);
                 temp.BmiHeader = bmiHeader;
                 formatStruct   = temp;
             }
             else if (mediaType.formatType == FormatType.Mpeg2Video)
             {
                 MPEG2VideoInfo temp = new MPEG2VideoInfo();
                 Marshal.PtrToStructure(mediaType.formatPtr, temp);
                 temp.hdr.BmiHeader = bmiHeader;
                 formatStruct       = temp;
             }
             else if (mediaType.formatType == FormatType.MpegVideo)
             {
                 MPEG1VideoInfo temp = new MPEG1VideoInfo();
                 Marshal.PtrToStructure(mediaType.formatPtr, temp);
                 temp.hdr.BmiHeader = bmiHeader;
                 formatStruct       = temp;
             }
             else if (mediaType.formatType == FormatType.None)
             {
                 Log.Log.Info("SetFrameSize: FAILED no format returned");
                 return(false);
             }
             else
             {
                 Log.Log.Info("SetFrameSize:  FAILED unknown fmt");
                 return(false);
             }
             // PtrToStructure copies the data so we need to copy it back
             Marshal.StructureToPtr(formatStruct, mediaType.formatPtr, false);
             // Save the changes
             hr = _streamConfig.SetFormat(mediaType);
             if (hr != 0)
             {
                 Log.Log.Info("SetFrameSize:  FAILED to set:{0}", hr);
                 return(false);
             }
         }
         finally
         {
             Marshal.FreeCoTaskMem(pmt);
         }
         return(true);
     }
     catch (Exception)
     {
         Log.Log.Info("SetFrameSize:  FAILED ");
     }
     return(false);
 }