Browse Source

added functions to get current audio/video output information

jp9000 12 years ago
parent
commit
ff47b3a2dc
5 changed files with 52 additions and 4 deletions
  1. 5 0
      libobs/media-io/video-io.c
  2. 1 0
      libobs/media-io/video-io.h
  3. 2 2
      libobs/obs-data.h
  4. 38 2
      libobs/obs.c
  5. 6 0
      libobs/obs.h

+ 5 - 0
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);

+ 1 - 0
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);

+ 2 - 2
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 {

+ 38 - 2
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)

+ 6 - 0
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
  *