From a2b01bd9fa950e0b90f0d5fb01abab83f4b7c5e8 Mon Sep 17 00:00:00 2001 From: CodeYan01 <65320293+CodeYan01@users.noreply.github.com> Date: Thu, 20 Feb 2025 00:21:51 +0800 Subject: [PATCH] Add hardware decoding option --- data/locale/en-US.ini | 1 + src/media-playlist-source.c | 6 ++++++ src/media-playlist-source.h | 1 + 3 files changed, 8 insertions(+) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 2ecca53..b6b5f6f 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -20,6 +20,7 @@ SubtitleEnabled="Subtitles Enabled" SubtitleTrack="Subtitle Track" SelectFile="Select File" NoFileSelected="No File Selected" +UseHardwareDecoding="Use hardware decoding when available" CloseFileWhenInactive="Close file when inactive" CloseFileWhenInactive.Tooltip="Closes the file when the source is not being displayed on the stream or\nrecording. This allows the file to be changed when the source isn't active,\nbut there may be some startup delay when the source reactivates." CurrentFileName="Current File" diff --git a/src/media-playlist-source.c b/src/media-playlist-source.c index 75e15d7..d8547ee 100644 --- a/src/media-playlist-source.c +++ b/src/media-playlist-source.c @@ -37,6 +37,7 @@ with this program. If not, see #define S_FFMPEG_LOCAL_FILE "local_file" #define S_FFMPEG_INPUT "input" #define S_FFMPEG_IS_LOCAL_FILE "is_local_file" +#define S_FFMPEG_HW_DECODE "hw_decode" #define S_FFMPEG_CLOSE_WHEN_INACTIVE "close_when_inactive" #define T_(text) obs_module_text(text) @@ -53,6 +54,7 @@ with this program. If not, see #define T_CURRENT_FILE_NAME T_("CurrentFileName") #define T_SELECT_FILE T_("SelectFile") #define T_NO_FILE_SELECTED T_("NoFileSelected") +#define T_USE_HARDWARE_DECODING T_("UseHardwareDecoding") #define T_FFMPEG_CLOSE_WHEN_INACTIVE T_("CloseFileWhenInactive") #define T_FFMPEG_CLOSE_WHEN_INACTIVE_TOOLTIP T_("CloseFileWhenInactive.Tooltip") #define T_SPEED T_("Speed") @@ -986,6 +988,8 @@ static obs_properties_t *mps_properties(void *data) obs_property_list_add_int(p, T_RESTART_BEHAVIOR_CURRENT_FILE, RESTART_BEHAVIOR_CURRENT_FILE); obs_property_list_add_int(p, T_RESTART_BEHAVIOR_FIRST_FILE, RESTART_BEHAVIOR_FIRST_FILE); + obs_properties_add_bool(props, S_FFMPEG_HW_DECODE, T_USE_HARDWARE_DECODING); + p = obs_properties_add_bool(props, S_FFMPEG_CLOSE_WHEN_INACTIVE, T_FFMPEG_CLOSE_WHEN_INACTIVE); obs_property_set_long_description(p, T_FFMPEG_CLOSE_WHEN_INACTIVE_TOOLTIP); @@ -1133,8 +1137,10 @@ static void mps_update(void *data, obs_data_t *settings) mps->speed = new_speed; /* Internal media source settings */ + mps->use_hw_decoding = obs_data_get_bool(settings, S_FFMPEG_HW_DECODE); mps->close_when_inactive = obs_data_get_bool(settings, S_FFMPEG_CLOSE_WHEN_INACTIVE); obs_data_t *media_source_settings = obs_data_create(); + obs_data_set_bool(media_source_settings, S_FFMPEG_HW_DECODE, mps->use_hw_decoding); obs_data_set_bool(media_source_settings, S_FFMPEG_CLOSE_WHEN_INACTIVE, mps->close_when_inactive); obs_data_set_int(media_source_settings, S_SPEED, mps->speed); obs_source_update(mps->current_media_source, media_source_settings); diff --git a/src/media-playlist-source.h b/src/media-playlist-source.h index aadb82d..c6fbd05 100644 --- a/src/media-playlist-source.h +++ b/src/media-playlist-source.h @@ -52,6 +52,7 @@ struct media_playlist_source { bool loop; bool paused; bool user_stopped; + bool use_hw_decoding; bool close_when_inactive; pthread_mutex_t mutex; DARRAY(struct media_file_data) files;