|
|
@ -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; |
|
|
|
} |