libobs: Add obs_data wrappers for media_frames_per_second
This commit is contained in:
parent
95487c3eec
commit
0b3fcb8b6e
@ -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);
|
||||
}
|
||||
|
@ -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 */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user