浏览代码

cleaned up main internal data structure design, changed to reference counting for sources to ensure safe destruction of source objects from all parts of the system, added some service-related stuff for testing

jp9000 12 年之前
父节点
当前提交
409b011a8e

+ 3 - 3
libobs-d3d11/d3d11-subsystem.cpp

@@ -32,7 +32,7 @@ static inline void make_swap_desc(DXGI_SWAP_CHAIN_DESC &desc,
 	desc.BufferDesc.Width  = data->cx;
 	desc.BufferDesc.Width  = data->cx;
 	desc.BufferDesc.Height = data->cy;
 	desc.BufferDesc.Height = data->cy;
 	desc.BufferUsage       = DXGI_USAGE_RENDER_TARGET_OUTPUT;
 	desc.BufferUsage       = DXGI_USAGE_RENDER_TARGET_OUTPUT;
-	desc.OutputWindow      = (HWND)data->hwnd;
+	desc.OutputWindow      = (HWND)data->window.hwnd;
 	desc.SampleDesc.Count  = 1;
 	desc.SampleDesc.Count  = 1;
 	desc.Windowed          = true;
 	desc.Windowed          = true;
 }
 }
@@ -109,7 +109,7 @@ void gs_swap_chain::Init(gs_init_data *data)
 gs_swap_chain::gs_swap_chain(gs_device *device, gs_init_data *data)
 gs_swap_chain::gs_swap_chain(gs_device *device, gs_init_data *data)
 	: device     (device),
 	: device     (device),
 	  numBuffers (data->num_backbuffers),
 	  numBuffers (data->num_backbuffers),
-	  hwnd       ((HWND)data->hwnd)
+	  hwnd       ((HWND)data->window.hwnd)
 {
 {
 	HRESULT hr;
 	HRESULT hr;
 	DXGI_SWAP_CHAIN_DESC swapDesc;
 	DXGI_SWAP_CHAIN_DESC swapDesc;
@@ -182,7 +182,7 @@ void gs_device::InitDevice(gs_init_data *data, IDXGIAdapter *adapter)
 			(uint32_t)levelUsed);
 			(uint32_t)levelUsed);
 
 
 	defaultSwap.device     = this;
 	defaultSwap.device     = this;
-	defaultSwap.hwnd       = (HWND)data->hwnd;
+	defaultSwap.hwnd       = (HWND)data->window.hwnd;
 	defaultSwap.numBuffers = data->num_backbuffers;
 	defaultSwap.numBuffers = data->num_backbuffers;
 	defaultSwap.Init(data);
 	defaultSwap.Init(data);
 }
 }

+ 3 - 3
libobs-opengl/gl-cocoa.m

@@ -92,7 +92,7 @@ static NSOpenGLContext *gl_context_create(struct gs_init_data *info)
 		return NULL;
 		return NULL;
 	}
 	}
 
 
-	[context setView:info->view];
+	[context setView:info->window.view];
 
 
 	return context;
 	return context;
 }
 }
@@ -200,13 +200,13 @@ struct gl_windowinfo *gl_windowinfo_create(struct gs_init_data *info)
 	if(!info)
 	if(!info)
 		return NULL;
 		return NULL;
 
 
-	if(!info->view)
+	if(!info->window.view)
 		return NULL;
 		return NULL;
 
 
 	struct gl_windowinfo *wi = bmalloc(sizeof(struct gl_windowinfo));
 	struct gl_windowinfo *wi = bmalloc(sizeof(struct gl_windowinfo));
 	memset(wi, 0, sizeof(struct gl_windowinfo));
 	memset(wi, 0, sizeof(struct gl_windowinfo));
 
 
-	wi->view = info->view;
+	wi->view = info->window.view;
 
 
 	return wi;
 	return wi;
 }
 }

+ 1 - 1
libobs-opengl/gl-windows.c

@@ -350,7 +350,7 @@ static struct gl_windowinfo *gl_windowinfo_bare(struct gs_init_data *info)
 	struct gl_windowinfo *wi = bmalloc(sizeof(struct gl_windowinfo));
 	struct gl_windowinfo *wi = bmalloc(sizeof(struct gl_windowinfo));
 	memset(wi, 0, sizeof(struct gl_windowinfo));
 	memset(wi, 0, sizeof(struct gl_windowinfo));
 
 
