示例#1
0
int main(int argc, char* argv[])
{
	AVFormatContext *pFormatCtx;
	AVDeviceInfoList*pDeviceList;
	AVInputFormat *ifmt;
	AVDictionary* options = NULL;
	AVOutputFormat *ofmt;

	av_register_all();
	avdevice_register_all();

	pFormatCtx = avformat_alloc_context();
	av_dict_set(&options, "list_devices", "true", 0);
	ifmt = av_find_input_format("gdigrab");
	if (avformat_open_input(&pFormatCtx, "title=D:\\project\\fftest\\fftest\\bin\\list_devices.exe", ifmt, &options) != 0) {
		printf("open dshow error\n");
		//return -1;
	}
	//pFormatCtx->iformat = ifmt;
	avdevice_list_devices(pFormatCtx, &pDeviceList);
	avdevice_list_input_sources(ifmt, "desktop", options, &pDeviceList);

	ofmt = av_guess_format("dshow", NULL, NULL);
	avdevice_list_output_sinks(ofmt, NULL, NULL, &pDeviceList);
	return 0;
}
示例#2
0
static int list_devices_for_context(AVFormatContext *s, AVDictionary *options,
                                    AVDeviceInfoList **device_list)
{
    AVDictionary *tmp = NULL;
    int ret;

    av_dict_copy(&tmp, options, 0);
    if ((ret = av_opt_set_dict2(s, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0)
        goto fail;
    ret = avdevice_list_devices(s, device_list);
  fail:
    av_dict_free(&tmp);
    avformat_free_context(s);
    return ret;
}
示例#3
0
QVector<QPair<QString, QString>> CameraDevice::getRawDeviceListGeneric()
{
    QVector<QPair<QString, QString>> devices;

    if (!getDefaultInputFormat())
        return devices;

    // Alloc an input device context
    AVFormatContext *s;
    if (!(s = avformat_alloc_context()))
        return devices;
    if (!iformat->priv_class || !AV_IS_INPUT_DEVICE(iformat->priv_class->category))
    {
        avformat_free_context(s);
        return devices;
    }
    s->iformat = iformat;
    if (s->iformat->priv_data_size > 0)
    {
        s->priv_data = av_mallocz(s->iformat->priv_data_size);
        if (!s->priv_data)
        {
            avformat_free_context(s);
            return devices;
        }
        if (s->iformat->priv_class)
        {
            *(const AVClass**)s->priv_data= s->iformat->priv_class;
            av_opt_set_defaults(s->priv_data);
        }
    }
    else
    {
        s->priv_data = NULL;
    }

    // List the devices for this context
    AVDeviceInfoList* devlist = nullptr;
    AVDictionary *tmp = nullptr;
    av_dict_copy(&tmp, nullptr, 0);
    if (av_opt_set_dict2(s, &tmp, AV_OPT_SEARCH_CHILDREN) < 0)
    {
        av_dict_free(&tmp);
        avformat_free_context(s);
    }
    avdevice_list_devices(s, &devlist);
    if (!devlist)
    {
        qWarning() << "avdevice_list_devices failed";
        return devices;
    }

    // Convert the list to a QVector
    devices.resize(devlist->nb_devices);
    for (int i=0; i<devlist->nb_devices; i++)
    {
        AVDeviceInfo* dev = devlist->devices[i];
        devices[i].first = dev->device_name;
        devices[i].second = dev->device_description;
    }
    avdevice_free_list_devices(&devlist);
    return devices;
}