});
}
+void CEFCapture::set_max_fps(int max_fps)
+{
+ post_to_cef_ui_thread([this, max_fps] {
+ browser->GetHost()->SetWindowlessFrameRate(max_fps);
+ this->max_fps = max_fps;
+ });
+}
+
void CEFCapture::OnPaint(const void *buffer, int width, int height)
{
steady_clock::time_point timestamp = steady_clock::now();
video_format.width = width;
video_format.height = height;
video_format.stride = width * 4;
- video_format.frame_rate_nom = 60; // FIXME
+ video_format.frame_rate_nom = max_fps;
video_format.frame_rate_den = 1;
video_format.has_signal = true;
video_format.is_connected = true;
CefBrowserSettings browser_settings;
browser_settings.web_security = cef_state_t::STATE_DISABLED;
browser_settings.webgl = cef_state_t::STATE_ENABLED;
- browser_settings.windowless_frame_rate = 60;
+ browser_settings.windowless_frame_rate = max_fps;
CefWindowInfo window_info;
window_info.SetAsWindowless(0);
mode.autodetect = false;
mode.width = width;
mode.height = height;
- mode.frame_rate_num = 60; // FIXME
+ mode.frame_rate_num = max_fps;
mode.frame_rate_den = 1;
mode.interlaced = false;
void set_url(const std::string &url);
void reload();
+ void set_max_fps(int max_fps);
void OnPaint(const void *buffer, int width, int height);
bmusb::frame_callback_t frame_callback = nullptr;
std::string description, start_url;
+ std::atomic<int> max_fps{60};
std::mutex browser_mutex;
CefRefPtr<CefBrowser> browser; // Under <browser_mutex>.
return 0;
}
+int HTMLInput_set_max_fps(lua_State* L)
+{
+ assert(lua_gettop(L) == 2);
+ CEFCapture **video_input = (CEFCapture **)luaL_checkudata(L, 1, "HTMLInput");
+ int max_fps = lrint(luaL_checknumber(L, 2));
+ (*video_input)->set_max_fps(max_fps);
+ return 0;
+}
+
int HTMLInput_get_signal_num(lua_State* L)
{
assert(lua_gettop(L) == 1);
};
const luaL_Reg HTMLInput_funcs[] = {
- // TODO: execute_javascript, perhaps set_max_fps?
+ // TODO: execute_javascript
{ "new", HTMLInput_new },
{ "set_url", HTMLInput_set_url },
{ "reload", HTMLInput_reload },
+ { "set_max_fps", HTMLInput_set_max_fps },
{ "get_signal_num", HTMLInput_get_signal_num },
{ NULL, NULL }
};