Compare commits

..

5 Commits
5.3.1 ... 5.3.3

Author SHA1 Message Date
dec05eba
e7a95f830a 5.3.3 2025-03-16 01:22:35 +01:00
dec05eba
1e0e24c818 todo 2025-03-16 01:16:18 +01:00
dec05eba
22c76fb8c3 Ffmpeg changes the api YET AGAIN, breaking recording on nvidia 2025-03-16 00:48:38 +01:00
dec05eba
77b60a03b2 5.3.2 2025-03-15 13:23:09 +01:00
dec05eba
1280a5ed0c Fix application audio not working correctly after a recent update 2025-03-15 13:22:42 +01:00
5 changed files with 15 additions and 8 deletions

2
TODO
View File

@@ -250,3 +250,5 @@ Support high quality scaling with -s by using lanczos.
Support spanning multiple monitors with region capture. This would also allow the user to record multiple monitors at the same time, the same way screen-direct works on nvidia x11.
When webcam support is added also support v4l2loopback? this is done by using avdevice_register_all(); and -c v4l2 -o /dev/video0; but it needs to output raw data as well instead of h264 and possibly yuv420p. Maybe add a -k yuv420p option to do that.
Do proper exit, to call gsr_capture_destroy which will properly stop gsr-kms-server. Otherwise there can be zombie gsr-kms-server on error.

View File

@@ -1,4 +1,4 @@
project('gpu-screen-recorder', ['c', 'cpp'], version : '5.3.1', default_options : ['warning_level=2'])
project('gpu-screen-recorder', ['c', 'cpp'], version : '5.3.3', default_options : ['warning_level=2'])
add_project_arguments('-Wshadow', language : ['c', 'cpp'])
if get_option('buildtype') == 'debug'

View File

@@ -1,7 +1,7 @@
[package]
name = "gpu-screen-recorder"
type = "executable"
version = "5.3.1"
version = "5.3.3"
platforms = ["posix"]
[config]

View File

@@ -777,7 +777,7 @@ static void dict_set_profile(AVCodecContext *codec_context, gsr_gpu_vendor vendo
//if(color_depth == GSR_COLOR_DEPTH_10_BITS)
// av_dict_set_int(options, "profile", AV_PROFILE_H264_HIGH_10, 0);
//else
av_dict_set_int(options, "profile", AV_PROFILE_H264_HIGH, 0);
av_dict_set_int(options, "profile", vendor == GSR_GPU_VENDOR_NVIDIA ? 2 : AV_PROFILE_H264_HIGH, 0);
} else if(codec_context->codec_id == AV_CODEC_ID_AV1) {
if(vendor == GSR_GPU_VENDOR_NVIDIA) {
if(color_depth == GSR_COLOR_DEPTH_10_BITS)
@@ -787,9 +787,9 @@ static void dict_set_profile(AVCodecContext *codec_context, gsr_gpu_vendor vendo
}
} else if(codec_context->codec_id == AV_CODEC_ID_HEVC) {
if(color_depth == GSR_COLOR_DEPTH_10_BITS)
av_dict_set_int(options, "profile", AV_PROFILE_HEVC_MAIN_10, 0);
av_dict_set_int(options, "profile", vendor == GSR_GPU_VENDOR_NVIDIA ? 1 : AV_PROFILE_HEVC_MAIN_10, 0);
else
av_dict_set_int(options, "profile", AV_PROFILE_HEVC_MAIN, 0);
av_dict_set_int(options, "profile", vendor == GSR_GPU_VENDOR_NVIDIA ? 0 : AV_PROFILE_HEVC_MAIN, 0);
}
#endif
}

View File

@@ -365,6 +365,8 @@ static bool gsr_pipewire_audio_listen_on_metadata(gsr_pipewire_audio *self, uint
pw_proxy_add_object_listener(self->metadata_proxy, &self->metadata_listener, &metadata_events, self);
pw_proxy_add_listener(self->metadata_proxy, &self->metadata_proxy_listener, &metadata_proxy_events, self);
self->server_version_sync = pw_core_sync(self->core, PW_ID_CORE, self->server_version_sync);
return true;
}
@@ -562,12 +564,12 @@ bool gsr_pipewire_audio_init(gsr_pipewire_audio *self) {
// TODO: Error check
pw_core_add_listener(self->core, &self->core_listener, &core_events, self);
self->server_version_sync = pw_core_sync(self->core, PW_ID_CORE, 0);
pw_thread_loop_wait(self->thread_loop);
self->registry = pw_core_get_registry(self->core, PW_VERSION_REGISTRY, 0);
pw_registry_add_listener(self->registry, &self->registry_listener, &registry_events, self);
self->server_version_sync = pw_core_sync(self->core, PW_ID_CORE, self->server_version_sync);
pw_thread_loop_wait(self->thread_loop);
pw_thread_loop_unlock(self->thread_loop);
return true;
}
@@ -595,6 +597,9 @@ void gsr_pipewire_audio_deinit(gsr_pipewire_audio *self) {
self->metadata_proxy = NULL;
}
spa_hook_remove(&self->registry_listener);
spa_hook_remove(&self->core_listener);
if(self->core) {
pw_core_disconnect(self->core);
self->core = NULL;