X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fffmpeg%2Fproducer%2Finput%2Finput.cpp;h=445306f2121583abf06ca73d1124f054291edfdf;hb=c4e32e6af54000d4ef22b74e4c29529151f695e1;hp=72648037d8d9704374ebaacf0e3ee89d3dc3394e;hpb=f6ef89b1598a3c9e97857611f802703768740b36;p=casparcg diff --git a/modules/ffmpeg/producer/input/input.cpp b/modules/ffmpeg/producer/input/input.cpp index 72648037d..445306f21 100644 --- a/modules/ffmpeg/producer/input/input.cpp +++ b/modules/ffmpeg/producer/input/input.cpp @@ -252,17 +252,21 @@ struct input::implementation : boost::noncopyable auto resource_name = std::wstring(); auto parts = caspar::protocol_split(url_or_file); + auto protocol = parts.at(0); + auto path = parts.at(1); AVInputFormat* input_format = nullptr; - if (parts.at(0).empty()) - resource_name = parts.at(1); - else if (parts.at(0) == L"dshow") + static const std::set PROTOCOLS_TREATED_AS_FORMATS = { L"dshow", L"v4l2" }; + + if (protocol.empty()) + resource_name = path; + else if (PROTOCOLS_TREATED_AS_FORMATS.find(protocol) != PROTOCOLS_TREATED_AS_FORMATS.end()) { - input_format = av_find_input_format("dshow"); - resource_name = parts.at(1); + input_format = av_find_input_format(u8(protocol).c_str()); + resource_name = path; } else - resource_name = parts.at(0) + L"://" + parts.at(1); + resource_name = protocol + L"://" + path; AVFormatContext* weak_context = nullptr; THROW_ON_ERROR2(avformat_open_input(&weak_context, u8(resource_name).c_str(), input_format, &format_options), resource_name);