diff --git a/libobs/media-io/video-io.c b/libobs/media-io/video-io.c index 4774e953232fb7ef4c170085dc7391392c1422a3..82d0821f43c07529f89be94379e965d0fb8cd880 100644 --- a/libobs/media-io/video-io.c +++ b/libobs/media-io/video-io.c @@ -133,6 +133,11 @@ fail: return VIDEO_OUTPUT_FAIL; } +const struct video_info *video_output_getinfo(video_t video) +{ + return &video->info; +} + void video_output_frame(video_t video, struct video_frame *frame) { pthread_mutex_lock(&video->data_mutex); diff --git a/libobs/media-io/video-io.h b/libobs/media-io/video-io.h index 6c2a703deec7d26247dc619ab8816345bf02aa5c..1b053ee0bd8354ca7d5030374c9488f42510c67b 100644 --- a/libobs/media-io/video-io.h +++ b/libobs/media-io/video-io.h @@ -74,6 +74,7 @@ struct video_info { EXPORT int video_output_open(video_t *video, media_t media, struct video_info *info); +EXPORT const struct video_info *video_output_getinfo(video_t video); EXPORT void video_output_frame(video_t video, struct video_frame *frame); EXPORT bool video_output_wait(video_t video); EXPORT uint64_t video_getframetime(video_t video); diff --git a/libobs/obs-data.h b/libobs/obs-data.h index de13aba3cbe130359ab0dae1ee9f55d5bdedf01f..c67ab2f96f5f1a53efbc3fd42828302ea37040be 100644 --- a/libobs/obs-data.h +++ b/libobs/obs-data.h @@ -57,8 +57,8 @@ struct obs_video { pthread_t video_thread; bool thread_initialized; - uint32_t output_width; - uint32_t output_height; + uint32_t base_width; + uint32_t base_height; }; struct obs_audio { diff --git a/libobs/obs.c b/libobs/obs.c index cb61957f3e0d3aa0e61d0d1dc9e142ca60ddf5da..4c7a6a7b2bf7db2a1e341eb42955a0c196c4c5a1 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -86,8 +86,8 @@ static bool obs_init_graphics(struct obs_video_info *ovi) int errorcode; make_gs_init_data(&graphics_data, ovi); - video->output_width = ovi->output_width; - video->output_height = ovi->output_height; + video->base_width = ovi->base_width; + video->base_height = ovi->base_height; errorcode = gs_create(&video->graphics, ovi->graphics_module, &graphics_data); @@ -339,6 +339,42 @@ bool obs_reset_audio(struct audio_info *ai) return true; } +bool obs_get_video_info(struct obs_video_info *ovi) +{ + struct obs_video *video = &obs->video; + const struct video_info *info; + + if (!video->graphics) + return false; + + info = video_output_getinfo(video->video); + + memset(ovi, 0, sizeof(struct obs_video_info)); + ovi->base_width = video->base_width; + ovi->base_height = video->base_height; + ovi->output_width = info->width; + ovi->output_height = info->height; + ovi->output_format = info->type; + ovi->fps_num = info->fps_num; + ovi->fps_den = info->fps_den; + + return true; +} + +bool obs_get_audio_info(struct audio_info *ai) +{ + struct obs_audio *audio = &obs->audio; + const struct audio_info *info; + + if (!audio->audio) + return false; + + info = audio_output_getinfo(audio->audio); + memcpy(ai, info, sizeof(struct audio_info)); + + return true; +} + bool obs_enum_input_types(size_t idx, const char **name) { if (idx >= obs->input_types.num) diff --git a/libobs/obs.h b/libobs/obs.h index ccdc066683a2ea965a61e8c6035b8c3b5df59790..a884e5189edbcdc0291cb97b7b9ca03dbb5a9ad7 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -170,6 +170,12 @@ EXPORT bool obs_reset_video(struct obs_video_info *ovi); */ EXPORT bool obs_reset_audio(struct audio_info *ai); +/** Gets the current video settings, returns false if none */ +EXPORT bool obs_get_video_info(struct obs_video_info *ovi); + +/** Gets the current audio settings, returns false if none */ +EXPORT bool obs_get_audio_info(struct audio_info *ai); + /** * Loads a plugin module *