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:
@@ -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);
|
||||
|
59
libobs/obs.c
59
libobs/obs.c
@@ -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);
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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;}
|
||||
|
||||
|
Reference in New Issue
Block a user