Patch implements better way to control playback speed than it is possible to do with speed effect. Speed factor property can be set in Time panel. There are 2 layers of control: Option to retime movie to match scene FPS rate. Custom speed factor to control playback rate. Since playback rate is strip property, it is now possible to manipulate strip as normal one even if it is retimed. To facilitate manipulation, some functions need to consider speed factor and apply necessary corrections to strip offset or strip start. These corrections may need to be float numbers, so start and offsets must be float as well. Sound strips now use speed factor instead of pitch. This means, that strips will change length to match usable length. In addition, it is possible to group movie and sound strip and change speed of meta strip.
101 lines
2.8 KiB
C++
101 lines
2.8 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2004 Blender Foundation. All rights reserved. */
|
|
|
|
#pragma once
|
|
|
|
/** \file
|
|
* \ingroup sequencer
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct ImBuf;
|
|
struct SeqRenderData;
|
|
struct Sequence;
|
|
struct TextVars;
|
|
|
|
/* Wipe effect */
|
|
enum {
|
|
DO_SINGLE_WIPE,
|
|
DO_DOUBLE_WIPE,
|
|
/* DO_BOX_WIPE, */ /* UNUSED */
|
|
/* DO_CROSS_WIPE, */ /* UNUSED */
|
|
DO_IRIS_WIPE,
|
|
DO_CLOCK_WIPE,
|
|
};
|
|
|
|
struct SeqEffectHandle {
|
|
bool multithreaded;
|
|
bool supports_mask;
|
|
|
|
/* constructors & destructor */
|
|
/* init is _only_ called on first creation */
|
|
void (*init)(struct Sequence *seq);
|
|
|
|
/* number of input strips needed
|
|
* (called directly after construction) */
|
|
int (*num_inputs)(void);
|
|
|
|
/* load is called first time after readblenfile in
|
|
* get_sequence_effect automatically */
|
|
void (*load)(struct Sequence *seqconst);
|
|
|
|
/* duplicate */
|
|
void (*copy)(struct Sequence *dst, struct Sequence *src, int flag);
|
|
|
|
/* destruct */
|
|
void (*free)(struct Sequence *seq, bool do_id_user);
|
|
|
|
/* returns: -1: no input needed,
|
|
* 0: no early out,
|
|
* 1: out = ibuf1,
|
|
* 2: out = ibuf2 */
|
|
int (*early_out)(struct Sequence *seq, float fac);
|
|
|
|
/* sets the default `fac` value */
|
|
void (*get_default_fac)(const struct Scene *scene,
|
|
struct Sequence *seq,
|
|
float timeline_frame,
|
|
float *fac);
|
|
|
|
/* execute the effect
|
|
* sequence effects are only required to either support
|
|
* float-rects or byte-rects
|
|
* (mixed cases are handled one layer up...) */
|
|
|
|
struct ImBuf *(*execute)(const struct SeqRenderData *context,
|
|
struct Sequence *seq,
|
|
float timeline_frame,
|
|
float fac,
|
|
struct ImBuf *ibuf1,
|
|
struct ImBuf *ibuf2,
|
|
struct ImBuf *ibuf3);
|
|
|
|
struct ImBuf *(*init_execution)(const struct SeqRenderData *context,
|
|
struct ImBuf *ibuf1,
|
|
struct ImBuf *ibuf2,
|
|
struct ImBuf *ibuf3);
|
|
|
|
void (*execute_slice)(const struct SeqRenderData *context,
|
|
struct Sequence *seq,
|
|
float timeline_frame,
|
|
float fac,
|
|
struct ImBuf *ibuf1,
|
|
struct ImBuf *ibuf2,
|
|
struct ImBuf *ibuf3,
|
|
int start_line,
|
|
int total_lines,
|
|
struct ImBuf *out);
|
|
};
|
|
|
|
struct SeqEffectHandle SEQ_effect_handle_get(struct Sequence *seq);
|
|
int SEQ_effect_get_num_inputs(int seq_type);
|
|
void SEQ_effect_text_font_unload(struct TextVars *data, bool do_id_user);
|
|
void SEQ_effect_text_font_load(struct TextVars *data, bool do_id_user);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|