|
|
I have a stream a bitmaps coming from a video camera and I would like to create a compressed Windows Media 9 Advance Profile video file out of them but I am getting an error I can not figure out. I'm writing this in C# .NET and I'm using the wrapper library currently available on sourceforge.
I am getting exception 0xC00D0BB8 on the GetInputFormatCount method call.
public MediaWriter(string filePath, Size frameSize, int frameRate, int quality) { IWMProfileManager profileManager; WMUtils.WMCreateProfileManager(out profileManager); int codecCount; ((IWMCodecInfo3)profileManager).GetCodecInfoCount(MediaType.Video, out codecCount);
IWMStreamConfig videoStream; //Windows Media Video 9 Advanced Profile ((IWMCodecInfo3)profileManager).GetCodecFormat(MediaType.Video, codecCount - 1, 0, out videoStream); videoStream.SetStreamNumber(1); videoStream.SetBitrate(0);
((IWMPropertyVault)videoStream).SetProperty(Constants.g_wszVBREnabled, AttrDataType.BINARY, BitConverter.GetBytes(true), BitConverter.GetBytes(true).Length); ((IWMPropertyVault)videoStream).SetProperty(Constants.g_wszVBRQuality, AttrDataType.DWORD, BitConverter.GetBytes(quality), BitConverter.GetBytes(quality).Length); ((IWMPropertyVault)videoStream).SetProperty(Constants.g_wszVBRBitrateMax, AttrDataType.DWORD, BitConverter.GetBytes(0), BitConverter.GetBytes(0).Length); ((IWMPropertyVault)videoStream).SetProperty(Constants.g_wszVBRBufferWindowMax, AttrDataType.DWORD, BitConverter.GetBytes(0), BitConverter.GetBytes(0).Length);
int mediaTypeSize = 0; ((IWMVideoMediaProps)videoStream).GetMediaType(null, ref mediaTypeSize); AMMediaType mediaType = new AMMediaType(); mediaType.formatSize = mediaTypeSize; ((IWMVideoMediaProps)videoStream).GetMediaType(mediaType, ref mediaTypeSize); VideoInfoHeader videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader)); videoInfoHeader.SrcRect = new Rectangle(0, 0, frameSize.Width, frameSize.Height); videoInfoHeader.TargetRect = new Rectangle(0, 0, frameSize.Width, frameSize.Height); videoInfoHeader.BitRate = 0; videoInfoHeader.AvgTimePerFrame = 10000000L / (long)frameRate; videoInfoHeader.BmiHeader.Width = frameSize.Width; videoInfoHeader.BmiHeader.Height = frameSize.Height; ((IWMVideoMediaProps)videoStream).SetMediaType(mediaType); WMUtils.FreeWMMediaType(mediaType);
IWMProfile profile; profileManager.CreateEmptyProfile(WMVersion.V9_0, out profile);
profile.AddStream(videoStream);
WMUtils.WMCreateWriter(IntPtr.Zero, out m_wmWriter); m_wmWriter.SetProfile(profile); m_wmWriter.SetOutputFilename(filePath);
int formatCount = 0; m_wmWriter.GetInputFormatCount(0, out formatCount); m_wmWriter.BeginWriting(); }
|
|
|