Я новичок в Directshow и C++. Я пытаюсь захватить видео из источника и закодировать его с помощью VP8. Для этого я использую фильтры DirectShow из https://code.google.com/p/webm/downloads/list
Мой Filtergraph работает и состоит из следующих четырех фильтров:
recorder -> WebM VP8 Encoder Filter -> WebM Muxer Filter -> FileWriter
Проблема в том, что мне нужно изменить свойства фильтра кодировщика VP8. С помощью GraphEdit я могу изменить, например, Targeted Bitrate, но я не знаю, как это сделать программно на C++ (я не хочу использовать PropertyPage). Я также скачал исходный код, нашел и включил файл vp8encoder\vp8encoderfilter.hpp. Это привело к проблеме, из-за которой мне нужно было включить файл vp8encoderidl.h. Сначала я не нашел этот файл в папке sourе, поэтому скачал его откуда-то в инете. Позже я увидел папку IDL, содержащую файл vp8encoder.idl, который я добавил в свой проект, скомпилировал его и включил получившийся файл vp8encoder_h.h. В обоих случаях (с кодом из интернета или из заголовочного файла) я могу скомпилировать свой проект и записать видео. Поэтому я попытался получить интерфейс IVP8Encoder из фильтра DirectShow:
//Instanziate Encoder-Filter
hr = CoCreateInstance(__uuidof(IVP8Encoder), NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVideoEncoder);
//Get Interface
IVP8Encoder *iEncoder = NULL;
hr = pVideoEncoder->QueryInterface(__uuidof(IVP8Encoder), (void**)&iEncoder);
Метод QueryInterface() возвращает E_NOINTERFACE. Поэтому я думаю, что, вероятно, первый параметр неверен, но я понятия не имею, какой параметр нужен вместо этого.
Я ценю вашу помощь и заранее спасибо!