Подтвердить что ты не робот

Как определить количество плоскостей и байтов на пиксель определенной цветности?

Я использую LibVLC и хочу отображать пиксели видео в памяти, поэтому я смогу сделать снимок кадра без получения видеоролика в окне (как и по умолчанию).

Если я правильно понимаю, этого можно добиться, вызвав libvlc_video_set_callbacks и libvlc_video_set_format_callbacks. В первой функции мне нужно указать обратный вызов типа libvlc_video_lock_cb, в котором мне придется инициализировать один из трех плоскостей, который я понимаю, это буферы в котором будут рисоваться пиксели.

Моя проблема заключается в том, что количество байтов, которые используются на пиксель, а также количество самолетов, которые должны быть инициализированы, зависят от цветности видео. Хотя я знаю, как получить четырехбуквенный идентификатор этой цветности, я не знаю, как получить эти конкретные свойства; и без этой информации, я не знаю, какой размер должны быть нужны буферам, которые мне нужно выделить, и сколько там самолетов.

Кто-нибудь знает, как это сделать? Или я что-то неправильно понимаю?

4b9b3361

Ответ 1

Как вы отметили, байты на пиксель и количество плоскостей зависят от кодека. Таким образом, одним из вариантов является жесткое кодирование значений для текущих параметров (GREY, I240, RV16, RV15, RV24, RV32, YUY2, YUYV, UYVY, I41N, I422, I420, I411, I410, MJPG) в вашем коде.

Перейдите в http://www.fourcc.org/ для получения подробной информации о коде/форматах.

Вы также можете посмотреть vlc_fourcc.h и fourcc.c из проекта VLC. В частности, см. Функцию vlc_fourcc_GetChromaDescription.

Ответ 2

Обратный вызов setup (второй параметр libvlc_video_set_format_callbacks(), тип libvlc_video_format_cb) позволяет вам читать и, при желании, изменять формат видео.

Если этот обратный вызов получает формат, который он не понимает, он может просто изменить его на тот, который он знает.