diff options
Diffstat (limited to 'src/VideoPlayer.cpp')
-rw-r--r-- | src/VideoPlayer.cpp | 69 |
1 files changed, 30 insertions, 39 deletions
diff --git a/src/VideoPlayer.cpp b/src/VideoPlayer.cpp index 76fa82a..4be0671 100644 --- a/src/VideoPlayer.cpp +++ b/src/VideoPlayer.cpp @@ -90,27 +90,20 @@ namespace QuickMedia { } } - VideoPlayer::VideoPlayer(bool no_video, bool use_system_mpv_config, bool keep_open, EventCallbackFunc _event_callback, VideoPlayerWindowCreateCallback _window_create_callback, const std::string &resource_root, int monitor_height, std::string plugin_name) : + VideoPlayer::VideoPlayer(StartupArgs startup_args, EventCallbackFunc _event_callback, VideoPlayerWindowCreateCallback _window_create_callback) : exit_status(0), - plugin_name(std::move(plugin_name)), - no_video(no_video), - use_system_mpv_config(use_system_mpv_config), - keep_open(keep_open), - use_youtube_dl(true), + startup_args(std::move(startup_args)), video_process_id(-1), connect_tries(0), find_window_tries(0), - monitor_height(monitor_height), event_callback(_event_callback), window_create_callback(_window_create_callback), window_handle(0), - parent_window(0), display(nullptr), request_id_counter(1), expected_request_id(0), request_response_data(Json::nullValue), - response_data_status(ResponseDataStatus::NONE), - resource_root(resource_root) + response_data_status(ResponseDataStatus::NONE) { tmp_chapters_filepath[0] = '\0'; display = XOpenDisplay(NULL); @@ -118,7 +111,7 @@ namespace QuickMedia { show_notification("QuickMedia", "Failed to open display to X11 server", Urgency::CRITICAL); abort(); } - fprintf(stderr, "Video max height: %d\n", monitor_height); + fprintf(stderr, "Video max height: %d\n", startup_args.monitor_height); } VideoPlayer::~VideoPlayer() { @@ -147,9 +140,7 @@ namespace QuickMedia { return path; } - VideoPlayer::Error VideoPlayer::launch_video_process(const char *path, const char *audio_path, mgl::WindowHandle _parent_window, const std::string &title, const std::string &start_time) { - parent_window = _parent_window; - + VideoPlayer::Error VideoPlayer::launch_video_process() { int fd[2]; if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd) < 0) { perror("Failed to create socketpair for video player"); @@ -162,13 +153,13 @@ namespace QuickMedia { fcntl(ipc_socket, F_SETFL, flags | O_NONBLOCK); const std::string ipc_fd = std::to_string(fd[1]); - std::string input_conf = "--input-conf=" + resource_root + "input.conf"; + std::string input_conf = "--input-conf=" + startup_args.resource_root + "input.conf"; std::string cache_dir = "--cache-dir=" + std::move(get_cache_dir().join("media").data); std::string wid_arg = "--wid="; - wid_arg += std::to_string(parent_window); + wid_arg += std::to_string(startup_args.parent_window); - std::string video_player_filepath = resource_root + "/video_player/sibs-build/linux_x86_64/" + std::string video_player_filepath = startup_args.resource_root + "/video_player/sibs-build/linux_x86_64/" #ifdef NDEBUG "release/" #else @@ -203,27 +194,29 @@ namespace QuickMedia { "--osc=yes", //"--force_all_formats=no", cache_dir.c_str(), - input_conf.c_str(), wid_arg.c_str(), "--ipc-fd", ipc_fd.c_str() }); + + if(!startup_args.use_system_input_config) + args.push_back(input_conf.c_str()); if(is_running_wayland()) { args.push_back("--gpu-context=x11egl"); fprintf(stderr, "Wayland detected. Launching mpv in x11egl mode\n"); } - if(keep_open) + if(startup_args.keep_open) args.push_back("--keep-open=yes"); std::string ytdl_format; - if(no_video) + if(startup_args.no_video) ytdl_format = "--ytdl-format=bestaudio/best"; else - ytdl_format = "--ytdl-format=bestvideo[height<=?" + std::to_string(monitor_height) + "]+bestaudio/best"; + ytdl_format = "--ytdl-format=bestvideo[height<=?" + std::to_string(startup_args.monitor_height) + "]+bestaudio/best"; - if(!use_youtube_dl) + if(!startup_args.use_youtube_dl) args.push_back("--ytdl=no"); else args.push_back(ytdl_format.c_str()); @@ -233,7 +226,7 @@ namespace QuickMedia { if(get_file_type(mpris_path) == FileType::REGULAR) mpris_arg = "--scripts=" + mpris_path.data; - if(!use_system_mpv_config) { + if(!startup_args.use_system_mpv_config) { args.insert(args.end(), { "--config=no", "--profile=gpu-hq", @@ -246,12 +239,12 @@ namespace QuickMedia { } std::string force_media_title_arg; - if(!title.empty()) { - force_media_title_arg = "--force-media-title=" + title; + if(!startup_args.title.empty()) { + force_media_title_arg = "--force-media-title=" + startup_args.title; args.push_back(force_media_title_arg.c_str()); } - if(no_video) + if(startup_args.no_video) args.push_back("--video=no"); std::string chapters_file_arg; @@ -260,18 +253,18 @@ namespace QuickMedia { args.push_back(chapters_file_arg.c_str()); } - if(audio_path && audio_path[0] != '\0') { + if(!startup_args.audio_path.empty()) { args.push_back("--audio-file"); - args.push_back(audio_path); + args.push_back(startup_args.audio_path.c_str()); } std::string start_time_arg; - if(!start_time.empty()) { - start_time_arg = "--start=" + start_time; + if(!startup_args.start_time.empty()) { + start_time_arg = "--start=" + startup_args.start_time; args.push_back(start_time_arg.c_str()); } - args.insert(args.end(), { "--", path, nullptr }); + args.insert(args.end(), { "--", startup_args.path.c_str(), nullptr }); if(exec_program_async(args.data(), &video_process_id) != 0) { close(fd[1]); @@ -284,18 +277,16 @@ namespace QuickMedia { return Error::OK; } - VideoPlayer::Error VideoPlayer::load_video(const char *path, const char *audio_path, mgl::WindowHandle _parent_window, bool use_youtube_dl, const std::string &title, const std::string &start_time, const std::vector<MediaChapter> &chapters) { + VideoPlayer::Error VideoPlayer::load_video() { // This check is to make sure we dont change window that the video belongs to. This is not a usecase we will have so // no need to support it for now at least. - assert(parent_window == 0 || parent_window == _parent_window); - assert(path); - this->use_youtube_dl = use_youtube_dl; - if(!create_tmp_file_with_chapters_data(tmp_chapters_filepath, chapters)) + assert(!startup_args.path.empty()); + if(!create_tmp_file_with_chapters_data(tmp_chapters_filepath, startup_args.chapters)) fprintf(stderr, "Warning: failed to create chapters file. Chapters will not be displayed\n"); - fprintf(stderr, "Playing video: %s, audio: %s\n", path ? path : "", audio_path ? audio_path : ""); + fprintf(stderr, "Playing video: %s, audio: %s\n", startup_args.path.c_str(), startup_args.audio_path.c_str()); if(video_process_id == -1) - return launch_video_process(path, audio_path, _parent_window, title, start_time); + return launch_video_process(); fprintf(stderr, "TODO: Implement VideoPlayer::load_video without restarting the video player\n"); abort(); @@ -341,7 +332,7 @@ namespace QuickMedia { if(window_handle == 0 && retry_timer.get_elapsed_time_seconds() >= RETRY_TIME_SEC) { retry_timer.restart(); - std::vector<Window> child_windows = get_child_window(display, parent_window); + std::vector<Window> child_windows = get_child_window(display, startup_args.parent_window); size_t num_children = child_windows.size(); if(num_children == 0) { ++find_window_tries; |