DirectShow: BITMAPINFOHEADER и ISampleGrabber возвращают разные размеры - PullRequest
0 голосов
/ 11 марта 2009

У меня есть конкретный файл FLV (VP6 / LAME), который имеет размер 400 x 171 пикселей, как сообщается структурой BITMAPINFOHEADER, и подтверждается рядом редакторов метаданных FLV, таких как RichFLV.

Однако при извлечении из него образца с использованием ISampleGrabber результирующий образец (с 3 байтами на пиксель) составляет всего 204 000 байтов (400 x 170 x 3), а не 205 200 байтов (400 x 171 x 3) как I ожидал.

Поскольку я пытаюсь поместить данные только 400 x 170 в конструктор объекта 400 x 171 Bitmap, это довольно расстраивает и вызывает исключения A / V.

Я мог бы взломать это, чтобы определить «близкие, но не совсем ожидаемые» размеры выборки, но мне бы очень хотелось знать, куда в процессе пошла 1px высоты по вертикали. Я предполагаю, что хитрый фильтр, который не поддерживает нечетные значения для ширины / высоты и удаляет его, но я не уверен в простом способе проверить это.

Кто-нибудь знает, что может происходить и как это проверить?

(PS: я не хороший разработчик C / C ++, поэтому, пожалуйста, не предлагайте решений, связанных с его чрезмерным использованием)

1 Ответ

0 голосов
/ 29 августа 2009

Мое лучшее предположение - это хитрый / глючный фильтр FLV. Что происходит, когда вы пробуете другой фильтр FLV? Другие файлы FLV сообщают о неправильных размерах видео?

...