Я пытаюсь победить VFW из моего приложения C#. Большинство вещей было довольно туманным, и в конце концов я дошел до последнего момента, прежде чем это будет сделано.Формат изображения по умолчанию, возвращаемый VFW (C#), имеет некоторые недокументированные значения
Когда я инициирую драйвер камеры с группой сообщений, как
- WM_CAP_GET_VIDEOFORMAT
- WM_CAP_SET_VIDEOFORMAT
затем я получаю указатель на структуру BITMAPINFO на GET_VIDEOFORMAT где (как я полагаю, потому что вебкамера Безразлично У меня установлен его собственный драйвер) один элемент в структуре, называемый biCompression с очень странным значением = 0x32595559 (844715353). Всегда одно и то же значение, а RGBQUAD - все нули. Pls, увидеть снимок, где это значение находится в десятичном формате:
Когда я звоню из VFW Диалог с выбором формата видео, я могу видеть YUY2 (который выбирается и в состоянии быть установлен), и MJPG, который который может быть выбран, но это приводит к тому, что черный экран становится результатом захвата видео.
Когда я вызываю SET_VIDEOFORMAT и отправляю в VFW стандартный формат BMP RGB 640x480 без сжатия, он возвращает 0 (ноль) в SendMessage, что означает, что он не может быть установлен. И, в то же время, отправляя структуру со странным значением сжатия, полученным в GET_VIDEOFORMAT, обратно как SET_VIDEOFORMAT, возвращает 1, и это означает, что VFW принял его.
Так что мне интересно, почему? Либо OS (Win7) не имеет определенного кодека для обычного BMP несжатого, либо потому, что у веб-камеры нет установленного драйвера?
И еще вопрос: что означает значение 0x32595559 в элементе сжатия BITMAPINFO?
Я уже рассматривал его как обычные 24-битные данные YUV, но получилось изображение B & W, без цвета, хотя во время потоковой передачи видео покрашено, и если я получаю его из буфера обмена, он также окрашен.
Как лечить такое столкновение, пожалуйста, помогите мне, если вы знаете это. Если вы очень хорошо справитесь с этим, я буду рад $$.
Спасибо.
UPD. Ничего себе, благодаря моей спонтанной идее передачи десятичных данных в шестнадцатеричный (значение сжатия) я нашел в Google свой код сжатия кодека YUY2. Полный стол here
Хорошо, но вопрос по-прежнему остается без ответа. Если ПК не будет содержать надлежащий кодек для RGB Bitmap несжатого, то что на самом деле происходит в VFW BOX, когда я отправляю SET_VIDEOFORMAT? Он ищет подходящий кодек и пытается подключить его к существующему графику потокового видео?
Я думаю, что ответ на этот вопрос поможет получить VFW для всех.
Если вы хотите использовать сжатие, вам нужно будет сделать снизу вверх изображение. height = -480 вместо 480. Не знаете, как это сделать в вашем приложении. – Yaur
Вы уже поняли, что код означает YUY2. Теперь все, что вам нужно сделать, это вставить на выходной вывод фильтр преобразования, который переводит YUY2 в RGB и подключит ваш рендерер или что-то еще к нему. В качестве альтернативы вы можете поместить туда тройник и подключить трансформатор к одному из штырей тройника и захватить его оттуда. Зависит от того, что вы пытаетесь с этим сделать. Я не знаком с библиотекой, поэтому я не знаю, какое влияние вы оказываете на график фильтра. Звучит как обертка вокруг DShow для меня. –
Привет, Франк, спасибо за отзыв. Я имею дело с VFW, и я уже сделал преобразование из YUY2 в Bitmap. Он работает нормально. То, что я пытаюсь понять, это ... что происходит на SET_VIDEOFORMAT, потому что, если я прав. и он действительно ищет подходящий CODEC для привязки к текущему графику, а затем лучше для каждого клиента использовать кодек YUV2, и использовать преобразование из YUV2 в RGD24bpp. –