45 const char **r_error_str)
47 char name[
sizeof(seq_a->
name)];
50 *r_error_str =
N_(
"Strips must be the same length");
57 *r_error_str =
N_(
"Strips were not compatible");
63 *r_error_str =
N_(
"Strips were not compatible");
69 *r_error_str =
N_(
"Strips must have the same number of inputs");
75 blender::dna::shallow_swap(*seq_a, *seq_b);
111 if (seq == metaseq) {
118 if (seq->scene_sound) {
150 if (smd->mask_sequence == seq) {
151 smd->mask_sequence =
nullptr;
217 const char **r_error_str)
224 *r_error_str =
N_(
"Cannot move strip to non-meta strip");
228 if (src_seq == dst_seqm) {
229 *r_error_str =
N_(
"Strip cannot be moved into itself");
233 if (seqbase == &dst_seqm->
seqbase) {
234 *r_error_str =
N_(
"Moved strip is already inside provided meta strip");
239 *r_error_str =
N_(
"Moved strip is parent of provided meta strip");
244 *r_error_str =
N_(
"Cannot move strip to different scene");
269 if (timeline_frame < content_start) {
270 const float offset = content_start + 1 - timeline_frame;
271 seq->
start -= offset;
275 else if ((timeline_frame >= content_start) && (timeline_frame <= content_end)) {
295 if ((timeline_frame >= content_start) && (timeline_frame <= content_end)) {
298 seq->
start = timeline_frame;
302 else if (timeline_frame > content_end) {
303 const float offset = timeline_frame - content_end + 1;
304 seq->
start += offset;
315 const int timeline_frame)
325 const int timeline_frame,
353 const int timeline_frame)
355 bool input_does_intersect =
false;
360 scene, seq->
seq1, timeline_frame);
367 scene, seq->
seq2, timeline_frame);
370 return input_does_intersect;
375 const int timeline_frame,
376 const char **r_error)
381 *r_error =
"Strip is locked.";
394 *r_error =
"Splitting transition effect is not permitted.";
398 *r_error =
"Effect inputs don't overlap. Can not split such effect.";
409 const int timeline_frame,
411 const char **r_error)
424 for (
Sequence *strip : strips_old) {
444 ListBase left_strips = {
nullptr,
nullptr};
455 ListBase right_strips = {
nullptr,
nullptr};
469 for (; seq_rename; seq_rename = seq_rename->
next) {
474 while (left_seq && right_seq) {
481 else if (return_seq ==
nullptr) {
483 return_seq = right_seq;
487 left_seq = left_seq->
next;
488 right_seq = right_seq->
next;
499 const int initial_frame,
500 const bool remove_all_gaps)
509 if (remove_all_gaps) {
void BKE_sound_mute_scene_sound(void *handle, bool mute)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
#define STRNCPY(dst, src)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
int BLI_str_utf8_invalid_strip(char *str, size_t length) ATTR_NONNULL(1)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
void SEQ_animation_backup_original(Scene *scene, SeqAnimationBackup *backup)
void SEQ_free_animdata(Scene *scene, Sequence *seq)
void SEQ_animation_duplicate_backup_to_scene(Scene *scene, Sequence *seq, SeqAnimationBackup *backup)
void SEQ_animation_restore_original(Scene *scene, SeqAnimationBackup *backup)
ListBase * SEQ_channels_displayed_get(Editing *ed)
Span< Key > as_span() const
void add_multiple(Span< Key > keys)
int64_t remove_if(Predicate &&predicate)
int SEQ_effect_get_num_inputs(int seq_type)
void SEQ_iterator_set_expand(const Scene *scene, ListBase *seqbase, VectorSet< Sequence * > &strips, void seq_query_func(const Scene *scene, Sequence *seq_reference, ListBase *seqbase, VectorSet< Sequence * > &strips))
void SEQ_query_strip_effect_chain(const Scene *scene, Sequence *reference_strip, ListBase *seqbase, VectorSet< Sequence * > &strips)
bool SEQ_render_is_muted(const ListBase *channels, const Sequence *seq)
void SEQ_sequence_lookup_invalidate(const Scene *scene)
ListBase * SEQ_get_seqbase_by_seq(const Scene *scene, Sequence *seq)
void SEQ_ensure_unique_name(Sequence *seq, Scene *scene)
void SEQ_sequence_base_dupli_recursive(const Scene *scene_src, Scene *scene_dst, ListBase *nseqbase, const ListBase *seqbase, int dupe_flag, const int flag)
void SEQ_sequence_free(Scene *scene, Sequence *seq)
Editing * SEQ_editing_get(const Scene *scene)
void SEQ_add_reload_new_file(Main *bmain, Scene *scene, Sequence *seq, const bool lock_range)
blender::VectorSet< Sequence * > SEQ_get_connected_strips(const Sequence *seq)
bool SEQ_edit_remove_gaps(Scene *scene, ListBase *seqbase, const int initial_frame, const bool remove_all_gaps)
static bool seq_edit_split_operation_permitted_check(const Scene *scene, blender::Span< Sequence * > strips, const int timeline_frame, const char **r_error)
static void seq_split_set_left_hold_offset(Main *bmain, Scene *scene, Sequence *seq, int timeline_frame)
void SEQ_edit_flag_for_removal(Scene *scene, ListBase *seqbase, Sequence *seq)
bool SEQ_edit_move_strip_to_seqbase(Scene *scene, ListBase *seqbase, Sequence *seq, ListBase *dst_seqbase)
static void seq_edit_split_handle_strip_offsets(Main *bmain, Scene *scene, Sequence *left_seq, Sequence *right_seq, const int timeline_frame, const eSeqSplitMethod method)
Sequence * SEQ_edit_strip_split(Main *bmain, Scene *scene, ListBase *seqbase, Sequence *seq, const int timeline_frame, const eSeqSplitMethod method, const char **r_error)
static bool seq_edit_split_effect_inputs_intersect(const Scene *scene, const Sequence *seq, const int timeline_frame)
static bool seq_edit_split_intersect_check(const Scene *scene, const Sequence *seq, const int timeline_frame)
bool SEQ_edit_sequence_swap(Scene *scene, Sequence *seq_a, Sequence *seq_b, const char **r_error_str)
static void seq_split_set_right_hold_offset(Main *bmain, Scene *scene, Sequence *seq, int timeline_frame)
void SEQ_edit_sequence_name_set(Scene *scene, Sequence *seq, const char *new_name)
void SEQ_edit_remove_flagged_sequences(Scene *scene, ListBase *seqbase)
bool SEQ_edit_move_strip_to_meta(Scene *scene, Sequence *src_seq, Sequence *dst_seqm, const char **r_error_str)
static void seq_update_muting_recursive(ListBase *channels, ListBase *seqbasep, Sequence *metaseq, const bool mute)
void SEQ_edit_update_muting(Editing *ed)
static void sequencer_flag_users_for_removal(Scene *scene, ListBase *seqbase, Sequence *seq)
bool SEQ_exists_in_seqbase(const Sequence *seq, const ListBase *seqbase)
bool SEQ_relation_is_effect_of_strip(const Sequence *effect, const Sequence *input)
void SEQ_relations_invalidate_cache_preprocessed(Scene *scene, Sequence *seq)
int SEQ_time_strip_length_get(const Scene *scene, const Sequence *seq)
void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
void SEQ_time_left_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
int SEQ_time_left_handle_frame_get(const Scene *, const Sequence *seq)
float SEQ_time_content_end_frame_get(const Scene *scene, const Sequence *seq)
void seq_time_gap_info_get(const Scene *scene, ListBase *seqbase, const int initial_frame, GapInfo *r_gap_info)
void seq_time_effect_range_set(const Scene *scene, Sequence *seq)
float SEQ_time_start_frame_get(const Sequence *seq)
float SEQ_time_media_playback_rate_factor_get(const Scene *scene, const Sequence *seq)
int SEQ_time_right_handle_frame_get(const Scene *scene, const Sequence *seq)