libobs: Add obs_data wrappers for media_frames_per_second

This commit is contained in:
Palana 2015-08-16 08:47:07 +02:00
parent 95487c3eec
commit 0b3fcb8b6e
2 changed files with 208 additions and 0 deletions

View File

@ -1052,6 +1052,14 @@ static inline void obs_set_array(obs_data_t *data, obs_data_item_t **item,
set_item_(data, item, name, &array, sizeof(obs_data_t*), OBS_DATA_ARRAY);
}
static inline void obs_take_obj(obs_data_t *data, obs_data_item_t **item,
const char *name,
obs_data_t *obj, set_item_t set_item_)
{
obs_set_obj(data, item, name, obj, set_item_);
obs_data_release(obj);
}
void obs_data_set_string(obs_data_t *data, const char *name, const char *val)
{
obs_set_string(data, NULL, name, val, set_item);
@ -1980,3 +1988,160 @@ void obs_data_get_autoselect_quat(obs_data_t *data, const char *name,
{
get_quat(obs_data_get_autoselect_obj(data, name), val);
}
/* ------------------------------------------------------------------------- */
/* Helper functions for media_frames_per_seconds */
static inline obs_data_t *make_frames_per_second(
struct media_frames_per_second fps,
const char *option)
{
obs_data_t *obj = obs_data_create();
if (!option) {
obs_data_set_double(obj, "numerator", fps.numerator);
obs_data_set_double(obj, "denominator", fps.denominator);
} else {
obs_data_set_string(obj, "option", option);
}
return obj;
}
void obs_data_set_frames_per_second(obs_data_t *data, const char *name,
struct media_frames_per_second fps, const char *option)
{
obs_take_obj(data, NULL, name, make_frames_per_second(fps, option),
set_item);
}
void obs_data_set_default_frames_per_second(obs_data_t *data, const char *name,
struct media_frames_per_second fps, const char *option)
{
obs_take_obj(data, NULL, name, make_frames_per_second(fps, option),
set_item_def);
}
void obs_data_set_autoselect_frames_per_second(obs_data_t *data,
const char *name, struct media_frames_per_second fps,
const char *option)
{
obs_take_obj(data, NULL, name, make_frames_per_second(fps, option),
set_item_auto);
}
static inline bool get_option(obs_data_t *data, const char **option)
{
if (!option) return false;
struct obs_data_item *opt = obs_data_item_byname(data, "option");
if (!opt) return false;
*option = obs_data_item_get_string(opt);
obs_data_item_release(&opt);
obs_data_release(data);
return true;
}
#define CLAMP(x, min, max) ((x) < min ? min : ((x) > max ? max : (x)))
static inline bool get_frames_per_second(obs_data_t *data,
struct media_frames_per_second *fps,
const char **option)
{
if (!data) return false;
if (get_option(data, option)) return true;
if (!fps) goto free;
struct obs_data_item *num = obs_data_item_byname(data, "numerator");
struct obs_data_item *den = obs_data_item_byname(data, "denominator");
if (!num || !den) {
obs_data_item_release(&num);
obs_data_item_release(&den);
goto free;
}
fps->numerator =
CLAMP(obs_data_item_get_int(num), 0, UINT32_MAX);
fps->denominator =
CLAMP(obs_data_item_get_int(den), 0, UINT32_MAX);
obs_data_item_release(&num);
obs_data_item_release(&den);
obs_data_release(data);
return media_frames_per_second_is_valid(*fps);
free:
obs_data_release(data);
return false;
}
bool obs_data_get_frames_per_second(obs_data_t *data, const char *name,
struct media_frames_per_second *fps, const char **option)
{
return get_frames_per_second(obs_data_get_obj(data, name), fps, option);
}
bool obs_data_get_default_frames_per_second(obs_data_t *data, const char *name,
struct media_frames_per_second *fps, const char **option)
{
return get_frames_per_second(obs_data_get_default_obj(data, name),
fps, option);
}
bool obs_data_get_autoselect_frames_per_second(obs_data_t *data,
const char *name, struct media_frames_per_second *fps,
const char **option)
{
return get_frames_per_second(obs_data_get_autoselect_obj(data, name),
fps, option);
}
void obs_data_item_set_frames_per_second(obs_data_item_t **item,
struct media_frames_per_second fps, const char *option)
{
obs_take_obj(NULL, item, NULL, make_frames_per_second(fps, option),
set_item);
}
void obs_data_item_set_default_frames_per_second(obs_data_item_t **item,
struct media_frames_per_second fps, const char *option)
{
obs_take_obj(NULL, item, NULL, make_frames_per_second(fps, option),
set_item_def);
}
void obs_data_item_set_autoselect_frames_per_second(obs_data_item_t **item,
struct media_frames_per_second fps, const char *option)
{
obs_take_obj(NULL, item, NULL, make_frames_per_second(fps, option),
set_item_auto);
}
bool obs_data_item_get_frames_per_second(obs_data_item_t *item,
struct media_frames_per_second *fps, const char **option)
{
return get_frames_per_second(obs_data_item_get_obj(item),
fps, option);
}
bool obs_data_item_get_default_frames_per_second(obs_data_item_t *item,
struct media_frames_per_second *fps, const char **option)
{
return get_frames_per_second(obs_data_item_get_default_obj(item),
fps, option);
}
bool obs_data_item_get_autoselect_frames_per_second(obs_data_item_t *item,
struct media_frames_per_second *fps, const char **option)
{
return get_frames_per_second(obs_data_item_get_autoselect_obj(item),
fps, option);
}

View File

@ -18,6 +18,7 @@
#pragma once
#include "util/c99defs.h"
#include "media-io/frame-rate.h"
#ifdef __cplusplus
extern "C" {
@ -305,6 +306,48 @@ EXPORT void obs_data_get_autoselect_vec4(obs_data_t *data, const char *name,
EXPORT void obs_data_get_autoselect_quat(obs_data_t *data, const char *name,
struct quat *val);
/* ------------------------------------------------------------------------- */
/* Helper functions for media_frames_per_second/OBS_PROPERTY_FRAME_RATE */
EXPORT void obs_data_set_frames_per_second(obs_data_t *data,
const char *name,
struct media_frames_per_second fps, const char *option);
EXPORT void obs_data_set_default_frames_per_second(obs_data_t *data,
const char *name,
struct media_frames_per_second fps, const char *option);
EXPORT void obs_data_set_autoselect_frames_per_second(obs_data_t *data,
const char *name,
struct media_frames_per_second fps, const char *option);
EXPORT bool obs_data_get_frames_per_second(obs_data_t *data,
const char *name,
struct media_frames_per_second *fps, const char **option);
EXPORT bool obs_data_get_default_frames_per_second(obs_data_t *data,
const char *name,
struct media_frames_per_second *fps, const char **option);
EXPORT bool obs_data_get_autoselect_frames_per_second(obs_data_t *data,
const char *name,
struct media_frames_per_second *fps, const char **option);
EXPORT void obs_data_item_set_frames_per_second(
obs_data_item_t **item,
struct media_frames_per_second fps, const char *option);
EXPORT void obs_data_item_set_default_frames_per_second(
obs_data_item_t **item,
struct media_frames_per_second fps, const char *option);
EXPORT void obs_data_item_set_autoselect_frames_per_second(
obs_data_item_t **item,
struct media_frames_per_second fps, const char *option);
EXPORT bool obs_data_item_get_frames_per_second(
obs_data_item_t *item,
struct media_frames_per_second *fps, const char **option);
EXPORT bool obs_data_item_get_default_frames_per_second(
obs_data_item_t *item,
struct media_frames_per_second *fps, const char **option);
EXPORT bool obs_data_item_get_autoselect_frames_per_second(
obs_data_item_t *item,
struct media_frames_per_second *fps, const char **option);
/* ------------------------------------------------------------------------- */
/* OBS-specific functions */