- auto value = what["VALUE"].str();
- if(!value.empty())
- input_.start(boost::lexical_cast<uint32_t>(value));
- result = boost::lexical_cast<std::wstring>(input_.start());
+ auto nb_frames = file_nb_frames();
+
+ int64_t seek;
+ if (boost::iequals(value, L"rel"))
+ seek = file_frame_number();
+ else if (boost::iequals(value, L"in"))
+ seek = input_.in();
+ else if (boost::iequals(value, L"out"))
+ seek = input_.out();
+ else if (boost::iequals(value, L"end"))
+ seek = nb_frames;
+ else
+ seek = boost::lexical_cast<int64_t>(value);
+
+ if (params.size() > 2)
+ seek += boost::lexical_cast<int64_t>(params.at(2));
+
+ if (seek < 0)
+ seek = 0;
+ else if (seek >= nb_frames)
+ seek = nb_frames - 1;
+
+ input_.seek(static_cast<uint32_t>(seek));