obs-transitions: Implement cut transition
This commit is contained in:
parent
4b781c7b04
commit
46bb2622c4
@ -3,6 +3,7 @@ project(obs-transitions)
|
||||
set(obs-transitions_SOURCES
|
||||
obs-transitions.c
|
||||
transition-fade.c
|
||||
transition-cut.c
|
||||
)
|
||||
|
||||
add_library(obs-transitions MODULE
|
||||
|
@ -1 +1,2 @@
|
||||
FadeTransition="Fade"
|
||||
CutTransition="Cut"
|
||||
|
@ -4,10 +4,12 @@ OBS_DECLARE_MODULE()
|
||||
|
||||
OBS_MODULE_USE_DEFAULT_LOCALE("obs-transitions", "en-US")
|
||||
|
||||
extern struct obs_source_info cut_transition;
|
||||
extern struct obs_source_info fade_transition;
|
||||
|
||||
bool obs_module_load(void)
|
||||
{
|
||||
obs_register_source(&cut_transition);
|
||||
obs_register_source(&fade_transition);
|
||||
return true;
|
||||
}
|
||||
|
67
plugins/obs-transitions/transition-cut.c
Normal file
67
plugins/obs-transitions/transition-cut.c
Normal file
@ -0,0 +1,67 @@
|
||||
#include <obs-module.h>
|
||||
|
||||
struct cut_info {
|
||||
obs_source_t *source;
|
||||
};
|
||||
|
||||
static const char *cut_get_name(void *type_data)
|
||||
{
|
||||
UNUSED_PARAMETER(type_data);
|
||||
return obs_module_text("CutTransition");
|
||||
}
|
||||
|
||||
void *cut_create(obs_data_t *settings, obs_source_t *source)
|
||||
{
|
||||
struct cut_info *cut;
|
||||
|
||||
cut = bmalloc(sizeof(*cut));
|
||||
cut->source = source;
|
||||
|
||||
obs_transition_enable_fixed(source, true, 0);
|
||||
UNUSED_PARAMETER(settings);
|
||||
return cut;
|
||||
}
|
||||
|
||||
void cut_destroy(void *data)
|
||||
{
|
||||
struct cut_info *cut = data;
|
||||
bfree(cut);
|
||||
}
|
||||
|
||||
void cut_video_render(void *data, gs_effect_t *effect)
|
||||
{
|
||||
struct cut_info *cut = data;
|
||||
obs_transition_video_render(cut->source, NULL);
|
||||
UNUSED_PARAMETER(effect);
|
||||
}
|
||||
|
||||
static float mix_a(void *data, float t)
|
||||
{
|
||||
UNUSED_PARAMETER(data);
|
||||
return 1.0f - t;
|
||||
}
|
||||
|
||||
static float mix_b(void *data, float t)
|
||||
{
|
||||
UNUSED_PARAMETER(data);
|
||||
return t;
|
||||
}
|
||||
|
||||
bool cut_audio_render(void *data, uint64_t *ts_out,
|
||||
struct obs_source_audio_mix *audio, uint32_t mixers,
|
||||
size_t channels, size_t sample_rate)
|
||||
{
|
||||
struct cut_info *cut = data;
|
||||
return obs_transition_audio_render(cut->source, ts_out,
|
||||
audio, mixers, channels, sample_rate, mix_a, mix_b);
|
||||
}
|
||||
|
||||
struct obs_source_info cut_transition = {
|
||||
.id = "cut_transition",
|
||||
.type = OBS_SOURCE_TYPE_TRANSITION,
|
||||
.get_name = cut_get_name,
|
||||
.create = cut_create,
|
||||
.destroy = cut_destroy,
|
||||
.video_render = cut_video_render,
|
||||
.audio_render = cut_audio_render,
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user