<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 20 August 2014 at 16:16, Mike Charikov <span dir="ltr"><<a href="mailto:ch_mike@mail.ru" target="_blank">ch_mike@mail.ru</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div lang="RU" link="blue" vlink="purple"><div><p class="MsoNormal"><span lang="EN-US">Hi!<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">I try to use avdevice_list_devices() for getting list of video devices, but don’t clearly understand, how to do that properly. How should I properly init AVFormatContext for calling avdevice_list_devices()?<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Tried something like that:<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">int main() {<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                avdevice_register_all();<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                avcodec_register_all();<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                AVFormatContext* format_context = avformat_alloc_context();<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                AVInputFormat *fmt = av_find_input_format("dshow");<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                AVDeviceInfoList *device_list=NULL;<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                int err = avformat_open_input(&format_context, NULL, fmt, NULL);<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                if (err != 0) {<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                               fprintf(stderr, "ffmpeg: Unable to open input: %d\n", err);<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                }<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                int i = avdevice_list_devices(format_context, &device_list);<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">                return 0;<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">}<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">But avformat_open_input() returns error (code -1414092869), and so does avdevice_list_devices() (code -40)<u></u><u></u></span></p><p class="MsoNormal"><br></p></div></div></blockquote><div><br></div><div>You better use one of the following that has been added previously:</div><div><br></div><div>int avdevice_list_input_sources(struct AVInputFormat *device, const char *device_name,</div><div>                                AVDictionary *device_options, AVDeviceInfoList **device_list);</div><div>int avdevice_list_output_sinks(struct AVOutputFormat *device, const char *device_name,</div><div>                               AVDictionary *device_options, AVDeviceInfoList **device_list); </div><div><br></div><div>alternatively you may want to check their implementation to answer your question.<br></div><div><br></div><div>But, dshow doesn't implement this API yet, so you will get an error.</div></div></div></div>