From c6e239afcd922232026973f2d4ddf90b1e926ad6 Mon Sep 17 00:00:00 2001 From: Dwayne Harris Date: Mon, 1 Nov 2021 10:22:58 -0400 Subject: [PATCH] WIP --- obs.c | 198 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 119 insertions(+), 79 deletions(-) diff --git a/obs.c b/obs.c index e41d450..22203dc 100644 --- a/obs.c +++ b/obs.c @@ -9,82 +9,120 @@ const int window_width = 1280; const int window_height = 720; obs_display_t *display; -const char * -get_version() +const char * go_get_version() { - sprintf (version, "Version: 0.0.1; OBS version: %s\n", obs_get_version_string ()); + sprintf(version, "Version: 0.0.1; OBS version: %s\n", obs_get_version_string()); return version; } -void -print_version_string() +void print_version_string() { - printf ("%s\n", get_version ()); + printf("%s\n", go_get_version()); } -void -obs_render (void *param, - uint32_t cx, - uint32_t cy) +static void obs_render(void *param, uint32_t cx, uint32_t cy) { - obs_render_main_texture (); + obs_render_main_texture(); } -void -render_input_types_window(GtkApplication *app, - GtkWidget *parent_window) +static bool enum_sources(void *param, obs_source_t *source) +{ + GtkWidget *box = param; + const char *source_name = obs_source_get_name(source); + uint32_t flags = obs_source_get_output_flags(source); + + if ((flags & OBS_SOURCE_VIDEO) != 0) + printf("video source!\n"); + + printf("source: %s\n", source_name); + gtk_container_add(GTK_CONTAINER(box), gtk_label_new(source_name)); + return true; +} + +static void render_sources_window(GtkApplication *app, GtkWidget *parent_window) { GtkWidget *window, *box; - const char *input_type; + const char *t; - printf("rendering input types\n"); + printf("rendering sources\n"); - window = gtk_application_window_new (app); - gtk_window_set_title (GTK_WINDOW (window), "OBS - Sources"); - gtk_window_set_default_size (GTK_WINDOW (window), 500, 500); + window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "OBS - Sources"); + gtk_window_set_default_size(GTK_WINDOW(window), 500, 500); + + box = gtk_list_box_new(); - box = gtk_list_box_new (); - for (int i = 0; obs_enum_input_types (i, &input_type); ++i) + for (int i = 0; obs_enum_source_types(i, &t); ++i) { - printf("input type: %s\n", input_type); - gtk_container_add (GTK_CONTAINER (box), gtk_label_new (input_type)); + printf("source type: %s\n", t); + //gtk_container_add(GTK_CONTAINER(box), gtk_label_new(t)); } - gtk_container_add ( GTK_CONTAINER (window), box); - gtk_widget_show_all (box); - gtk_window_present (GTK_WINDOW (window)); + for (int i = 0; obs_enum_input_types(i, &t); ++i) + { + printf("input type: %s\n", t); + //gtk_container_add(GTK_CONTAINER(box), gtk_label_new(t)); + } + + obs_enum_sources(enum_sources, box); + + gtk_container_add(GTK_CONTAINER(window), box); + gtk_widget_show_all(box); + gtk_window_present(GTK_WINDOW(window)); } -static void -activate (GtkApplication *app, - gpointer user_data) +static void activate(GtkApplication *app, gpointer user_data) { - GtkWidget *window = gtk_application_window_new (app); - gtk_window_set_title (GTK_WINDOW (window), "OBS"); - gtk_window_set_default_size (GTK_WINDOW (window), window_width, window_height); - gtk_window_present (GTK_WINDOW (window)); + GtkWidget *window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "OBS"); + gtk_window_set_default_size(GTK_WINDOW(window), window_width, window_height); + gtk_window_present(GTK_WINDOW(window)); struct gs_init_data info; info.cx = window_width; info.cy = window_height; - info.window.id = gdk_x11_window_get_xid (gtk_widget_get_window (window)); - info.window.display = gdk_window_get_display (gtk_widget_get_window (window)); + info.window.id = gdk_x11_window_get_xid(gtk_widget_get_window(window)); + info.window.display = gdk_window_get_display(gtk_widget_get_window(window)); info.format = GS_BGRA; info.zsformat = GS_ZS_NONE; - display = obs_display_create (&info, 0); + display = obs_display_create(&info, 0); if (display == NULL) - { - printf("error creating display!\n"); - } + { + printf("error creating display!\n"); + } + + obs_display_add_draw_callback(display, obs_render, NULL); + + //const char *v_id = obs_get_latest_input_type_id(); + obs_data_t *settings = obs_data_create(); + obs_data_set_default_int(settings, "input", -1); + obs_data_set_default_int(settings, "pixelformat", -1); + obs_data_set_default_int(settings, "standard", -1); + obs_data_set_default_int(settings, "dv_timing", -1); + obs_data_set_default_int(settings, "resolution", -1); + obs_data_set_default_int(settings, "framerate", -1); + obs_data_set_default_int(settings, "color_range", VIDEO_RANGE_DEFAULT); + obs_data_set_default_bool(settings, "buffering", true); + obs_data_set_default_bool(settings, "auto_reset", false); + obs_data_set_default_int(settings, "timeout_frames", 5); + + //obs_data_set_string(settings, "local_file", ""); + obs_source_t *source = obs_source_create("souce1", "Source", NULL, NULL); + if (source == NULL) + printf("couldn't create source"); + + obs_scene_t *scene = obs_scene_create("scene1"); + if (scene == NULL) + printf("couldn't create scene"); + + obs_scene_add(scene, source); + obs_set_output_source(0, obs_scene_get_source(scene)); - obs_display_add_draw_callback (display, obs_render, NULL); - render_input_types_window (app, window); + render_sources_window(app, window); } -int -main(int argc, - char **argv) +int main(int argc, char **argv) { GtkApplication* app; int status; @@ -95,47 +133,49 @@ main(int argc, print_version_string(); if (!obs_initialized()) + { + if (!obs_startup("en-US", NULL, NULL)) { - if (!obs_startup("en-US", NULL, NULL)) - { - printf("Failed to start OBS...\n"); - return 1; - } - - // This just initializes OpenGL - glutInit(&argc, argv); - - struct obs_video_info v; - struct obs_audio_info a; - - v.graphics_module = "libobs-opengl.so.0"; - v.fps_num = 30000; - v.fps_den = 1001; - v.base_width = window_width; - v.base_height = window_height; - v.output_width = window_width; - v.output_height = window_height; - v.output_format = VIDEO_FORMAT_NV12; - v.adapter = 0; - v.gpu_conversion = true; - v.colorspace = VIDEO_CS_601; - v.range = VIDEO_RANGE_PARTIAL; - v.scale_type = OBS_SCALE_BICUBIC; - - a.samples_per_sec = 44100; - a.speakers = SPEAKERS_STEREO; - - obs_reset_video (&v); - obs_reset_audio (&a); + printf("Failed to start OBS...\n"); + return 1; } - status = g_application_run (G_APPLICATION (app), argc, argv); + obs_load_all_modules(); + + // This just initializes OpenGL + glutInit(&argc, argv); + + struct obs_video_info v; + struct obs_audio_info a; + + v.graphics_module = "libobs-opengl.so.0"; + v.fps_num = 30000; + v.fps_den = 1001; + v.base_width = window_width; + v.base_height = window_height; + v.output_width = window_width; + v.output_height = window_height; + v.output_format = VIDEO_FORMAT_NV12; + v.adapter = 0; + v.gpu_conversion = true; + v.colorspace = VIDEO_CS_601; + v.range = VIDEO_RANGE_PARTIAL; + v.scale_type = OBS_SCALE_BICUBIC; + + a.samples_per_sec = 44100; + a.speakers = SPEAKERS_STEREO; + + obs_reset_video(&v); + obs_reset_audio(&a); + } + + status = g_application_run(G_APPLICATION(app), argc, argv); if (display != NULL) - obs_display_destroy (display); + obs_display_destroy(display); - obs_shutdown (); - g_object_unref (app); + obs_shutdown(); + g_object_unref(app); return status; }