Я использую DirectShow.Net и пытаюсь реализовать ISampleGrabberCB в классе.
Чтобы настроить граббер на графике, я следую этому контрольному списку:
Создание объекта SampleGrabber
Определите формат MediaType (AMMediaType: Video, Rgb, VideoInfo) и установите его в объект SampleGrabber. HRESULT 0, так что я думаю, что все в порядке.
Я установил обратный вызов с помощью sampleGrabber.SetCallback (this, 0). Я передаю «это», потому что ISampleGrabber реализован и определен в самом классе; второй параметр равен 0, потому что я хочу, чтобы метод SampleCB вызывался.
Наконец, я добавляю фильтр на график. HRESULT снова 0.
Однако метод ISampleGrabber.SampleCB не вызывается.
Есть ли у вас какие-либо представления о причине этого плохого поведения?
[Изменить]
Я узнал, что здесь происходит! Но все же мне нужна помощь. Обе веб-камеры, которыми я владею, возвращают видеоформат подтипа YUY2. Как указано выше, код, который я использую, заставляет MediaType к RGB24. Во время выполнения я вижу HResult 0, следовательно, все в порядке. Но поскольку они «несовместимы», Sample Callback никогда не вызывается. Если я удаляю явное определение подтипа, вызывается обратный вызов. Однако кадр, который я получаю, - это YUY2; это не правильный битовый образ, и по этой причине он выглядит «поврежденным», «искаженным».
На данном этапе мне бы хотелось узнать, как можно успешно форсировать формат RGB24 или как конвертировать видеокадр в формат RGB24.
Я потратил довольно много времени в Google, пытаясь найти правильный ответ, но мне не повезло.
Есть идеи?
Приветствия.
Джанлука.