Мне, наконец, удалось отказаться от работы с VFW после нескольких проблем, с которыми я столкнулся при разработке приложения.
Благодаря StackOverflow я теперь знаю, что VFW устарел, и хочу перейти на DShow, чтобы мое приложение работало с Vista / W7.
К сожалению, работа была выполнена, и приложение было отправлено клиенту, но как только мы поняли, что у нас проблемы с частотой кадров в Vista / W7 - мы решили переписать видео класс и использовать DirectShow, чтобы установить хороший механизм захвата аудио / видео для веб-камер.
Это будет сложно, так как мы никогда не кодировали с DShow, и сейчас мы ищем несколько конкретных примеров того, как:
Подключение к выбранной веб-камере
аналогично: capDriverConnect
Установите разрешение камеры на 640x480 и формат RGB24 (нам нужно сделать RGB24 до YUV420 для каждого кадра)
аналогично: capSetVideoFormat / capCaptureSetSetup
Установить захват звука для этой веб-камеры
аналогично: capSetAudioFormat
Зарегистрировать два обратных вызова:
- Один для видеокадра (мы передадим кадры в видеокодер)
аналогично: capSetCallbackOnVideoStream
- Один для волнового буфера (мы передадим волновой буфер в аудиокодер)
аналогично: capSetCallbackOnWaveStream
Возможность показывать окно предварительного просмотра где-нибудь в родительском окне
аналогично: capPreview
Выполнение операций Пуск / Стоп при необходимости
- Start - означало бы, подключить и начать захват аудио / видео кадров
- Disconnect - означало бы, прекратить захват аудио-видео кадров
Выполнить рисование для фактического кадра
похож на:
* * SetBitmapBits тысяча семьдесят шесть (CameraInput.GetFrameBitmap (), W * H * 3, vdhdr-> lpData);
// нарисовать что-нибудь с помощью gdi +
GetBitmapBits (CameraInput.GetFrameBitmap (), w * h * 3, vdhdr-> lpData); // установить обратно кадр с данными
Все вышеперечисленное уже было сделано с VFW, но, как я уже писал, нам, к сожалению, нужно переключиться на Direct Show.
Есть ли кто-нибудь, кто мог бы помочь нам достичь класса, который мог бы спасти нас от месяцев изучения Direct Show?