From 22430620a82e773037b25226f84d42f909116f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Dzi=C4=99giel?= Date: Fri, 15 Nov 2024 23:18:38 +0100 Subject: [PATCH] clapper-app: Apply "adaptive-start-bitrate" on startup Watch for "adaptive-bandwidth" changes during adaptive streaming, use these to set "adaptive-start-bitrate" player property, so we do not always start streaming from some constant bitrate value which might not be the best for everyone. Additionally, store last value in GSettings on app exit and also add a command line arg to set this too. --- src/bin/clapper-app/clapper-app-application.c | 5 +++++ src/bin/clapper-app/clapper-app-window.c | 13 ++++++++++++- .../schemas/com.github.rafostar.Clapper.gschema.xml | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/bin/clapper-app/clapper-app-application.c b/src/bin/clapper-app/clapper-app-application.c index 1232255a..703d8dec 100644 --- a/src/bin/clapper-app/clapper-app-application.c +++ b/src/bin/clapper-app/clapper-app-application.c @@ -144,6 +144,8 @@ clapper_app_apply_options_to_window (ClapperAppWindow *dest_window, GVariantDict clapper_player_set_mute (dest_player, option_bool); if (clapper_app_options_get ("speed", "d", options, src_player_obj, settings, &option_dbl)) clapper_player_set_speed (dest_player, PERCENTAGE_ROUND (CLAMP (option_dbl, 0.05, 2.0))); + if (clapper_app_options_get ("adaptive-start-bitrate", "i", options, src_player_obj, settings, &option_int)) + clapper_player_set_adaptive_start_bitrate (dest_player, option_int); if (clapper_app_options_get ("progression-mode", "i", options, src_queue_obj, settings, &option_int)) clapper_queue_set_progression_mode (clapper_player_get_queue (dest_player), CLAMP (option_int, 0, 4)); if (clapper_app_options_get ("subtitles-enabled", "b", NULL, src_player_obj, settings, &option_bool)) @@ -196,6 +198,8 @@ _store_settings_from_window (ClapperAppApplication *self, ClapperAppWindow *app_ g_settings_set_double (self->settings, "volume", clapper_player_get_volume (player)); g_settings_set_boolean (self->settings, "mute", clapper_player_get_mute (player)); g_settings_set_double (self->settings, "speed", clapper_player_get_speed (player)); + g_settings_set_int (self->settings, "adaptive-start-bitrate", + CLAMP (clapper_player_get_adaptive_bandwidth (player) * 0.8, 0, G_MAXINT)); g_settings_set_boolean (self->settings, "subtitles-enabled", clapper_player_get_subtitles_enabled (player)); g_settings_set_int (self->settings, "progression-mode", clapper_queue_get_progression_mode (queue)); @@ -676,6 +680,7 @@ clapper_app_application_constructed (GObject *object) { "enqueue", 0, 0, G_OPTION_ARG_NONE, NULL, _("Add media to queue in primary application instance"), NULL }, { "volume", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Audio volume to set (0 - 2.0 range)"), NULL }, { "speed", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Playback speed to set (0.05 - 2.0 range)"), NULL }, + { "adaptive-start-bitrate", 0, 0, G_OPTION_ARG_INT, NULL, _("Initial bitrate for adaptive streaming"), NULL }, { "progression-mode", 0, 0, G_OPTION_ARG_INT, NULL, _("Initial queue progression mode (0=none, 1=consecutive, 2=repeat-item, 3=carousel, 4=shuffle)"), NULL }, { "fullscreen", 'f', 0, G_OPTION_ARG_NONE, NULL, _("Set window to be fullscreen"), NULL }, { "video-filter", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video filter to use (\"none\" to disable)"), NULL }, diff --git a/src/bin/clapper-app/clapper-app-window.c b/src/bin/clapper-app/clapper-app-window.c index c7d0dbdb..9157b1a2 100644 --- a/src/bin/clapper-app/clapper-app-window.c +++ b/src/bin/clapper-app/clapper-app-window.c @@ -151,6 +151,15 @@ _queue_current_item_changed_cb (ClapperQueue *queue, gst_clear_object (¤t_item); } +static void +_player_adaptive_bandwidth_changed_cb (ClapperPlayer *player, + GParamSpec *pspec G_GNUC_UNUSED, gpointer *user_data G_GNUC_UNUSED) +{ + /* Do not take whole bandwidth */ + clapper_player_set_adaptive_start_bitrate (player, + clapper_player_get_adaptive_bandwidth (player) * 0.8); +} + static gboolean _get_seek_method_mapping (GValue *value, GVariant *variant, gpointer user_data G_GNUC_UNUSED) @@ -1280,10 +1289,12 @@ clapper_app_window_constructed (GObject *object) clapper_player_set_autoplay (player, TRUE); - /* No need to also call this here, as item is selected + /* No need to also call these here, as they only change * after application window is contructed */ g_signal_connect (queue, "notify::current-item", G_CALLBACK (_queue_current_item_changed_cb), self); + g_signal_connect (player, "notify::adaptive-bandwidth", + G_CALLBACK (_player_adaptive_bandwidth_changed_cb), NULL); g_settings_bind (self->settings, "audio-offset", player, "audio-offset", G_SETTINGS_BIND_GET); diff --git a/src/bin/clapper-app/data/glib-2.0/schemas/com.github.rafostar.Clapper.gschema.xml b/src/bin/clapper-app/data/glib-2.0/schemas/com.github.rafostar.Clapper.gschema.xml index a73d1d55..9429f861 100644 --- a/src/bin/clapper-app/data/glib-2.0/schemas/com.github.rafostar.Clapper.gschema.xml +++ b/src/bin/clapper-app/data/glib-2.0/schemas/com.github.rafostar.Clapper.gschema.xml @@ -49,6 +49,10 @@ 1.0 Stores last speed value to apply on startup + + 1600000 + Stores initial adaptive streaming bitrate to apply on startup + 1 Stores last queue progression mode used to apply on startup