You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.9 KiB
114 lines
2.9 KiB
#include <stdio.h>
|
|
#include <GL/freeglut.h>
|
|
#include <gtk/gtk.h>
|
|
#include <gdk/gdkx.h>
|
|
#include <obs/obs.h>
|
|
|
|
const int window_width = 1280;
|
|
const int window_height = 720;
|
|
Window xw;
|
|
|
|
void
|
|
print_obs_version_string()
|
|
{
|
|
const char* version = obs_get_version_string();
|
|
printf("OBS version: %s\n", version);
|
|
}
|
|
|
|
void
|
|
obs_render (void* param,
|
|
uint32_t cx,
|
|
uint32_t cy)
|
|
{
|
|
obs_render_main_texture ();
|
|
}
|
|
|
|
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));
|
|
xw = gdk_x11_window_get_xid (gtk_widget_get_window(window));
|
|
}
|
|
|
|
void
|
|
render_sources(GtkApplication* app)
|
|
{
|
|
GtkWidget* 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);
|
|
gtk_window_present (GTK_WINDOW(window));
|
|
}
|
|
|
|
int
|
|
main(int argc, char** argv)
|
|
{
|
|
GtkApplication* app;
|
|
obs_display_t* display;
|
|
int status;
|
|
|
|
app = gtk_application_new("xyz.dwayne.obs", G_APPLICATION_FLAGS_NONE);
|
|
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
|
|
|
|
print_obs_version_string();
|
|
|
|
if (!obs_initialized())
|
|
{
|
|
if (!obs_startup("en-US", NULL, NULL))
|
|
{
|
|
printf("Failed to start OBS...\n");
|
|
return 1;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
// struct gs_init_data info;
|
|
// info.cx = window_width;
|
|
// info.cy = window_height;
|
|
// info.window = NULL; // xw??
|
|
// info.format = GS_BGRA;
|
|
// info.zsformat = GS_ZS_NONE;
|
|
|
|
// display = obs_display_create (&info, 0);
|
|
// if (display == NULL)
|
|
// {
|
|
// printf("error creating display!\n");
|
|
// }
|
|
|
|
// obs_display_add_draw_callback (display, obs_render, NULL);
|
|
|
|
status = g_application_run (G_APPLICATION (app), argc, argv);
|
|
|
|
// obs_display_destroy (display);
|
|
obs_shutdown ();
|
|
g_object_unref (app);
|
|
|
|
return status;
|
|
}
|