mirror of
https://repo.dec05eba.com/gpu-screen-recorder
synced 2026-04-19 00:15:48 +09:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7a95f830a | ||
|
|
1e0e24c818 | ||
|
|
22c76fb8c3 | ||
|
|
77b60a03b2 | ||
|
|
1280a5ed0c |
2
TODO
2
TODO
@@ -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.
|
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.
|
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.
|
||||||
@@ -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'])
|
add_project_arguments('-Wshadow', language : ['c', 'cpp'])
|
||||||
if get_option('buildtype') == 'debug'
|
if get_option('buildtype') == 'debug'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "gpu-screen-recorder"
|
name = "gpu-screen-recorder"
|
||||||
type = "executable"
|
type = "executable"
|
||||||
version = "5.3.1"
|
version = "5.3.3"
|
||||||
platforms = ["posix"]
|
platforms = ["posix"]
|
||||||
|
|
||||||
[config]
|
[config]
|
||||||
|
|||||||
@@ -777,7 +777,7 @@ static void dict_set_profile(AVCodecContext *codec_context, gsr_gpu_vendor vendo
|
|||||||
//if(color_depth == GSR_COLOR_DEPTH_10_BITS)
|
//if(color_depth == GSR_COLOR_DEPTH_10_BITS)
|
||||||
// av_dict_set_int(options, "profile", AV_PROFILE_H264_HIGH_10, 0);
|
// av_dict_set_int(options, "profile", AV_PROFILE_H264_HIGH_10, 0);
|
||||||
//else
|
//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) {
|
} else if(codec_context->codec_id == AV_CODEC_ID_AV1) {
|
||||||
if(vendor == GSR_GPU_VENDOR_NVIDIA) {
|
if(vendor == GSR_GPU_VENDOR_NVIDIA) {
|
||||||
if(color_depth == GSR_COLOR_DEPTH_10_BITS)
|
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) {
|
} else if(codec_context->codec_id == AV_CODEC_ID_HEVC) {
|
||||||
if(color_depth == GSR_COLOR_DEPTH_10_BITS)
|
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
|
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
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_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);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -562,12 +564,12 @@ bool gsr_pipewire_audio_init(gsr_pipewire_audio *self) {
|
|||||||
// TODO: Error check
|
// TODO: Error check
|
||||||
pw_core_add_listener(self->core, &self->core_listener, &core_events, self);
|
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);
|
self->registry = pw_core_get_registry(self->core, PW_VERSION_REGISTRY, 0);
|
||||||
pw_registry_add_listener(self->registry, &self->registry_listener, ®istry_events, self);
|
pw_registry_add_listener(self->registry, &self->registry_listener, ®istry_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);
|
pw_thread_loop_unlock(self->thread_loop);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -595,6 +597,9 @@ void gsr_pipewire_audio_deinit(gsr_pipewire_audio *self) {
|
|||||||
self->metadata_proxy = NULL;
|
self->metadata_proxy = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spa_hook_remove(&self->registry_listener);
|
||||||
|
spa_hook_remove(&self->core_listener);
|
||||||
|
|
||||||
if(self->core) {
|
if(self->core) {
|
||||||
pw_core_disconnect(self->core);
|
pw_core_disconnect(self->core);
|
||||||
self->core = NULL;
|
self->core = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user