Есть ли способ захвата кадров с такого же количества типов камер, как DirectShow на платформе Windows с использованием Libav? Мне нужно захватить выходные данные камеры без использования фильтров DirectShow, и я хочу, чтобы мое приложение работало со многими типами устройств камеры.
Я искал в Интернете эту возможность libav и обнаружил, что это можно сделать через libav, используя специальный формат ввода "vfwcap". Нечто подобное (не уверен в правильности кода - я написал это сам):
AVFormatParameters formatParams = NULL;
AVInputFormat* pInfmt = NULL;
pInFormatCtx* pInFormatCtx = NULL;
av_register_all();
//formatParams.device = NULL; //this was probably deprecated and then removed
formatParams.channel = 0;
formatParams.standard = "ntsc"; //deprecated too but still available
formatParams.width = 640;
formatParams.height = 480;
formatParams.time_base.num = 1000;
formatParams.time_base.den = 30000; //so we want 30000/1000 = 30 frames per second
formatParams.prealloced_context = 0;
pInfmt = av_find_input_format("vfwcap");
if( !pInfmt )
{
fprintf(stderr,"Unknown input format\n");
return -1;
}
// Open video file (formatParams can be NULL for autodetecting probably)
if (av_open_input_file(&pInFormatCtx, 0, pInfmt, 0, formatParams) < 0)
return -1; // Couldn't open device
/* Same as video4linux code*/
Итак, еще один вопрос: сколько устройств поддерживает Libav? Все, что я нашел о выходе камер захвата с libav на windows, - это совет использовать DirectShow для этой цели, потому что libav поддерживает слишком мало устройств. Может быть, ситуация уже изменилась, и она поддерживает достаточно устройств, чтобы использовать ее в производственных приложениях?
Если это невозможно ... Что ж, я надеюсь, что мой вопрос не будет бесполезным, и этот фрагмент кода, составленный из разных источников, поможет кому-то заинтересоваться этой темой, потому что в действительности слишком мало информации о ней. интернет.