Я захватываю avi-файл (h.264) с камеры, я использую xvid code c filter, когда я кодирую в graphEdit, закодированный файл воспроизводится нормально, но когда я кодирую в своей программе, закодированный avi-файл с правильной формой, но плохим цветом, кажется неправильным mediatype, я прикрепляю свой код следующим образом: Кто-нибудь может сказать мне что-то не так в моем коде?
... hr = m_FilterGraph.AddSourceFilterForMoniker (dev.Mon, null, dev .Name, вне capFilter); DsError.ThrowExceptionForHR (hr);
IPin pRaw = null;
IPin pSmart = null;
// Add a splitter
IBaseFilter iSmartTee = (IBaseFilter)new SmartTee();
hr = m_FilterGraph.AddFilter(iSmartTee, "SmartTee");
DsError.ThrowExceptionForHR(hr);
// Find the find the capture pin from the video device and the
// input pin for the splitter, and connnect them
pRaw = DsFindPin.ByCategory(capFilter, PinCategory.Capture, 0);
pSmart = DsFindPin.ByDirection(iSmartTee, PinDirection.Input, 0);
hr = m_FilterGraph.Connect(pRaw, pSmart);
DsError.ThrowExceptionForHR(hr);
// Now set the capture and still pins (from the splitter)
previewPin = DsFindPin.ByName(iSmartTee, "Preview");
capturePin = DsFindPin.ByName(iSmartTee, "Capture");
m_FilterGraph.Render(previewPin);
x264Filter = new XVID() as IBaseFilter;
hr = m_FilterGraph.AddFilter(x264Filter, "x264 encoder");
DsError.ThrowExceptionForHR(hr);
x264In = DsFindPin.ByDirection(x264Filter, PinDirection.Input, 0);
x264Out = DsFindPin.ByDirection(x264Filter, PinDirection.Output, 0);
aviMux = new AVIMUXFILTER() as IBaseFilter;
hr = m_FilterGraph.AddFilter(aviMux, "avi mux");
DsError.ThrowExceptionForHR(hr);
aviIn = DsFindPin.ByDirection(aviMux, PinDirection.Input, 0);
aviOut = DsFindPin.ByDirection(aviMux, PinDirection.Output, 0);
fileWriter = new FileWriter() as IBaseFilter;
IFileSinkFilter fileSinkFilter = fileWriter as IFileSinkFilter;
hr = m_FilterGraph.AddFilter(fileWriter, "file writer");
DsError.ThrowExceptionForHR(hr);
AMMediaType media = new AMMediaType();
media.majorType = MediaType.Stream;
media.subType = MediaSubType.Avi;
fileSinkFilter.SetFileName("123.avi", media);
fileWriterIn = DsFindPin.ByDirection(fileWriter, PinDirection.Input, 0);
hr = m_FilterGraph.Connect(capturePin, x264In);
DsError.ThrowExceptionForHR(hr);
hr = m_FilterGraph.Connect(x264Out, aviIn);
DsError.ThrowExceptionForHR(hr);
hr = m_FilterGraph.Connect(aviOut, fileWriterIn);
DsError.ThrowExceptionForHR(hr);
ConfigVideoWindow(hControl);
...
в функции ConfigVideoWindow, я только помещал видеоокно в окно изображений, ничего не делал с mediatype.