Я использую DirectShow.Net и пытаюсь реализовать ISampleGrabberCB в классе.
Чтобы настроить Grabber на графике, я следую этому контрольному списку:
Создайте объект 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, пытаясь найти правильный ответ, но мне не повезло.
Любая идея?
Ваше здоровье. Джанлука.