+ if (tokens[0] == L"dshow")\r
+ {\r
+ // Camera\r
+ resource_type = FFMPEG_DEVICE;\r
+ filename = tokens[1];\r
+ } else\r
+ {\r
+ // Stream\r
+ resource_type = FFMPEG_STREAM;\r
+ filename = params.at_original(0);\r
+ }\r
+ } else\r
+ {\r
+ // File\r
+ resource_type = FFMPEG_FILE;\r
+ filename = env::media_folder() + L"\\" + tokens[1];\r
+ if(!boost::filesystem::exists(filename))\r
+ filename = probe_stem(filename);\r
+\r
+ //TODO fix these?\r
+ //vid_params->loop = params.has(L"LOOP");\r
+ //vid_params->start = params.get(L"SEEK", static_cast<uint32_t>(0));\r
+ }\r
+\r
+ if(filename.empty())\r
+ return core::frame_producer::empty();\r
+ \r
+ auto loop = params.has(L"LOOP");\r
+ auto start = params.get(L"SEEK", static_cast<uint32_t>(0));\r
+ auto length = params.get(L"LENGTH", std::numeric_limits<uint32_t>::max());\r
+ auto filter_str = params.get(L"FILTER", L""); \r
+ auto custom_channel_order = params.get(L"CHANNEL_LAYOUT", L"");\r
+\r
+ boost::replace_all(filter_str, L"DEINTERLACE", L"YADIF=0:-1");\r
+ boost::replace_all(filter_str, L"DEINTERLACE_BOB", L"YADIF=1:-1");\r
+ \r
+ ffmpeg_producer_params vid_params;\r
+ bool haveFFMPEGStartIndicator = false;\r
+ for (size_t i = 0; i < params.size() - 1; ++i)\r
+ {\r
+ if (!haveFFMPEGStartIndicator && params[i] == L"--")\r
+ {\r
+ haveFFMPEGStartIndicator = true;\r
+ continue;\r
+ }\r
+ if (haveFFMPEGStartIndicator)\r
+ {\r
+ auto name = narrow(params.at_original(i++)).substr(1);\r
+ auto value = narrow(params.at_original(i));\r
+ vid_params.options.push_back(option(name, value));\r
+ }\r