Add (temporary terrible) volume controls

- Add volume control

   These volume controls are basically nothing more than sliders.  They
   look terrible and hopefully will be as temporary as they are
   terrible.

 - Allow saving of specific non-user sources via obs_load_source and
   obs_save_source functions.

 - Save data of desktop/mic audio sources (sync data, volume data, etc),
   and load the data on startup.

 - Make it so that a scene is created by default if first time using the
   application.  On certain operating systems where supported, a default
   capture will be created.  Desktop capture on mac, particularly.  Not
   sure what to do about windows because monitor capture on windows 7 is
   completely terrible and is bad to start users off with.
This commit is contained in:
jp9000
2014-05-03 22:54:38 -07:00
parent fc0afd5c2d
commit 52746c2523
15 changed files with 688 additions and 254 deletions

View File

@@ -100,7 +100,7 @@ bool obs_source_init(struct obs_source *source,
{
source->refs = 1;
source->user_volume = 1.0f;
source->present_volume = 1.0f;
source->present_volume = 0.0f;
source->sync_offset = 0;
pthread_mutex_init_value(&source->filter_mutex);
pthread_mutex_init_value(&source->video_mutex);

View File

@@ -1033,6 +1033,25 @@ float obs_get_present_volume(void)
return obs ? obs->audio.present_volume : 0.0f;
}
obs_source_t obs_load_source(obs_data_t source_data)
{
obs_source_t source;
const char *name = obs_data_getstring(source_data, "name");
const char *id = obs_data_getstring(source_data, "id");
obs_data_t settings = obs_data_getobj(source_data, "settings");
double volume;
source = obs_source_create(OBS_SOURCE_TYPE_INPUT, id, name, settings);
obs_data_set_default_double(source_data, "volume", 1.0);
volume = obs_data_getdouble(source_data, "volume");
obs_source_setvolume(source, (float)volume);
obs_data_release(settings);
return source;
}
void obs_load_sources(obs_data_array_t array)
{
size_t count;
@@ -1045,19 +1064,12 @@ void obs_load_sources(obs_data_array_t array)
pthread_mutex_lock(&obs->data.user_sources_mutex);
for (i = 0; i < count; i++) {
obs_data_t source_data = obs_data_array_item(array, i);
obs_data_t source_data = obs_data_array_item(array, i);
obs_source_t source = obs_load_source(source_data);
const char *name = obs_data_getstring(source_data, "name");
const char *id = obs_data_getstring(source_data, "id");
obs_data_t settings = obs_data_getobj(source_data, "settings");
obs_source_t source;
source = obs_source_create(OBS_SOURCE_TYPE_INPUT, id, name,
settings);
obs_add_source(source);
obs_source_release(source);
obs_data_release(settings);
obs_source_release(source);
obs_data_release(source_data);
}
@@ -1068,23 +1080,26 @@ void obs_load_sources(obs_data_array_t array)
pthread_mutex_unlock(&obs->data.user_sources_mutex);
}
static void save_source_data(obs_data_array_t array, obs_source_t source)
obs_data_t obs_save_source(obs_source_t source)
{
obs_data_t source_data = obs_data_create();
obs_data_t settings = obs_source_getsettings(source);
const char *name = obs_source_getname(source);
const char *id;
obs_data_t source_data = obs_data_create();
obs_data_t settings = obs_source_getsettings(source);
float volume = obs_source_getvolume(source);
const char *name = obs_source_getname(source);
const char *id;
obs_source_save(source);
obs_source_gettype(source, NULL, &id);
obs_data_setstring(source_data, "name", name);
obs_data_setstring(source_data, "id", id);
obs_data_setobj (source_data, "settings", settings);
obs_data_setdouble(source_data, "volume", volume);
obs_data_array_push_back(array, source_data);
obs_data_release(source_data);
obs_data_release(settings);
return source_data;
}
obs_data_array_t obs_save_sources(void)
@@ -1099,9 +1114,11 @@ obs_data_array_t obs_save_sources(void)
pthread_mutex_lock(&obs->data.user_sources_mutex);
for (i = 0; i < obs->data.user_sources.num; i++) {
obs_source_t source = obs->data.user_sources.array[i];
obs_source_save(source);
save_source_data(array, source);
obs_source_t source = obs->data.user_sources.array[i];
obs_data_t source_data = obs_save_source(source);
obs_data_array_push_back(array, source_data);
obs_data_release(source_data);
}
pthread_mutex_unlock(&obs->data.user_sources_mutex);

View File

@@ -357,6 +357,12 @@ EXPORT float obs_get_master_volume(void);
/** Gets the master presentation volume */
EXPORT float obs_get_present_volume(void);
/** Saves a source to settings data */
EXPORT obs_data_t obs_save_source(obs_source_t source);
/** Loads a source from settings data */
EXPORT obs_source_t obs_load_source(obs_data_t data);
/** Loads sources from a data array */
EXPORT void obs_load_sources(obs_data_array_t array);

View File

@@ -16,6 +16,9 @@
#pragma once
/* Oh no I have my own com pointer class, the world is ending, how dare you
* write your own! */
template<typename T> class ComPtr {
T *ptr;
@@ -77,6 +80,9 @@ public:
inline T *Get() const {return ptr;}
/* nabbed this one from virtualdub */
inline T **operator~() {return Assign();}
inline operator T*() const {return ptr;}
inline T *operator->() const {return ptr;}