Ранее я задавал очень похожий вопрос для фильтра видео рендеринга.
См. Здесь: Пользовательский фильтр видео рендерера DirectShow - динамическое изменение разрешения
Но этовремя, мне нужно решение для фильтра источника.Этот исходный фильтр подключается непосредственно к видео рендереру.Декодер встроен.
Я могу получить изменения разрешения из потока.Я также изменяю размеры буферов, когда получаю новое разрешение.Но я не знаю, как уведомить мое новое решение через булавку.Должен ли я каким-либо образом создать экземпляр из CMediaType
, заполнить новые значения и вызвать метод SetMediaType()
для вывода или каково правильное решение?В настоящее время я делаю это.
if(nWidth * nHeight * 3 != reader->m_RGB24BufferSize) { // if resolution changed
reader->m_RGB24BufferSize = nWidth * nHeight * 3;
reader->m_RGB24Buffer = (BYTE*)malloc(reader->m_RGB24BufferSize);
reader->m_pin->m_bmpInfo.biWidth = nWidth;
reader->m_pin->m_bmpInfo.biHeight = nHeight;
reader->m_pin->m_bmpInfo.biSizeImage = GetBitmapSize(&reader->m_pin->m_bmpInfo);
// Now what? How to notify the video renderer?
}
m_pin
является единственным выходным выводом фильтра источника здесь, который объявлен как;
class MyPin : public CSourceStream { ... };
Я знаю, что ответ должен быть простыми вокруг должно быть много примеров, но, поскольку я немного запутался в этих вопросах, я предпочитаю хорошее объяснение, помимо примера.