-	wi->hwnd = info->hwnd;
+	wi->hwnd = info->window.hwnd;
 	wi->hdc  = GetDC(wi->hwnd);
 	wi->hdc  = GetDC(wi->hwnd);
 	if (!wi->hdc) {
 	if (!wi->hdc) {
 		blog(LOG_ERROR, "Unable to get device context from window");
 		blog(LOG_ERROR, "Unable to get device context from window");

+ 7 - 2
libobs/graphics/graphics.h

@@ -405,18 +405,23 @@ EXPORT texture_t texrender_gettexture(texrender_t texrender);
 /* ---------------- */
 /* ---------------- */
 /* global functions */
 /* global functions */
 
 
-#define GS_SUCCESS              0
+#define GS_SUCCESS               0
 #define GS_ERROR_MODULENOTFOUND -1
 #define GS_ERROR_MODULENOTFOUND -1
 #define GS_ERROR_FAIL           -2
 #define GS_ERROR_FAIL           -2
 
 
-struct gs_init_data {
+struct gs_window {
 #if defined(_WIN32)
 #if defined(_WIN32)
 	void                    *hwnd;
 	void                    *hwnd;
 #elif defined(__APPLE__)
 #elif defined(__APPLE__)
 	__unsafe_unretained id  view;
 	__unsafe_unretained id  view;
 #elif defined(__posix__)
 #elif defined(__posix__)
+	int bla;
 	/* TODO */
 	/* TODO */
 #endif
 #endif
+};
+
+struct gs_init_data {
+	struct gs_window        window;
 	uint32_t                cx, cy;
 	uint32_t                cx, cy;
 	uint32_t                num_backbuffers;
 	uint32_t                num_backbuffers;
 	enum gs_color_format    format;
 	enum gs_color_format    format;

+ 51 - 39
libobs/obs-data.h

@@ -33,52 +33,64 @@
 /*#include "obs-service.h"*/
 /*#include "obs-service.h"*/
 
 
 #define NUM_TEXTURES 2
 #define NUM_TEXTURES 2
+#define MAX_CHANNELS 32
 
 
 struct obs_display {
 struct obs_display {
-	swapchain_t  swap; /* can be NULL if just sound */
-	obs_source_t source;
+	swapchain_t                 swap; /* can be NULL if just sound */
+	obs_source_t                channels[MAX_CHANNELS];
+
 	/* TODO: sound output target */
 	/* TODO: sound output target */
 };
 };
 
 
+/* ------------------------------------------------------------------------- */
+
+struct obs_video {
+	graphics_t                  graphics;
+	stagesurf_t                 copy_surfaces[NUM_TEXTURES];
+	effect_t                    default_effect;
+	bool                        textures_copied[NUM_TEXTURES];
+	bool                        copy_mapped;
+	int                         cur_texture;
+
+	video_t                     video;
+	pthread_t                   video_thread;
+	bool                        thread_initialized;
+
+	uint32_t                    output_width;
+	uint32_t                    output_height;
+};
+
+struct obs_audio {
+	/* TODO: audio subsystem */
+	audio_t                     audio;
+};
+
 struct obs_data {
 struct obs_data {
-	DARRAY(struct obs_module)       modules;
-
-	DARRAY(struct source_info)      input_types;
-	DARRAY(struct source_info)      filter_types;
-	DARRAY(struct source_info)      transition_types;
-	DARRAY(struct output_info)      output_types;
-	/*DARRAY(struct service_info)     service_types;*/
-
-	DARRAY(struct obs_display*)     displays;
-	DARRAY(struct obs_source*)      sources;
-
-	/* graphics */
-	graphics_t  graphics;
-	stagesurf_t copy_surfaces[NUM_TEXTURES];
-	effect_t    default_effect;
-	bool        textures_copied[NUM_TEXTURES];
-	bool        copy_mapped;
-	int         cur_texture;
-
-	/* TODO: sound output stuff */
-
-	/* media */
-	media_t  media;
-	video_t  video;
-	audio_t  audio;
-
-	uint32_t output_width;
-	uint32_t output_height;
-
-	/* threading */
-	pthread_t       video_thread;
-	bool            thread_initialized;
-	pthread_mutex_t source_list_mutex;
-	pthread_mutex_t display_list_mutex;
-
-	obs_source_t primary_source;
+	DARRAY(struct obs_display*) displays;
+	DARRAY(struct obs_source*)  sources;
+
+	obs_source_t                channels[MAX_CHANNELS];
+	pthread_mutex_t             sources_mutex;
+	pthread_mutex_t             displays_mutex;
+};
+
+struct obs_subsystem {
+	DARRAY(struct obs_module)   modules;
+	DARRAY(struct source_info)  input_types;
+	DARRAY(struct source_info)  filter_types;
+	DARRAY(struct source_info)  transition_types;
+	DARRAY(struct output_info)  output_types;
+	DARRAY(struct service_info) service_types;
+
+	media_t                     media;
+
+	/* segmented into multiple sub-structures to keep things a bit more
+	 * clean and organized */
+	struct obs_video            video;
+	struct obs_audio            audio;
+	struct obs_data             data;
 };
 };
 
 
-extern struct obs_data *obs;
+extern struct obs_subsystem *obs;
 
 
 extern void *obs_video_thread(void *param);
 extern void *obs_video_thread(void *param);

+ 24 - 4
libobs/obs-display.c

@@ -37,17 +37,37 @@ obs_display_t obs_display_create(struct gs_init_data *graphics_data)
 void obs_display_destroy(obs_display_t display)
 void obs_display_destroy(obs_display_t display)
 {
 {
 	if (display) {
 	if (display) {
+		size_t i;
+
+		pthread_mutex_lock(&obs->data.displays_mutex);
+		da_erase_item(obs->data.displays, &display);
+		pthread_mutex_unlock(&obs->data.displays_mutex);
+
+		for (i = 0; i < MAX_CHANNELS; i++)
+			obs_source_release(display->channels[i]);
+
 		swapchain_destroy(display->swap);
 		swapchain_destroy(display->swap);
 		bfree(display);
 		bfree(display);
 	}
 	}
 }
 }
 
 
-obs_source_t obs_display_getsource(obs_display_t display)
+obs_source_t obs_display_getsource(obs_display_t display, uint32_t channel)
 {
 {
-	return display->source;
+	assert(channel < MAX_CHANNELS);
+	return display->channels[channel];
 }
 }
 
 
-void obs_display_setsource(obs_display_t display, obs_source_t source)
+void obs_display_setsource(obs_display_t display, uint32_t channel,
+		obs_source_t source)
 {
 {
-	display->source = source;
+	struct obs_source *prev_source;
+	assert(channel < MAX_CHANNELS);
+
+	prev_source = display->channels[channel];
+	display->channels[channel] = source;
+
+	if (source)
+		obs_source_addref(source);
+	if (prev_source)
+		obs_source_release(prev_source);
 }
 }

+ 19 - 3
libobs/obs-scene.c

@@ -38,8 +38,12 @@ static void scene_destroy(void *data)
 	struct obs_scene *scene = data;
 	struct obs_scene *scene = data;
 	size_t i;
 	size_t i;
 
 
-	for (i = 0; i < scene->items.num; i++)
-		bfree(scene->items.array[i]);
+	for (i = 0; i < scene->items.num; i++) {
+		struct obs_scene_item *item = scene->items.array[i];
+		if (item->source)
+			obs_source_release(item->source);
+		bfree(item);
+	}
 
 
 	da_free(scene->items);
 	da_free(scene->items);
 	bfree(scene);
 	bfree(scene);
@@ -58,6 +62,12 @@ static void scene_video_render(void *data)
 	for (i = scene->items.num; i > 0; i--) {
 	for (i = scene->items.num; i > 0; i--) {
 		struct obs_scene_item *item = scene->items.array[i-1];
 		struct obs_scene_item *item = scene->items.array[i-1];
 
 
+		if (obs_source_removed(item->source)) {
+			obs_source_release(item->source);
+			da_erase(scene->items, i--);
+			continue;
+		}
+
 		gs_matrix_push();
 		gs_matrix_push();
 		gs_matrix_translate3f(item->origin.x, item->origin.y, 0.0f);
 		gs_matrix_translate3f(item->origin.x, item->origin.y, 0.0f);
 		gs_matrix_scale3f(item->scale.x, item->scale.y, 1.0f);
 		gs_matrix_scale3f(item->scale.x, item->scale.y, 1.0f);
@@ -136,7 +146,7 @@ obs_scene_t obs_scene_create(void)
 void obs_scene_destroy(obs_scene_t scene)
 void obs_scene_destroy(obs_scene_t scene)
 {
 {
 	if (scene)
 	if (scene)
-		obs_source_destroy(scene->source);
+		obs_source_release(scene->source);
 }
 }
 
 
 obs_source_t obs_scene_getsource(obs_scene_t scene)
 obs_source_t obs_scene_getsource(obs_scene_t scene)
@@ -153,6 +163,9 @@ obs_sceneitem_t obs_scene_add(obs_scene_t scene, obs_source_t source)
 	item->parent  = scene;
 	item->parent  = scene;
 	vec2_set(&item->scale, 1.0f, 1.0f);
 	vec2_set(&item->scale, 1.0f, 1.0f);
 
 
+	if (source)
+		obs_source_addref(source);
+
 	da_push_back(scene->items, &item);
 	da_push_back(scene->items, &item);
 	return item;
 	return item;
 }
 }
@@ -160,6 +173,9 @@ obs_sceneitem_t obs_scene_add(obs_scene_t scene, obs_source_t source)
 void obs_sceneitem_destroy(obs_sceneitem_t item)
 void obs_sceneitem_destroy(obs_sceneitem_t item)
 {
 {
 	if (item) {
 	if (item) {
+		if (item->source)
+			obs_source_release(item->source);
+
 		da_erase_item(item->parent->items, item);
 		da_erase_item(item->parent->items, item);
 		bfree(item);
 		bfree(item);
 	}
 	}

+ 6 - 1
libobs/obs-service.h

@@ -20,10 +20,15 @@
 struct service_data;
 struct service_data;
 
 
 struct service_info {
 struct service_info {
+	const char *(*getname)(const char *locale);
+
 	void *(*create)(const char *settings, struct service_data *service);
 	void *(*create)(const char *settings, struct service_data *service);
 	void (*destroy)(void *data);
 	void (*destroy)(void *data);
 	void (*config)(void *data, const char *settings);
 	void (*config)(void *data, const char *settings);
-	
+
+	/* optional */
+	const char *(*getdata)(const char *attribute);
+
 	/* get stream url/key */
 	/* get stream url/key */
 	/* get (viewers/etc) */
 	/* get (viewers/etc) */
 	/* send (current game/title/activate commercial/etc) */
 	/* send (current game/title/activate commercial/etc) */

+ 61 - 44
libobs/obs-source.c

@@ -21,6 +21,8 @@
 #include "obs.h"
 #include "obs.h"
 #include "obs-data.h"
 #include "obs-data.h"
 
 
+static void obs_source_destroy(obs_source_t source);
+
 bool get_source_info(void *module, const char *module_name,
 bool get_source_info(void *module, const char *module_name,
 		const char *source_name, struct source_info *info)
 		const char *source_name, struct source_info *info)
 {
 {
@@ -88,6 +90,7 @@ bool obs_source_init(struct obs_source *source, const char *settings,
 {
 {
 	uint32_t flags = info->get_output_flags(source->data);
 	uint32_t flags = info->get_output_flags(source->data);
 
 
+	source->refs = 1;
 	pthread_mutex_init_value(&source->filter_mutex);
 	pthread_mutex_init_value(&source->filter_mutex);
 	pthread_mutex_init_value(&source->video_mutex);
 	pthread_mutex_init_value(&source->video_mutex);
 	pthread_mutex_init_value(&source->audio_mutex);
 	pthread_mutex_init_value(&source->audio_mutex);
@@ -102,7 +105,7 @@ bool obs_source_init(struct obs_source *source, const char *settings,
 		return false;
 		return false;
 
 
 	if (flags & SOURCE_AUDIO) {
 	if (flags & SOURCE_AUDIO) {
-		source->audio_line = audio_output_createline(obs->audio);
+		source->audio_line = audio_output_createline(obs->audio.audio);
 		if (!source->audio_line) {
 		if (!source->audio_line) {
 			blog(LOG_ERROR, "Failed to create audio line for "
 			blog(LOG_ERROR, "Failed to create audio line for "
 			                "source");
 			                "source");
@@ -110,11 +113,6 @@ bool obs_source_init(struct obs_source *source, const char *settings,
 		}
 		}
 	}
 	}
 
 
-	source->valid = true;
-	pthread_mutex_lock(&obs->source_list_mutex);
-	da_push_back(obs->sources, &source);
-	pthread_mutex_unlock(&obs->source_list_mutex);
-
 	return true;
 	return true;
 }
 }
 
 
@@ -158,47 +156,64 @@ fail:
 	return NULL;
 	return NULL;
 }
 }
 
 
-void obs_source_destroy(obs_source_t source)
+static void obs_source_destroy(obs_source_t source)
 {
 {
-	if (source) {
-		size_t i;
-		if (source->filter_parent)
-			obs_source_filter_remove(source->filter_parent, source);
+	size_t i;
 
 
-		for (i = 0; i < source->filters.num; i++)
-			obs_source_destroy(source->filters.array[i]);
+	if (source->filter_parent)
+		obs_source_filter_remove(source->filter_parent, source);
 
 
-		if (source->valid) {
-			pthread_mutex_lock(&obs->source_list_mutex);
-			da_erase_item(obs->sources, &source);
-			pthread_mutex_unlock(&obs->source_list_mutex);
-		}
+	for (i = 0; i < source->filters.num; i++)
+		obs_source_release(source->filters.array[i]);
 
 
-		for (i = 0; i < source->audio_wait_buffer.num; i++)
-			audiobuf_free(source->audio_wait_buffer.array+i);
-		for (i = 0; i < source->video_frames.num; i++)
-			source_frame_destroy(source->video_frames.array[i]);
+	for (i = 0; i < source->audio_wait_buffer.num; i++)
+		audiobuf_free(source->audio_wait_buffer.array+i);
+	for (i = 0; i < source->video_frames.num; i++)
+		source_frame_destroy(source->video_frames.array[i]);
 
 
-		gs_entercontext(obs->graphics);
-		texture_destroy(source->output_texture);
-		gs_leavecontext();
+	gs_entercontext(obs->video.graphics);
+	texture_destroy(source->output_texture);
+	gs_leavecontext();
 
 
-		if (source->data)
-			source->callbacks.destroy(source->data);
+	if (source->data)
+		source->callbacks.destroy(source->data);
 
 
-		bfree(source->audio_data.data);
-		audio_line_destroy(source->audio_line);
-		audio_resampler_destroy(source->resampler);
-
-		da_free(source->video_frames);
-		da_free(source->audio_wait_buffer);
-		da_free(source->filters);
-		pthread_mutex_destroy(&source->filter_mutex);
-		pthread_mutex_destroy(&source->audio_mutex);
-		pthread_mutex_destroy(&source->video_mutex);
-		dstr_free(&source->settings);
-		bfree(source);
-	}
+	bfree(source->audio_data.data);
+	audio_line_destroy(source->audio_line);
+	audio_resampler_destroy(source->resampler);
+
+	da_free(source->video_frames);
+	da_free(source->audio_wait_buffer);
+	da_free(source->filters);
+	pthread_mutex_destroy(&source->filter_mutex);
+	pthread_mutex_destroy(&source->audio_mutex);
+	pthread_mutex_destroy(&source->video_mutex);
+	dstr_free(&source->settings);
+	bfree(source);
+}
+
+void obs_source_addref(obs_source_t source)
+{
+	assert(source != NULL);
+	if (!source)
+		return;
+
+	++source->refs;
+}
+
+void obs_source_release(obs_source_t source)
+{
+	assert(source != NULL);
+	if (!source)
+		return;
+
+	if (--source->refs == 0)
+		obs_source_destroy(source);
+}
+
+bool obs_source_removed(obs_source_t source)
+{
+	return source->removed;
 }
 }
 
 
 uint32_t obs_source_get_output_flags(obs_source_t source)
 uint32_t obs_source_get_output_flags(obs_source_t source)
@@ -394,7 +409,7 @@ static bool upload_frame(texture_t tex, const struct source_frame *frame)
 
 
 static void obs_source_draw_texture(texture_t tex, struct source_frame *frame)
 static void obs_source_draw_texture(texture_t tex, struct source_frame *frame)
 {
 {
-	effect_t    effect = obs->default_effect;
+	effect_t    effect = obs->video.default_effect;
 	bool        yuv   = is_yuv(frame->format);
 	bool        yuv   = is_yuv(frame->format);
 	const char  *type = yuv ? "DrawYUVToRGB" : "DrawRGB";
 	const char  *type = yuv ? "DrawYUVToRGB" : "DrawRGB";
 	technique_t tech;
 	technique_t tech;
@@ -655,9 +670,11 @@ static inline struct filtered_audio *filter_async_audio(obs_source_t source,
 static inline void reset_resampler(obs_source_t source,
 static inline void reset_resampler(obs_source_t source,
 		const struct source_audio *audio)
 		const struct source_audio *audio)
 {
 {
-	const struct audio_info *obs_info = audio_output_getinfo(obs->audio);
+	const struct audio_info *obs_info;
 	struct resample_info output_info;
 	struct resample_info output_info;
 
 
+	obs_info = audio_output_getinfo(obs->audio.audio);
+
 	output_info.format           = obs_info->format;
 	output_info.format           = obs_info->format;
 	output_info.samples_per_sec  = obs_info->samples_per_sec;
 	output_info.samples_per_sec  = obs_info->samples_per_sec;
 	output_info.speakers         = obs_info->speakers;
 	output_info.speakers         = obs_info->speakers;
@@ -685,7 +702,7 @@ static inline void reset_resampler(obs_source_t source,
 static inline void copy_audio_data(obs_source_t source,
 static inline void copy_audio_data(obs_source_t source,
 		const void *data, uint32_t frames, uint64_t timestamp)
 		const void *data, uint32_t frames, uint64_t timestamp)
 {
 {
-	size_t blocksize = audio_output_blocksize(obs->audio);
+	size_t blocksize = audio_output_blocksize(obs->audio.audio);
 	size_t size = (size_t)frames * blocksize;
 	size_t size = (size_t)frames * blocksize;
 
 
 	/* ensure audio storage capacity */
 	/* ensure audio storage capacity */
@@ -731,7 +748,7 @@ void obs_source_output_audio(obs_source_t source,
 		const struct source_audio *audio)
 		const struct source_audio *audio)
 {
 {
 	uint32_t flags = obs_source_get_output_flags(source);
 	uint32_t flags = obs_source_get_output_flags(source);
-	size_t blocksize = audio_output_blocksize(obs->audio);
+	size_t blocksize = audio_output_blocksize(obs->audio.audio);
 	struct filtered_audio *output;
 	struct filtered_audio *output;
 
 
 	process_audio(source, audio);
 	process_audio(source, audio);

+ 9 - 2
libobs/obs-source.h

@@ -211,10 +211,17 @@ static inline void audiobuf_free(struct audiobuf *buf)
 }
 }
 
 
 struct obs_source {
 struct obs_source {
-	void                         *data; /* source-specific data */
+	volatile int                 refs;
+
+	/* source-specific data */
+	void                         *data;
 	struct source_info           callbacks;
 	struct source_info           callbacks;
 	struct dstr                  settings;
 	struct dstr                  settings;
-	bool                         valid;
+
+	/* used to indicate that the source has been removed and all
+	 * references to it should be released (not exactly how I would prefer
+	 * to handle things but it's the best option) */
+	bool                         removed;
 
 
 	/* async video and audio */
 	/* async video and audio */
 	bool                         timing_set;
 	bool                         timing_set;

+ 44 - 28
libobs/obs-video.c

@@ -26,12 +26,12 @@ static void tick_sources(uint64_t cur_time, uint64_t *last_time)
 	float seconds;
 	float seconds;
 
 
 	if (!last_time)
 	if (!last_time)
-		*last_time = cur_time - video_getframetime(obs->video);
+		*last_time = cur_time - video_getframetime(obs->video.video);
 	delta_time = cur_time - *last_time;
 	delta_time = cur_time - *last_time;
 	seconds = (float)((double)delta_time / 1000000000.0);
 	seconds = (float)((double)delta_time / 1000000000.0);
 
 
-	for (i = 0; i < obs->sources.num; i++)
-		obs_source_video_tick(obs->sources.array[i], seconds);
+	for (i = 0; i < obs->data.sources.num; i++)
+		obs_source_video_tick(obs->data.sources.array[i], seconds);
 
 
 	*last_time = cur_time;
 	*last_time = cur_time;
 }
 }
@@ -40,6 +40,7 @@ static inline void render_display(struct obs_display *display)
 {
 {
 	struct vec4 clear_color;
 	struct vec4 clear_color;
 	uint32_t width, height;
 	uint32_t width, height;
+	size_t i;
 
 
 	gs_load_swapchain(display ? display->swap : NULL);
 	gs_load_swapchain(display ? display->swap : NULL);
 
 
@@ -51,14 +52,27 @@ static inline void render_display(struct obs_display *display)
 			&clear_color, 1.0f, 0);
 			&clear_color, 1.0f, 0);
 
 
 	gs_enable_depthtest(false);
 	gs_enable_depthtest(false);
-	gs_enable_blending(false);
+	/* gs_enable_blending(false); */
 	gs_setcullmode(GS_NEITHER);
 	gs_setcullmode(GS_NEITHER);
 
 
 	gs_ortho(0.0f, (float)width, 0.0f, (float)height, -100.0f, 100.0f);
 	gs_ortho(0.0f, (float)width, 0.0f, (float)height, -100.0f, 100.0f);
 	gs_setviewport(0, 0, width, height);
 	gs_setviewport(0, 0, width, height);
 
 
-	if (obs->primary_source)
-		obs_source_video_render(obs->primary_source);
+	for (i = 0; i < MAX_CHANNELS; i++) {
+		struct obs_source **p_source;
+
+		p_source = (display) ? display->channels+i :
+		                       obs->data.channels+i;
+
+		if (*p_source) {
+			if ((*p_source)->removed) {
+				obs_source_release(*p_source);
+				*p_source = NULL;
+			} else {
+				obs_source_video_render(*p_source);
+			}
+		}
+	}
 
 
 	gs_endscene();
 	gs_endscene();
 	gs_present();
 	gs_present();
@@ -68,56 +82,58 @@ static inline void render_displays(void)
 {
 {
 	size_t i;
 	size_t i;
 
 
-	pthread_mutex_lock(&obs->display_list_mutex);
-
-	for (i = 0; i < obs->displays.num; i++) {
-		struct obs_display *display = obs->displays.array[i];
+	/* render extra displays/swaps */
+	pthread_mutex_lock(&obs->data.displays_mutex);
 
 
-		render_display(display);
-	}
+	for (i = 0; i < obs->data.displays.num; i++)
+		render_display(obs->data.displays.array[i]);
 
 
-	pthread_mutex_unlock(&obs->display_list_mutex);
+	pthread_mutex_unlock(&obs->data.displays_mutex);
 
 
+	/* render main display */
 	render_display(NULL);
 	render_display(NULL);
 }
 }
 
 
 static bool swap_frame(uint64_t timestamp)
 static bool swap_frame(uint64_t timestamp)
 {
 {
-	stagesurf_t last_surface = obs->copy_surfaces[obs->cur_texture];
+	struct obs_video *video = &obs->video;
+	stagesurf_t last_surface = video->copy_surfaces[video->cur_texture];
 	stagesurf_t surface;
 	stagesurf_t surface;
 	struct video_frame frame;
 	struct video_frame frame;
 
 
-	if (obs->copy_mapped) {
+	/* the last frame stays mapped until rendering starts with the next */
+	if (video->copy_mapped) {
 		stagesurface_unmap(last_surface);
 		stagesurface_unmap(last_surface);
-		obs->copy_mapped = false;
+		video->copy_mapped = false;
 	}
 	}
 
 
-	obs->textures_copied[obs->cur_texture] = true;
-	//gs_stage_texture(last_surface, NULL);
+	video->textures_copied[video->cur_texture] = true;
+	/* TODO: texture staging */
+	//gs_stage_texture(last_surface, );
 
 
-	if (++obs->cur_texture == NUM_TEXTURES)
-		obs->cur_texture = 0;
+	if (++video->cur_texture == NUM_TEXTURES)
+		video->cur_texture = 0;
 
 
-	if (obs->textures_copied[obs->cur_texture]) {
-		surface = obs->copy_surfaces[obs->cur_texture];
-		obs->copy_mapped = stagesurface_map(surface, &frame.data,
+	if (video->textures_copied[video->cur_texture]) {
+		surface = video->copy_surfaces[video->cur_texture];
+		video->copy_mapped = stagesurface_map(surface, &frame.data,
 				&frame.row_size);
 				&frame.row_size);
 
 
-		if (obs->copy_mapped) {
+		if (video->copy_mapped) {
 			frame.timestamp = timestamp;
 			frame.timestamp = timestamp;
-			video_output_frame(obs->video, &frame);
+			video_output_frame(video->video, &frame);
 		}
 		}
 	}
 	}
 
 
-	return obs->copy_mapped;
+	return video->copy_mapped;
 }
 }
 
 
 void *obs_video_thread(void *param)
 void *obs_video_thread(void *param)
 {
 {
 	uint64_t last_time = 0;
 	uint64_t last_time = 0;
 
 
-	while (video_output_wait(obs->video)) {
-		uint64_t cur_time = video_gettime(obs->video);
+	while (video_output_wait(obs->video.video)) {
+		uint64_t cur_time = video_gettime(obs->video.video);
 
 
 		gs_entercontext(obs_graphics());
 		gs_entercontext(obs_graphics());
 
 

+ 219 - 116
libobs/obs.c

@@ -19,40 +19,71 @@
 #include "obs-data.h"
 #include "obs-data.h"
 #include "obs-module.h"
 #include "obs-module.h"
 
 
-struct obs_data *obs = NULL;
+struct obs_subsystem *obs = NULL;
 
 
 extern char *find_libobs_data_file(const char *file);
 extern char *find_libobs_data_file(const char *file);
 
 
-static bool obs_init_graphics(const char *graphics_module,
-		struct gs_init_data *graphics_data, struct video_info *vi)
+static inline void make_gs_init_data(struct gs_init_data *gid,
+		struct obs_video_info *ovi)
 {
 {
-	int errorcode;
+	memcpy(&gid->window, &ovi->window, sizeof(struct gs_window));
+	gid->cx              = ovi->base_width;
+	gid->cy              = ovi->base_height;
+	gid->num_backbuffers = 2;
+	gid->format          = GS_RGBA;
+	gid->zsformat        = GS_ZS_NONE;
+	gid->adapter         = ovi->adapter;
+}
+
+static inline void make_video_info(struct video_info *vi,
+		struct obs_video_info *ovi)
+{
+	vi->name    = "video";
+	vi->type    = ovi->output_format;
+	vi->fps_num = ovi->fps_num;
+	vi->fps_den = ovi->fps_den;
+	vi->width   = ovi->output_width;
+	vi->height  = ovi->output_height;
+}
+
+static bool obs_init_graphics(struct obs_video_info *ovi)
+{
+	struct obs_video *video = &obs->video;
+	struct gs_init_data graphics_data;
 	bool success = true;
 	bool success = true;
+	int errorcode;
 	size_t i;
 	size_t i;
 
 
-	errorcode = gs_create(&obs->graphics, graphics_module, graphics_data);
+	make_gs_init_data(&graphics_data, ovi);
+	video->output_width  = ovi->output_width;
+	video->output_height = ovi->output_height;
+
+	errorcode = gs_create(&video->graphics, ovi->graphics_module,
+			&graphics_data);
 	if (errorcode != GS_SUCCESS) {
 	if (errorcode != GS_SUCCESS) {
 		if (errorcode == GS_ERROR_MODULENOTFOUND)
 		if (errorcode == GS_ERROR_MODULENOTFOUND)
 			blog(LOG_ERROR, "Could not find graphics module '%s'",
 			blog(LOG_ERROR, "Could not find graphics module '%s'",
-					graphics_module);
+					ovi->graphics_module);
 		return false;
 		return false;
 	}
 	}
 
 
-	gs_entercontext(obs->graphics);
+	gs_entercontext(video->graphics);
 
 
 	for (i = 0; i < NUM_TEXTURES; i++) {
 	for (i = 0; i < NUM_TEXTURES; i++) {
-		obs->copy_surfaces[i] = gs_create_stagesurface(vi->width,
-				vi->height, graphics_data->format);
-		if (!obs->copy_surfaces[i])
+		video->copy_surfaces[i] = gs_create_stagesurface(
+				ovi->output_width, ovi->output_height,
+				graphics_data.format);
+
+		if (!video->copy_surfaces[i])
 			success = false;
 			success = false;
 	}
 	}
 
 
 	if (success) {
 	if (success) {
 		char *filename = find_libobs_data_file("default.effect");
 		char *filename = find_libobs_data_file("default.effect");
-		obs->default_effect = gs_create_effect_from_file( filename,
+		video->default_effect = gs_create_effect_from_file(filename,
 				NULL);
 				NULL);
 		bfree(filename);
 		bfree(filename);
-		if (!obs->default_effect)
+		if (!video->default_effect)
 			success = false;
 			success = false;
 	}
 	}
 
 
@@ -60,114 +91,179 @@ static bool obs_init_graphics(const char *graphics_module,
 	return success;
 	return success;
 }
 }
 
 
-static bool obs_init_media(struct video_info *vi, struct audio_info *ai)
+static bool obs_init_video(struct obs_video_info *ovi)
 {
 {
-	obs->media = media_open();
-	if (!obs->media)
+	struct obs_video *video = &obs->video;
+	struct video_info vi;
+	int errorcode;
+
+	memset(video, 0, sizeof(struct obs_video));
+
+	if (!obs_init_graphics(ovi))
 		return false;
 		return false;
 
 
-	if (!obs_reset_video(vi))
+	make_video_info(&vi, ovi);
+	errorcode = video_output_open(&video->video, obs->media, &vi);
+
+	if (errorcode != VIDEO_OUTPUT_SUCCESS) {
+		if (errorcode == VIDEO_OUTPUT_INVALIDPARAM)
+			blog(LOG_ERROR, "Invalid video parameters specified");
+		else
+			blog(LOG_ERROR, "Could not open video output");
+
 		return false;
 		return false;
-	if (!obs_reset_audio(ai))
+	}
+
+	errorcode = pthread_create(&video->video_thread, NULL,
+			obs_video_thread, obs);
+	if (errorcode != 0)
 		return false;
 		return false;
 
 
+	video->thread_initialized = true;
 	return true;
 	return true;
 }
 }
 
 
-static bool obs_init_threading(void)
+static void obs_free_video(void)
 {
 {
-	if (pthread_mutex_init(&obs->source_list_mutex, NULL) != 0)
-		return false;
-	if (pthread_mutex_init(&obs->display_list_mutex, NULL) != 0)
-		return false;
-	if (pthread_create(&obs->video_thread, NULL, obs_video_thread,
-				obs) != 0)
-		return false;
+	struct obs_video *video = &obs->video;
+	size_t i;
 
 
-	obs->thread_initialized = true;
-	return true;
+	if (video->video) {
+		void *thread_retval;
+
+		video_output_stop(video->video);
+		if (video->thread_initialized)
+			pthread_join(video->video_thread, &thread_retval);
+
+		video_output_close(video->video);
+	}
+
+	if (video->graphics) {
+		int cur_texture = video->cur_texture;
+		gs_entercontext(video->graphics);
+
+		if (video->copy_mapped)
+			stagesurface_unmap(video->copy_surfaces[cur_texture]);
+
+		for (i = 0; i < NUM_TEXTURES; i++)
+			stagesurface_destroy(video->copy_surfaces[i]);
+
+		effect_destroy(video->default_effect);
+
+		gs_leavecontext();
+
+		gs_destroy(video->graphics);
+	}
+
+	memset(video, 0, sizeof(struct obs_video));
 }
 }
 
 
-static bool obs_init(const char *graphics_module,
-		struct gs_init_data *graphics_data,
-		struct video_info *vi, struct audio_info *ai)
+static bool obs_init_audio(struct audio_info *ai)
 {
 {
-	obs = bmalloc(sizeof(struct obs_data));
+	struct obs_audio *audio = &obs->audio;
+	int errorcode;
 
 
-	memset(obs, 0, sizeof(struct obs_data));
-	pthread_mutex_init_value(&obs->source_list_mutex);
-	pthread_mutex_init_value(&obs->display_list_mutex);
+	/* TODO: sound subsystem */
 
 
-	if (!obs_init_graphics(graphics_module, graphics_data, vi))
-		return false;
-	if (!obs_init_media(vi, ai))
+	errorcode = audio_output_open(&audio->audio, obs->media, ai);
+	if (errorcode == AUDIO_OUTPUT_SUCCESS)
+		return true;
+	else if (errorcode= AUDIO_OUTPUT_INVALIDPARAM)
+		blog(LOG_ERROR, "Invalid audio parameters specified");
+	else
+		blog(LOG_ERROR, "Could not open audio output");
+
+	return false;
+}
+
+static void obs_free_audio(void)
+{
+	struct obs_audio *audio = &obs->audio;
+	if (audio->audio)
+		audio_output_close(audio->audio);
+
+	memset(audio, 0, sizeof(struct obs_audio));
+}
+
+static bool obs_init_data(void)
+{
+	struct obs_data *data = &obs->data;
+
+	pthread_mutex_init_value(&obs->data.displays_mutex);
+
+	if (pthread_mutex_init(&data->sources_mutex, NULL) != 0)
 		return false;
 		return false;
-	if (!obs_init_threading())
+	if (pthread_mutex_init(&data->displays_mutex, NULL) != 0)
 		return false;
 		return false;
 
 
 	return true;
 	return true;
 }
 }
 
 
-static inline void obs_free_graphics(void)
+static void obs_free_data(void)
 {
 {
+	struct obs_data *data = &obs->data;
 	size_t i;
 	size_t i;
-	if (!obs->graphics)
-		return;
 
 
-	gs_entercontext(obs->graphics);
+	for (i = 0; i < MAX_CHANNELS; i++)
+		obs_set_output_source(i, NULL);
+
+	while (data->displays.num)
+		obs_display_destroy(data->displays.array[0]);
 
 
-	if (obs->copy_mapped)
-		stagesurface_unmap(obs->copy_surfaces[obs->cur_texture]);
+	pthread_mutex_lock(&obs->data.sources_mutex);
+	for (i = 0; i < data->sources.num; i++)
+		obs_source_release(data->sources.array[i]);
+	da_free(data->sources);
+	pthread_mutex_unlock(&obs->data.sources_mutex);
+}
 
 
-	for (i = 0; i < NUM_TEXTURES; i++)
-		stagesurface_destroy(obs->copy_surfaces[i]);
+static bool obs_init(void)
+{
+	obs = bmalloc(sizeof(struct obs_subsystem));
 
 
-	effect_destroy(obs->default_effect);
+	memset(obs, 0, sizeof(struct obs_subsystem));
+	obs_init_data();
 
 
-	gs_leavecontext();
+	obs->media = media_open();
+	if (!obs->media)
+		return false;
 
 
-	gs_destroy(obs->graphics);
+	return true;
 }
 }
 
 
-static inline void obs_free_media(void)
+bool obs_startup()
 {
 {
-	video_output_close(obs->video);
-	audio_output_close(obs->audio);
-	media_close(obs->media);
-}
+	bool success;
 
 
-static inline void obs_free_threading(void)
-{
-	void *thread_ret;
-	video_output_stop(obs->video);
-	if (obs->thread_initialized)
-		pthread_join(obs->video_thread, &thread_ret);
-	pthread_mutex_destroy(&obs->source_list_mutex);
-	pthread_mutex_destroy(&obs->display_list_mutex);
+	if (obs) {
+		blog(LOG_ERROR, "Tried to call obs_startup more than once");
+		return false;
+	}
+
+	success = obs_init();
+	if (!success)
+		obs_shutdown();
+
+	return success;
 }
 }
 
 
-static void obs_destroy(void)
+void obs_shutdown(void)
 {
 {
 	size_t i;
 	size_t i;
 
 
 	if (!obs)
 	if (!obs)
 		return;
 		return;
 
 
-	for (i = 0; i < obs->displays.num; i++)
-		obs_display_destroy(obs->displays.array[i]);
-
 	da_free(obs->input_types);
 	da_free(obs->input_types);
 	da_free(obs->filter_types);
 	da_free(obs->filter_types);
 	da_free(obs->transition_types);
 	da_free(obs->transition_types);
 	da_free(obs->output_types);
 	da_free(obs->output_types);
-	/*da_free(obs->services);*/
+	da_free(obs->service_types);
 
 
-	da_free(obs->displays);
-	da_free(obs->sources);
-
-	obs_free_threading();
-	obs_free_media();
-	obs_free_graphics();
+	obs_free_data();
+	obs_free_video();
+	obs_free_audio();
+	media_close(obs->media);
 
 
 	for (i = 0; i < obs->modules.num; i++)
 	for (i = 0; i < obs->modules.num; i++)
 		free_module(obs->modules.array+i);
 		free_module(obs->modules.array+i);
@@ -177,53 +273,24 @@ static void obs_destroy(void)
 	obs = NULL;
 	obs = NULL;
 }
 }
 
 
-bool obs_startup(const char *graphics_module,
-		struct gs_init_data *graphics_data,
-		struct video_info *vi, struct audio_info *ai)
+bool obs_reset_video(struct obs_video_info *ovi)
 {
 {
-	if (!obs_init(graphics_module, graphics_data, vi, ai)) {
-		obs_destroy();
-		return false;
-	}
+	obs_free_video();
+	if (ovi)
+		return obs_init_video(ovi);
 
 
 	return true;
 	return true;
 }
 }
 
 
-void obs_shutdown(void)
-{
-	obs_destroy();
-}
-
-bool obs_reset_video(struct video_info *vi)
-{
-	int errorcode;
-
-	if (obs->video) {
-		video_output_close(obs->video);
-		obs->video = NULL;
-	}
-
-	obs->output_width  = vi->width;
-	obs->output_height = vi->height;
-
-	errorcode = video_output_open(&obs->video, obs->media, vi);
-	if (errorcode == VIDEO_OUTPUT_SUCCESS)
-		return true;
-	else if (errorcode == VIDEO_OUTPUT_INVALIDPARAM)
-		blog(LOG_ERROR, "Invalid video parameters specified");
-	else
-		blog(LOG_ERROR, "Could not open video output");
-
-	return false;
-}
-
 bool obs_reset_audio(struct audio_info *ai)
 bool obs_reset_audio(struct audio_info *ai)
 {
 {
-	/* TODO */
+	obs_free_audio();
+	if(ai)
+		return obs_init_audio(ai);
+
 	return true;
 	return true;
 }
 }
 
 
-
 bool obs_enum_inputs(size_t idx, const char **name)
 bool obs_enum_inputs(size_t idx, const char **name)
 {
 {
 	if (idx >= obs->input_types.num)
 	if (idx >= obs->input_types.num)
@@ -256,10 +323,9 @@ bool obs_enum_outputs(size_t idx, const char **name)
 	return true;
 	return true;
 }
 }
 
 
-
 graphics_t obs_graphics(void)
 graphics_t obs_graphics(void)
 {
 {
-	return obs->graphics;
+	return obs->video.graphics;
 }
 }
 
 
 media_t obs_media(void)
 media_t obs_media(void)
@@ -267,12 +333,49 @@ media_t obs_media(void)
 	return obs->media;
 	return obs->media;
 }
 }
 
 
-obs_source_t obs_get_primary_source(void)
+bool obs_add_source(obs_source_t source)
+{
+	pthread_mutex_lock(&obs->data.sources_mutex);
+	da_push_back(obs->data.sources, &source);
+	obs_source_addref(source);
+	pthread_mutex_unlock(&obs->data.sources_mutex);
+
+	return true;
+}
+
+void obs_delete_source(obs_source_t source)
 {
 {
-	return obs->primary_source;
+	struct obs_data *data = &obs->data;
+	size_t id;
+
+	pthread_mutex_lock(&data->sources_mutex);
+
+	id = da_find(data->sources, &source, 0);
+	if (id != DARRAY_INVALID) {
+		source->removed = true;
+		da_erase_item(data->sources, &source);
+		obs_source_release(source);
+	}
+
+	pthread_mutex_unlock(&data->sources_mutex);
+}
+
+obs_source_t obs_get_output_source(uint32_t channel)
+{
+	assert(channel < MAX_CHANNELS);
+	return obs->data.channels[channel];
 }
 }
 
 
-void obs_set_primary_source(obs_source_t source)
+void obs_set_output_source(uint32_t channel, obs_source_t source)
 {
 {
-	obs->primary_source = source;
+	struct obs_source *prev_source;
+	assert(channel < MAX_CHANNELS);
+
+	prev_source = obs->data.channels[channel];
+	obs->data.channels[channel] = source;
+
+	if (source)
+		obs_source_addref(source);
+	if (prev_source)
+		obs_source_release(prev_source);
 }
 }

+ 58 - 17
libobs/obs.h

@@ -46,6 +46,11 @@ enum obs_source_type {
 	SOURCE_SCENE
 	SOURCE_SCENE
 };
 };
 
 
+enum obs_video_type {
+	OBS_VIDEO_YUV,
+	OBS_VIDEO_RGB
+};
+
 /* used for changing the order of items (for example, filters in a source,
 /* used for changing the order of items (for example, filters in a source,
  * or items in a scene) */
  * or items in a scene) */
 enum order_movement {
 enum order_movement {
@@ -55,6 +60,19 @@ enum order_movement {
 	ORDER_MOVE_BOTTOM
 	ORDER_MOVE_BOTTOM
 };
 };
 
 
+struct obs_video_info {
+	const char          *graphics_module;
+	uint32_t            fps_num;
+	uint32_t            fps_den;
+	uint32_t            base_width;
+	uint32_t            base_height;
+	uint32_t            output_width;
+	uint32_t            output_height;
+	enum video_format   output_format;
+	uint32_t            adapter;
+	struct gs_window    window;
+};
+
 struct filtered_audio {
 struct filtered_audio {
 	void                *data;
 	void                *data;
 	uint32_t            frames;
 	uint32_t            frames;
@@ -100,12 +118,14 @@ struct obs_source;
 struct obs_scene;
 struct obs_scene;
 struct obs_scene_item;
 struct obs_scene_item;
 struct obs_output;
 struct obs_output;
+struct obs_service;
 
 
 typedef struct obs_display    *obs_display_t;
 typedef struct obs_display    *obs_display_t;
 typedef struct obs_source     *obs_source_t;
 typedef struct obs_source     *obs_source_t;
 typedef struct obs_scene      *obs_scene_t;
 typedef struct obs_scene      *obs_scene_t;
 typedef struct obs_scene_item *obs_sceneitem_t;
 typedef struct obs_scene_item *obs_sceneitem_t;
 typedef struct obs_output     *obs_output_t;
 typedef struct obs_output     *obs_output_t;
+typedef struct obs_service    *obs_service_t;
 
 
 /* ------------------------------------------------------------------------- */
 /* ------------------------------------------------------------------------- */
 /* OBS context */
 /* OBS context */
@@ -113,21 +133,17 @@ typedef struct obs_output     *obs_output_t;
 /**
 /**
  * Starts up and shuts down OBS
  * Starts up and shuts down OBS
  *
  *
- *   Using the graphics module specified, creates an OBS context and sets the
- * primary video/audio output information.
+ *   Creates the OBS context.
  */
  */
-EXPORT bool obs_startup(const char *graphics_module,
-		struct gs_init_data *graphics_data,
-		struct video_info *vi, struct audio_info *ai);
+EXPORT bool obs_startup(void);
 EXPORT void obs_shutdown(void);
 EXPORT void obs_shutdown(void);
 
 
 /**
 /**
  * Sets base video ouput base resolution/fps/format
  * Sets base video ouput base resolution/fps/format
  *
  *
- *   NOTE: Cannot reset base video if currently streaming/recording.
+ *   NOTE: Cannot set base video if currently streaming/recording.
  */
  */
-
-EXPORT bool obs_reset_video(struct video_info *vi);
+EXPORT bool obs_reset_video(struct obs_video_info *ovi);
 
 
 /**
 /**
  * Sets base audio output format/channels/samples/etc
  * Sets base audio output format/channels/samples/etc
@@ -184,18 +200,24 @@ EXPORT graphics_t obs_graphics(void);
 EXPORT media_t obs_media(void);
 EXPORT media_t obs_media(void);
 
 
 /**
 /**
- * Sets/gets the primary output source.
+ * Adds/removes a source to/from the user source list.
  *
  *
- *   The primary source is the source that's presented.
+ *   The user source list is the list of sources that are accessible by a user.
+ * Typically when a transition is active, it is not meant to be accessible by
+ * users, so there's no reason for a user to see such a source.
  */
  */
-EXPORT void         obs_set_primary_source(obs_source_t source);
-EXPORT obs_source_t obs_get_primary_source(void);
+EXPORT bool obs_add_source(obs_source_t source);
+EXPORT void obs_delete_source(obs_source_t source);
+
+/** Sets/gets the primary output source for a channel. */
+EXPORT void obs_set_output_source(uint32_t channel, obs_source_t source);
+EXPORT obs_source_t obs_get_output_source(uint32_t channel);
 
 
 /**
 /**
  * Returns the location of a plugin data file.
  * Returns the location of a plugin data file.
  *
  *
  *   file: Name of file to locate.  For example, "myplugin/mydata.data"
  *   file: Name of file to locate.  For example, "myplugin/mydata.data"
- *   returns: Output string, or NULL if not found.  Use bfree to free string.
+ *   returns: Path string, or NULL if not found.  Use bfree to free string.
  */
  */
 EXPORT char *obs_find_plugin_file(const char *file);
 EXPORT char *obs_find_plugin_file(const char *file);
 
 
@@ -214,8 +236,10 @@ EXPORT obs_display_t obs_display_create(struct gs_init_data *graphics_data);
 EXPORT void obs_display_destroy(obs_display_t display);
 EXPORT void obs_display_destroy(obs_display_t display);
 
 
 /** Sets the source to be used for a display context. */
 /** Sets the source to be used for a display context. */
-EXPORT void obs_display_setsource(obs_display_t display, obs_source_t source);
-EXPORT obs_source_t obs_display_getsource(obs_display_t display);
+EXPORT void obs_display_setsource(obs_display_t display, uint32_t channel,
+		obs_source_t source);
+EXPORT obs_source_t obs_display_getsource(obs_display_t display,
+		uint32_t channel);
 
 
 
 
 /* ------------------------------------------------------------------------- */
 /* ------------------------------------------------------------------------- */
@@ -235,7 +259,11 @@ EXPORT const char *obs_source_getdisplayname(enum obs_source_type type,
  */
  */
 EXPORT obs_source_t obs_source_create(enum obs_source_type type,
 EXPORT obs_source_t obs_source_create(enum obs_source_type type,
 		const char *name, const char *settings);
 		const char *name, const char *settings);
-EXPORT void obs_source_destroy(obs_source_t source);
+EXPORT void obs_source_addref(obs_source_t source);
+EXPORT void obs_source_release(obs_source_t source);
+
+/** Returns true if the source should be released */
+EXPORT bool obs_source_removed(obs_source_t source);
 
 
 /**
 /**
  * Retrieves flags that specify what type of data the source presents/modifies.
  * Retrieves flags that specify what type of data the source presents/modifies.
@@ -285,7 +313,7 @@ EXPORT bool obs_source_enum_children(obs_source_t source, size_t idx,
 EXPORT obs_source_t obs_filter_gettarget(obs_source_t filter);
 EXPORT obs_source_t obs_filter_gettarget(obs_source_t filter);
 
 
 /** Adds a filter to the source (which is used whenever the source is used) */
 /** Adds a filter to the source (which is used whenever the source is used) */
-EXPORT void obs_source_filter_add(obs_source_t source,obs_source_t filter);
+EXPORT void obs_source_filter_add(obs_source_t source, obs_source_t filter);
 
 
 /** Removes a filter from the source */
 /** Removes a filter from the source */
 EXPORT void obs_source_filter_remove(obs_source_t source, obs_source_t filter);
 EXPORT void obs_source_filter_remove(obs_source_t source, obs_source_t filter);
@@ -393,6 +421,19 @@ EXPORT const char *obs_output_get_settings(obs_output_t output);
 EXPORT void obs_output_save_settings(obs_output_t output,
 EXPORT void obs_output_save_settings(obs_output_t output,
 		const char *settings);
 		const char *settings);
 
 
+
+/* ------------------------------------------------------------------------- */
+/* Stream Services */
+EXPORT obs_service_t obs_service_create(const char *service,
+		const char *settings);
+EXPORT void obs_service_destroy(obs_service_t service);
+
+EXPORT void obs_service_setdata(obs_service_t service, const char *attribute,
+		const char *data);
+EXPORT const char *obs_service_getdata(obs_service_t service,
+		const char *attribute);
+
+
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }
 #endif
 #endif

+ 1 - 1
plugins/obs-outputs/obs-outputs.c

@@ -4,7 +4,7 @@ static const char *outputs[1] = {"rtmp_stream"};
 
 
 const char *enum_outputs(size_t idx)
 const char *enum_outputs(size_t idx)
 {
 {
-	if (idx < sizeof(outputs)/sizeof(const char*))
+	if (idx >= sizeof(outputs)/sizeof(const char*))
 		return NULL;
 		return NULL;
 
 
 	return outputs[idx];
 	return outputs[idx];

+ 2590 - 0
plugins/obs-outputs/obs-outputs.fbp

@@ -0,0 +1,2590 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+    <FileVersion major="1" minor="11" />
+    <object class="Project" expanded="1">
+        <property name="class_decoration"></property>
+        <property name="code_generation">C++</property>
+        <property name="disconnect_events">1</property>
+        <property name="disconnect_mode">source_name</property>
+        <property name="disconnect_php_events">0</property>
+        <property name="disconnect_python_events">0</property>
+        <property name="embedded_files_path">res</property>
+        <property name="encoding">UTF-8</property>
+        <property name="event_generation">connect</property>
+        <property name="file"></property>
+        <property name="first_id">1000</property>
+        <property name="help_provider">none</property>
+        <property name="internationalize">1</property>
+        <property name="name">MyProject1</property>
+        <property name="namespace"></property>
+        <property name="path">.</property>
+        <property name="precompiled_header"></property>
+        <property name="relative_path">1</property>
+        <property name="skip_lua_events">1</property>
+        <property name="skip_php_events">1</property>
+        <property name="skip_python_events">1</property>
+        <property name="ui_table">UI</property>
+        <property name="use_enum">0</property>
+        <property name="use_microsoft_bom">0</property>
+        <object class="Dialog" expanded="0">
+            <property name="aui_managed">0</property>
+            <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+            <property name="bg"></property>
+            <property name="center">wxBOTH</property>
+            <property name="context_help"></property>
+            <property name="context_menu">1</property>
+            <property name="enabled">1</property>
+            <property name="event_handler">impl_virtual</property>
+            <property name="extra_style"></property>
+            <property name="fg"></property>
+            <property name="font"></property>
+            <property name="hidden">0</property>
+            <property name="id">wxID_ANY</property>
+            <property name="maximum_size"></property>
+            <property name="minimum_size"></property>
+            <property name="name">StreamConfig</property>
+            <property name="pos"></property>
+            <property name="size">663,546</property>
+            <property name="style">wxDEFAULT_DIALOG_STYLE</property>
+            <property name="subclass"></property>
+            <property name="title">StreamConfig</property>
+            <property name="tooltip"></property>
+            <property name="window_extra_style"></property>
+            <property name="window_name"></property>
+            <property name="window_style"></property>
+            <event name="OnActivate"></event>
+            <event name="OnActivateApp"></event>
+            <event name="OnAuiFindManager"></event>
+            <event name="OnAuiPaneButton"></event>
+            <event name="OnAuiPaneClose"></event>
+            <event name="OnAuiPaneMaximize"></event>
+            <event name="OnAuiPaneRestore"></event>
+            <event name="OnAuiRender"></event>
+            <event name="OnChar"></event>
+            <event name="OnClose"></event>
+            <event name="OnEnterWindow"></event>
+            <event name="OnEraseBackground"></event>
+            <event name="OnHibernate"></event>
+            <event name="OnIconize"></event>
+            <event name="OnIdle"></event>
+            <event name="OnInitDialog"></event>
+            <event name="OnKeyDown"></event>
+            <event name="OnKeyUp"></event>
+            <event name="OnKillFocus"></event>
+            <event name="OnLeaveWindow"></event>
+            <event name="OnLeftDClick"></event>
+            <event name="OnLeftDown"></event>
+            <event name="OnLeftUp"></event>
+            <event name="OnMiddleDClick"></event>
+            <event name="OnMiddleDown"></event>
+            <event name="OnMiddleUp"></event>
+            <event name="OnMotion"></event>
+            <event name="OnMouseEvents"></event>
+            <event name="OnMouseWheel"></event>
+            <event name="OnPaint"></event>
+            <event name="OnRightDClick"></event>
+            <event name="OnRightDown"></event>
+            <event name="OnRightUp"></event>
+            <event name="OnSetFocus"></event>
+            <event name="OnSize"></event>
+            <event name="OnUpdateUI"></event>
+            <object class="wxBoxSizer" expanded="0">
+                <property name="minimum_size"></property>
+                <property name="name">bSizer6</property>
+                <property name="orient">wxVERTICAL</property>
+                <property name="permission">none</property>
+                <object class="sizeritem" expanded="0">
+                    <property name="border">5</property>
+                    <property name="flag">wxEXPAND|wxALL</property>
+                    <property name="proportion">1</property>
+                    <object class="wxBoxSizer" expanded="0">
+                        <property name="minimum_size"></property>
+                        <property name="name">serviceSizer</property>
+                        <property name="orient">wxVERTICAL</property>
+                        <property name="permission">protected</property>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">0</property>
+                            <object class="wxBoxSizer" expanded="0">
+                                <property name="minimum_size"></property>
+                                <property name="name">bSizer7</property>
+                                <property name="orient">wxHORIZONTAL</property>
+                                <property name="permission">none</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">StreamConfig.Encoder</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size">230,-1</property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticText9</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxALIGN_RIGHT</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">2</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND</property>
+                                    <property name="proportion">1</property>
+                                    <object class="wxComboBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices"></property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_comboBox5</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">-1</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxCB_READONLY</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="value">Combo!</property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCombobox"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">2</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxButton" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default">0</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Add</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_button4</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnButtonClick"></event>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">2</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxButton" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default">0</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Edit</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_button5</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnButtonClick"></event>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">0</property>
+                            <object class="wxBoxSizer" expanded="0">
+                                <property name="minimum_size"></property>
+                                <property name="name">bSizer9</property>
+                                <property name="orient">wxHORIZONTAL</property>
+                                <property name="permission">none</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">StreamConfig.Service</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size">230,-1</property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticText10</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxALIGN_RIGHT</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">2</property>
+                                    <property name="flag">wxALL</property>
+                                    <property name="proportion">1</property>
+                                    <object class="wxComboBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices"></property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_comboBox6</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">-1</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxCB_READONLY</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="value">Combo!</property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCombobox"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+                <object class="sizeritem" expanded="0">
+                    <property name="border">5</property>
+                    <property name="flag">wxALIGN_RIGHT</property>
+                    <property name="proportion">0</property>
+                    <object class="wxBoxSizer" expanded="0">
+                        <property name="minimum_size"></property>
+                        <property name="name">bSizer10</property>
+                        <property name="orient">wxHORIZONTAL</property>
+                        <property name="permission">none</property>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxALL</property>
+                            <property name="proportion">0</property>
+                            <object class="wxButton" expanded="0">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">1</property>
+                                <property name="default">0</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font"></property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="label">OK</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_button7</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="show">1</property>
+                                <property name="size"></property>
+                                <property name="style"></property>
+                                <property name="subclass"></property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="validator_data_type"></property>
+                                <property name="validator_style">wxFILTER_NONE</property>
+                                <property name="validator_type">wxDefaultValidator</property>
+                                <property name="validator_variable"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style"></property>
+                                <event name="OnButtonClick"></event>
+                                <event name="OnChar"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxALL</property>
+                            <property name="proportion">0</property>
+                            <object class="wxButton" expanded="0">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">1</property>
+                                <property name="default">0</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font"></property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="label">Cancel</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_button8</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="show">1</property>
+                                <property name="size"></property>
+                                <property name="style"></property>
+                                <property name="subclass"></property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="validator_data_type"></property>
+                                <property name="validator_style">wxFILTER_NONE</property>
+                                <property name="validator_type">wxDefaultValidator</property>
+                                <property name="validator_variable"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style"></property>
+                                <event name="OnButtonClick"></event>
+                                <event name="OnChar"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+            </object>
+        </object>
+        <object class="Panel" expanded="0">
+            <property name="aui_managed">0</property>
+            <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+            <property name="bg"></property>
+            <property name="context_help"></property>
+            <property name="context_menu">1</property>
+            <property name="enabled">1</property>
+            <property name="event_handler">impl_virtual</property>
+            <property name="fg"></property>
+            <property name="font"></property>
+            <property name="hidden">0</property>
+            <property name="id">wxID_ANY</property>
+            <property name="maximum_size"></property>
+            <property name="minimum_size"></property>
+            <property name="name">MyPanel2</property>
+            <property name="pos"></property>
+            <property name="size">742,442</property>
+            <property name="subclass"></property>
+            <property name="tooltip"></property>
+            <property name="window_extra_style"></property>
+            <property name="window_name"></property>
+            <property name="window_style">wxTAB_TRAVERSAL</property>
+            <event name="OnAuiFindManager"></event>
+            <event name="OnAuiPaneButton"></event>
+            <event name="OnAuiPaneClose"></event>
+            <event name="OnAuiPaneMaximize"></event>
+            <event name="OnAuiPaneRestore"></event>
+            <event name="OnAuiRender"></event>
+            <event name="OnChar"></event>
+            <event name="OnEnterWindow"></event>
+            <event name="OnEraseBackground"></event>
+            <event name="OnInitDialog"></event>
+            <event name="OnKeyDown"></event>
+            <event name="OnKeyUp"></event>
+            <event name="OnKillFocus"></event>
+            <event name="OnLeaveWindow"></event>
+            <event name="OnLeftDClick"></event>
+            <event name="OnLeftDown"></event>
+            <event name="OnLeftUp"></event>
+            <event name="OnMiddleDClick"></event>
+            <event name="OnMiddleDown"></event>
+            <event name="OnMiddleUp"></event>
+            <event name="OnMotion"></event>
+            <event name="OnMouseEvents"></event>
+            <event name="OnMouseWheel"></event>
+            <event name="OnPaint"></event>
+            <event name="OnRightDClick"></event>
+            <event name="OnRightDown"></event>
+            <event name="OnRightUp"></event>
+            <event name="OnSetFocus"></event>
+            <event name="OnSize"></event>
+            <event name="OnUpdateUI"></event>
+            <object class="wxBoxSizer" expanded="0">
+                <property name="minimum_size"></property>
+                <property name="name">bSizer19</property>
+                <property name="orient">wxVERTICAL</property>
+                <property name="permission">none</property>
+                <object class="sizeritem" expanded="0">
+                    <property name="border">5</property>
+                    <property name="flag">wxEXPAND|wxALL</property>
+                    <property name="proportion">0</property>
+                    <object class="wxStaticBoxSizer" expanded="0">
+                        <property name="id">wxID_ANY</property>
+                        <property name="label">StreamConfig.Encoding.VideoEncoding</property>
+                        <property name="minimum_size"></property>
+                        <property name="name">sbSizer2</property>
+                        <property name="orient">wxVERTICAL</property>
+                        <property name="permission">none</property>
+                        <event name="OnUpdateUI"></event>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">1</property>
+                            <object class="wxGridSizer" expanded="0">
+                                <property name="cols">2</property>
+                                <property name="hgap">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="name">gSizer5</property>
+                                <property name="permission">none</property>
+                                <property name="rows">0</property>
+                                <property name="vgap">0</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_RIGHT|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">1</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">StreamConfig.Encoding.EnableCBR</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size">-1,-1</property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBox1</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_RIGHT|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">1</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">StreamConfig.Encoding.CBRPadding</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size">-1,-1</property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBox2</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxEXPAND</property>
+                                    <property name="proportion">1</property>
+                                    <object class="wxFlexGridSizer" expanded="0">
+                                        <property name="cols">2</property>
+                                        <property name="flexible_direction">wxBOTH</property>
+                                        <property name="growablecols"></property>
+                                        <property name="growablerows"></property>
+                                        <property name="hgap">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="name">fgSizer9</property>
+                                        <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                                        <property name="permission">none</property>
+                                        <property name="rows">0</property>
+                                        <property name="vgap">0</property>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">5</property>
+                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxStaticText" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">1</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="label">StreamConfig.Encoding.Quality</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size">242,-1</property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_staticText17</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size"></property>
+                                                <property name="style">wxALIGN_RIGHT</property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <property name="wrap">-1</property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">2</property>
+                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxComboBox" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="choices"></property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">0</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size"></property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_comboBox6</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="selection">-1</property>
+                                                <property name="show">1</property>
+                                                <property name="size">100,-1</property>
+                                                <property name="style">wxCB_READONLY</property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="validator_data_type"></property>
+                                                <property name="validator_style">wxFILTER_NONE</property>
+                                                <property name="validator_type">wxDefaultValidator</property>
+                                                <property name="validator_variable"></property>
+                                                <property name="value"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnCombobox"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnText"></event>
+                                                <event name="OnTextEnter"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">StreamConfig.Encoding.CustomBuffer</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size">-1,-1</property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBox3</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxEXPAND</property>
+                                    <property name="proportion">1</property>
+                                    <object class="wxFlexGridSizer" expanded="0">
+                                        <property name="cols">2</property>
+                                        <property name="flexible_direction">wxBOTH</property>
+                                        <property name="growablecols"></property>
+                                        <property name="growablerows"></property>
+                                        <property name="hgap">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="name">fgSizer10</property>
+                                        <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                                        <property name="permission">none</property>
+                                        <property name="rows">0</property>
+                                        <property name="vgap">0</property>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">5</property>
+                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxStaticText" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">1</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="label">StreamConfig.Encoding.MaxBitrate</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size">242,-1</property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_staticText19</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size"></property>
+                                                <property name="style">wxALIGN_RIGHT</property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <property name="wrap">-1</property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">2</property>
+                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP</property>
+                                            <property name="proportion">1</property>
+                                            <object class="wxTextCtrl" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">1</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="maxlength"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size"></property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_textCtrl2</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size">100,-1</property>
+                                                <property name="style"></property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="validator_data_type"></property>
+                                                <property name="validator_style">wxFILTER_NONE</property>
+                                                <property name="validator_type">wxDefaultValidator</property>
+                                                <property name="validator_variable"></property>
+                                                <property name="value"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnText"></event>
+                                                <event name="OnTextEnter"></event>
+                                                <event name="OnTextMaxLen"></event>
+                                                <event name="OnTextURL"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxEXPAND</property>
+                                    <property name="proportion">1</property>
+                                    <object class="wxFlexGridSizer" expanded="0">
+                                        <property name="cols">2</property>
+                                        <property name="flexible_direction">wxBOTH</property>
+                                        <property name="growablecols"></property>
+                                        <property name="growablerows"></property>
+                                        <property name="hgap">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="name">fgSizer15</property>
+                                        <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                                        <property name="permission">none</property>
+                                        <property name="rows">0</property>
+                                        <property name="vgap">0</property>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">5</property>
+                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxStaticText" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">1</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="label">StreamConfig.Encoding.BufferSize</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size">232,-1</property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_staticText20</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size"></property>
+                                                <property name="style">wxALIGN_RIGHT</property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <property name="wrap">-1</property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">2</property>
+                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxTextCtrl" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">0</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="maxlength"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size"></property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_textCtrl3</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size">100,-1</property>
+                                                <property name="style"></property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="validator_data_type"></property>
+                                                <property name="validator_style">wxFILTER_NONE</property>
+                                                <property name="validator_type">wxDefaultValidator</property>
+                                                <property name="validator_variable"></property>
+                                                <property name="value"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnText"></event>
+                                                <event name="OnTextEnter"></event>
+                                                <event name="OnTextMaxLen"></event>
+                                                <event name="OnTextURL"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+                <object class="sizeritem" expanded="0">
+                    <property name="border">5</property>
+                    <property name="flag">wxEXPAND|wxALL</property>
+                    <property name="proportion">0</property>
+                    <object class="wxStaticBoxSizer" expanded="0">
+                        <property name="id">wxID_ANY</property>
+                        <property name="label">StreamConfig.Encoding.AudioEncoding</property>
+                        <property name="minimum_size"></property>
+                        <property name="name">sbSizer3</property>
+                        <property name="orient">wxVERTICAL</property>
+                        <property name="permission">none</property>
+                        <event name="OnUpdateUI"></event>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">1</property>
+                            <object class="wxFlexGridSizer" expanded="0">
+                                <property name="cols">2</property>
+                                <property name="flexible_direction">wxBOTH</property>
+                                <property name="growablecols"></property>
+                                <property name="growablerows"></property>
+                                <property name="hgap">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="name">fgSizer12</property>
+                                <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                                <property name="permission">none</property>
+                                <property name="rows">0</property>
+                                <property name="vgap">0</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">StreamConfig.Encoding.AudioBitrate</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size">242,-1</property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticText23</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxALIGN_RIGHT</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">2</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxComboBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices"></property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_comboBox7</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">-1</property>
+                                        <property name="show">1</property>
+                                        <property name="size">100,-1</property>
+                                        <property name="style">wxCB_READONLY</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="value"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCombobox"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">1</property>
+                            <object class="wxFlexGridSizer" expanded="0">
+                                <property name="cols">2</property>
+                                <property name="flexible_direction">wxBOTH</property>
+                                <property name="growablecols"></property>
+                                <property name="growablerows"></property>
+                                <property name="hgap">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="name">fgSizer13</property>
+                                <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                                <property name="permission">none</property>
+                                <property name="rows">0</property>
+                                <property name="vgap">0</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">StreamConfig.Encoding.AudioFormat</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size">242,-1</property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticText24</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxALIGN_RIGHT</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">2</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxComboBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices"></property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_comboBox8</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">-1</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxCB_READONLY</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="value"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCombobox"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+            </object>
+        </object>
+        <object class="Panel" expanded="0">
+            <property name="aui_managed">0</property>
+            <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+            <property name="bg"></property>
+            <property name="context_help"></property>
+            <property name="context_menu">1</property>
+            <property name="enabled">1</property>
+            <property name="event_handler">impl_virtual</property>
+            <property name="fg"></property>
+            <property name="font"></property>
+            <property name="hidden">0</property>
+            <property name="id">wxID_ANY</property>
+            <property name="maximum_size"></property>
+            <property name="minimum_size">-1,-1</property>
+            <property name="name">DefaultStream</property>
+            <property name="pos"></property>
+            <property name="size">-1,-1</property>
+            <property name="subclass"></property>
+            <property name="tooltip"></property>
+            <property name="window_extra_style"></property>
+            <property name="window_name"></property>
+            <property name="window_style">wxTAB_TRAVERSAL</property>
+            <event name="OnAuiFindManager"></event>
+            <event name="OnAuiPaneButton"></event>
+            <event name="OnAuiPaneClose"></event>
+            <event name="OnAuiPaneMaximize"></event>
+            <event name="OnAuiPaneRestore"></event>
+            <event name="OnAuiRender"></event>
+            <event name="OnChar"></event>
+            <event name="OnEnterWindow"></event>
+            <event name="OnEraseBackground"></event>
+            <event name="OnInitDialog"></event>
+            <event name="OnKeyDown"></event>
+            <event name="OnKeyUp"></event>
+            <event name="OnKillFocus"></event>
+            <event name="OnLeaveWindow"></event>
+            <event name="OnLeftDClick"></event>
+            <event name="OnLeftDown"></event>
+            <event name="OnLeftUp"></event>
+            <event name="OnMiddleDClick"></event>
+            <event name="OnMiddleDown"></event>
+            <event name="OnMiddleUp"></event>
+            <event name="OnMotion"></event>
+            <event name="OnMouseEvents"></event>
+            <event name="OnMouseWheel"></event>
+            <event name="OnPaint"></event>
+            <event name="OnRightDClick"></event>
+            <event name="OnRightDown"></event>
+            <event name="OnRightUp"></event>
+            <event name="OnSetFocus"></event>
+            <event name="OnSize"></event>
+            <event name="OnUpdateUI"></event>
+            <object class="wxBoxSizer" expanded="0">
+                <property name="minimum_size"></property>
+                <property name="name">bSizer4</property>
+                <property name="orient">wxVERTICAL</property>
+                <property name="permission">none</property>
+                <object class="sizeritem" expanded="0">
+                    <property name="border">0</property>
+                    <property name="flag"></property>
+                    <property name="proportion">0</property>
+                    <object class="wxFlexGridSizer" expanded="0">
+                        <property name="cols">2</property>
+                        <property name="flexible_direction">wxBOTH</property>
+                        <property name="growablecols"></property>
+                        <property name="growablerows"></property>
+                        <property name="hgap">0</property>
+                        <property name="minimum_size"></property>
+                        <property name="name">fgSizer6</property>
+                        <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                        <property name="permission">none</property>
+                        <property name="rows">0</property>
+                        <property name="vgap">0</property>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                            <property name="proportion">0</property>
+                            <object class="wxStaticText" expanded="0">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">1</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font"></property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="label">StreamConfig.Server</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size">230,-1</property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_staticText12</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="show">1</property>
+                                <property name="size">-1,-1</property>
+                                <property name="style">wxALIGN_RIGHT</property>
+                                <property name="subclass"></property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style"></property>
+                                <property name="wrap">-1</property>
+                                <event name="OnChar"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">2</property>
+                            <property name="flag">wxALL</property>
+                            <property name="proportion">0</property>
+                            <object class="wxChoice" expanded="0">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="choices"></property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">1</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font"></property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_choice1</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="selection">0</property>
+                                <property name="show">1</property>
+                                <property name="size">300,-1</property>
+                                <property name="style"></property>
+                                <property name="subclass"></property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="validator_data_type"></property>
+                                <property name="validator_style">wxFILTER_NONE</property>
+                                <property name="validator_type">wxDefaultValidator</property>
+                                <property name="validator_variable"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style"></property>
+                                <event name="OnChar"></event>
+                                <event name="OnChoice"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</property>
+                            <property name="proportion">0</property>
+                            <object class="wxStaticText" expanded="0">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">1</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font"></property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="label">StreamConfig.StreamKey</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_staticText13</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="show">1</property>
+                                <property name="size"></property>
+                                <property name="style">wxALIGN_RIGHT</property>
+                                <property name="subclass"></property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style"></property>
+                                <property name="wrap">-1</property>
+                                <event name="OnChar"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">2</property>
+                            <property name="flag">wxALL</property>
+                            <property name="proportion">0</property>
+                            <object class="wxTextCtrl" expanded="0">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">1</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font"></property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="maxlength"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_textCtrl1</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="show">1</property>
+                                <property name="size">300,-1</property>
+                                <property name="style">wxTE_PASSWORD</property>
+                                <property name="subclass"></property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="validator_data_type"></property>
+                                <property name="validator_style">wxFILTER_NONE</property>
+                                <property name="validator_type">wxDefaultValidator</property>
+                                <property name="validator_variable"></property>
+                                <property name="value"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style"></property>
+                                <event name="OnChar"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnText"></event>
+                                <event name="OnTextEnter"></event>
+                                <event name="OnTextMaxLen"></event>
+                                <event name="OnTextURL"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+            </object>
+        </object>
+    </object>
+</wxFormBuilder_Project>

+ 1 - 1
plugins/obs-outputs/obs-stream.h

@@ -4,7 +4,7 @@
 #include "obs.h"
 #include "obs.h"
 
 
 struct rtmp_stream {
 struct rtmp_stream {
-	
+	obs_output_t handler;
 };
 };
 
 
 EXPORT void *rtmp_stream_getname(const char *locale);
 EXPORT void *rtmp_stream_getname(const char *locale);

+ 19 - 20
test/osx/test.mm

@@ -22,7 +22,7 @@ using SourceContext = std::unique_ptr<obs_source,
       std::function<void(obs_source_t)>>;
       std::function<void(obs_source_t)>>;
 static SourceContext autorelease(obs_source_t s)
 static SourceContext autorelease(obs_source_t s)
 {
 {
-	return SourceContext(s, obs_source_destroy);
+	return SourceContext(s, obs_source_release);
 }
 }
 
 
 using SceneContext = std::unique_ptr<obs_scene,
 using SceneContext = std::unique_ptr<obs_scene,
@@ -36,24 +36,23 @@ static SceneContext autorelease(obs_scene_t s)
 
 
 static void CreateOBS(NSWindow *win)
 static void CreateOBS(NSWindow *win)
 {
 {
-	struct video_info vi;
-	memset(&vi, 0, sizeof(struct video_info));
-	vi.fps_num = 30000;
-	vi.fps_den = 1001;
-	vi.width   = cx;
-	vi.height  = cy;
-	vi.name    = "video";
-
-	struct gs_init_data gsid;
-	memset(&gsid, 0, sizeof(gsid));
-	gsid.view            = [win contentView];
-	gsid.cx              = cx;
-	gsid.cy              = cy;
-	gsid.num_backbuffers = 2;
-	gsid.format          = GS_RGBA;
-
-	if (!obs_startup("libobs-opengl", &gsid, &vi, NULL))
+	if (!obs_startup())
 		throw "Couldn't create OBS";
 		throw "Couldn't create OBS";
+
+	struct obs_video_info ovi;
+	ovi.adapter         = 0;
+	ovi.base_width      = cx;
+	ovi.base_height     = cy;
+	ovi.fps_num         = 30000;
+	ovi.fps_den         = 1001;
+	ovi.graphics_module = "libobs-opengl";
+	ovi.output_format   = VIDEO_FORMAT_RGBA;
+	ovi.output_width    = cx;
+	ovi.output_height   = cy;
+	ovi.window.view     = [win contentView];
+
+	if (!obs_reset_video(&ovi))
+		throw "Couldn't initialize video";
 }
 }
 
 
 static void AddTestItems(obs_scene_t scene, obs_source_t source)
 static void AddTestItems(obs_scene_t scene, obs_source_t source)
@@ -166,11 +165,11 @@ static void test()
 
 
 		/* ------------------------------------------------------ */
 		/* ------------------------------------------------------ */
 		/* set the scene as the primary draw source and go */
 		/* set the scene as the primary draw source and go */
-		obs_set_primary_source(obs_scene_getsource(scene.get()));
+		obs_set_output_source(0, obs_scene_getsource(scene.get()));
 
 
 		[NSApp run];
 		[NSApp run];
 
 
-		obs_set_primary_source(NULL);
+		obs_set_output_source(0, NULL);
 
 
 	} catch (char const *error) {
 	} catch (char const *error) {
 		printf("%s\n", error);
 		printf("%s\n", error);

+ 18 - 21
test/win/test.cpp

@@ -18,7 +18,7 @@ class SourceContext {
 
 
 public:
 public:
 	inline SourceContext(obs_source_t source) : source(source) {}
 	inline SourceContext(obs_source_t source) : source(source) {}
-	inline ~SourceContext() {obs_source_destroy(source);}
+	inline ~SourceContext() {obs_source_release(source);}
 	inline operator obs_source_t() {return source;}
 	inline operator obs_source_t() {return source;}
 };
 };
 
 
@@ -68,24 +68,23 @@ static void CreateOBS(HWND hwnd)
 	RECT rc;
 	RECT rc;
 	GetClientRect(hwnd, &rc);
 	GetClientRect(hwnd, &rc);
 
 
-	struct video_info vi;
-	memset(&vi, 0, sizeof(struct video_info));
-	vi.fps_num = 30000;
-	vi.fps_den = 1001;
-	vi.width   = rc.right;
-	vi.height  = rc.bottom;
-	vi.name    = "video";
-
-	struct gs_init_data gsid;
-	memset(&gsid, 0, sizeof(gsid));
-	gsid.hwnd            = hwnd;
-	gsid.cx              = rc.right;
-	gsid.cy              = rc.bottom;
-	gsid.num_backbuffers = 2;
-	gsid.format          = GS_RGBA;
-
-	if (!obs_startup("libobs-opengl", &gsid, &vi, NULL))
+	if (!obs_startup())
 		throw "Couldn't create OBS";
 		throw "Couldn't create OBS";
+
+	struct obs_video_info ovi;
+	ovi.adapter         = 0;
+	ovi.base_width      = rc.right;
+	ovi.base_height     = rc.bottom;
+	ovi.fps_num         = 30000;
+	ovi.fps_den         = 1001;
+	ovi.graphics_module = "libobs-opengl";
+	ovi.output_format   = VIDEO_FORMAT_RGBA;
+	ovi.output_width    = rc.right;
+	ovi.output_height   = rc.bottom;
+	ovi.window.hwnd     = hwnd;
+
+	if (!obs_reset_video(&ovi))
+		throw "Couldn't initialize video";
 }
 }
 
 
 static void AddTestItems(obs_scene_t scene, obs_source_t source)
 static void AddTestItems(obs_scene_t scene, obs_source_t source)
@@ -174,7 +173,7 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine,
 
 
 		/* ------------------------------------------------------ */
 		/* ------------------------------------------------------ */
 		/* set the scene as the primary draw source and go */
 		/* set the scene as the primary draw source and go */
-		obs_set_primary_source(obs_scene_getsource(scene));
+		obs_set_output_source(0, obs_scene_getsource(scene));
 
 
 		MSG msg;
 		MSG msg;
 		while (GetMessage(&msg, NULL, 0, 0)) {
 		while (GetMessage(&msg, NULL, 0, 0)) {
@@ -182,8 +181,6 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine,
 			DispatchMessage(&msg);
 			DispatchMessage(&msg);
 		}
 		}
 
 
-		obs_set_primary_source(NULL);
-
 	} catch (char *error) {
 	} catch (char *error) {
 		MessageBoxA(NULL, error, NULL, 0);
 		MessageBoxA(NULL, error, NULL, 0);
 	}
 	}