11#define DNA_DEPRECATED_ALLOW
92 data->transform->scale_x = 1;
93 data->transform->scale_y = 1;
94 data->transform->origin[0] = 0.5f;
95 data->transform->origin[1] = 0.5f;
111 printf(
"error: negative users in strip\n");
115 if (
data->stripdata) {
120 if (
data->proxy->anim) {
129 if (
data->transform) {
147 strip->
start = timeline_frame;
183 const bool do_id_user)
191 if (strip->is_effect()) {
193 sh.
free(strip, do_id_user);
196 if (strip->
sound && do_id_user) {
200 if (strip->
clip && do_id_user) {
204 if (strip->
mask && do_id_user) {
218 if (
ed->act_strip == strip) {
219 ed->act_strip =
nullptr;
276 Strip *istrip, *istrip_next;
278 for (istrip =
static_cast<Strip *
>(strip->
seqbase.
first); istrip; istrip = istrip_next) {
279 istrip_next = istrip->
next;
288 return scene ? scene->
ed :
nullptr;
293 if (scene->
ed ==
nullptr) {
337 if (strip->is_effect()) {
343 smd->mask_strip = strip_map.
lookup_default(smd->mask_strip, smd->mask_strip);
348 con->strip_ref = strip_map.
lookup_default(con->strip_ref, con->strip_ref);
362 "Sequencer tool settings");
372 return tool_settings;
378 if (tool_settings ==
nullptr) {
383 return tool_settings;
435 return ed ?
ed->current_strips() :
nullptr;
460 return static_cast<MetaStack *
>(
ed->metastack.last);
469 if (dst !=
nullptr) {
472 Strip *meta_parent = dst;
477 ed->current_meta_strip = dst;
480 ed->current_meta_strip =
nullptr;
554 if (bmain !=
nullptr) {
593 const Scene *scene_src,
603 strip_map.
add(strip, strip_new);
708 else if (strip->is_effect()) {
728 if (new_seq_list !=
nullptr) {
732 if (scene_src == scene_dst) {
747 const Scene *scene_src,
756 bmain, scene_src, scene_dst, new_seq_list, strip, dupe_flag, 0, strip_map, ctx);
760 bmain, scene_src, scene_dst, &strip_new->
seqbase, s, dupe_flag, strip_map, ctx);
767 const Scene *scene_src,
777 bmain, scene_src, scene_dst, new_seq_list, strip, dupe_flag, strip_map, ctx);
785 const Scene *scene_src,
800 bmain, scene_src, scene_dst, nseqbase, strip, dupe_flag,
flag, strip_map, ctx);
820 const Scene *scene_src,
831 bmain, scene_src, scene_dst, nseqbase, seqbase, dupe_flag,
flag, strip_map, ctx);
867 switch (strip->
type) {
905 if (
data->transform) {
970 switch (strip->
type) {
1007 if (strip->is_effect()) {
1063 if (con->strip_ref) {
1084 Main *bmain =
static_cast<Main *
>(user_data);
1088 sizeof(filepath_abs),
1122 if (strip->
sound !=
nullptr) {
1146 bool needs_update =
false;
1183 bool sequencer_is_used =
false;
1185 if (strip_iter->scene == scene && (strip_iter->flag &
SEQ_SCENE_STRIPS) != 0) {
1186 sequencer_is_used =
true;
1193 return sequencer_is_used;
1256ListBase *Editing::current_strips()
const
1265ListBase *Editing::current_channels()
1273ListBase *Editing::current_channels()
const
1282bool Strip::is_effect()
const
#define IDP_BlendDataRead(reader, prop)
void IDP_FreePropertyContent_ex(IDProperty *prop, bool do_id_user)
IDProperty * IDP_CopyProperty_ex(const IDProperty *prop, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_BlendWrite(BlendWriter *writer, const IDProperty *prop)
void BKE_layer_collection_resync_forbid()
void BKE_layer_collection_resync_allow()
void BKE_main_collection_sync(const Main *bmain)
ID * BKE_id_copy_for_duplicate(Main *bmain, ID *id, eDupli_ID_Flags duplicate_flags, int copy_flags)
void BKE_main_id_newptr_and_tag_clear(Main *bmain)
@ LIB_ID_CREATE_NO_USER_REFCOUNT
@ LIB_ID_DUPLICATE_IS_ROOT_ID
@ LIB_ID_DUPLICATE_IS_SUBPROCESS
void BKE_libblock_relink_to_newid(Main *bmain, ID *id, int remap_flag) ATTR_NONNULL()
@ ID_REMAP_SKIP_USER_CLEAR
@ ID_REMAP_FORCE_OBDATA_IN_EDITMODE
#define FOREACH_MAIN_ID_END
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
float BKE_scene_frame_get(const Scene *scene)
Scene * BKE_scene_duplicate(Main *bmain, Scene *sce, eSceneCopyMethod type, eDupli_ID_Flags duplicate_flags, uint duplicate_options)
void BKE_sound_set_scene_sound_pan_at_frame(void *handle, int frame, float pan, char animated)
void BKE_sound_set_scene_volume(struct Scene *scene, float volume)
struct bSound * BKE_sound_new_file(struct Main *bmain, const char *filepath)
void BKE_sound_ensure_scene(struct Scene *scene)
void * BKE_sound_scene_add_scene_sound_defaults(struct Scene *scene, struct Strip *sequence)
void * BKE_sound_add_scene_sound_defaults(struct Scene *scene, struct Strip *sequence)
void BKE_sound_set_scene_sound_volume_at_frame(void *handle, int frame, float volume, char animated)
void BKE_sound_update_scene_sound(void *handle, struct bSound *sound)
void BKE_sound_update_sequence_handle(void *handle, void *sound_handle)
void BKE_sound_remove_scene_sound(struct Scene *scene, void *handle)
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
#define BLI_path_join(...)
#define STRNCPY_UTF8(dst, src)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_write_struct_array(writer, struct_name, array_size, data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
#define BLO_read_struct_array(reader, struct_name, array_size, ptr_p)
#define BLO_read_struct(reader, struct_name, ptr_p)
bool BLO_write_is_undo(BlendWriter *writer)
void DEG_debug_print_eval(Depsgraph *depsgraph, const char *function_name, const char *object_name, const void *object_address)
These structs are the foundation for all linked lists in the library system.
@ SEQ_SNAP_TO_FRAME_RANGE
@ SEQ_SNAP_TO_PREVIEW_CENTER
@ SEQ_SNAP_TO_STRIPS_PREVIEW
@ SEQ_SNAP_TO_PREVIEW_BORDERS
@ SEQ_SNAP_TO_CURRENT_FRAME
@ SEQ_PROXY_TC_RECORD_RUN_NO_GAPS
@ SEQ_PROXY_TC_RECORD_RUN
@ STRIP_EFFECT_NOT_LOADED
@ SEQ_CACHE_STORE_FINAL_OUT
@ SEQ_CACHE_PREFETCH_ENABLE
@ STRIP_TYPE_GAUSSIAN_BLUR
@ STRIP_TYPE_TRANSFORM_LEGACY
@ STRIP_TYPE_OVERDROP_REMOVED
@ SEQ_TRANSFORM_FILTER_AUTO
@ SEQ_AUDIO_VOLUME_ANIMATED
#define STRIP_FONT_NOT_LOADED
@ SEQ_EDIT_SHOW_MISSING_MEDIA
@ V3D_AROUND_LOCAL_ORIGINS
Read Guarded memory(de)allocation.
BMesh const char void * data
BPy_StructRNA * depsgraph
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
ValueIterator values() const &
bool add(const Key &key, const Value &value)
Value lookup_default(const Key &key, const Value &default_value) const
void * MEM_mallocN(size_t len, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
size_t(* MEM_allocN_len)(const void *vmemh)
void MEM_freeN(void *vmemh)
void MOV_close(MovieReader *anim)
static StripData * seq_strip_alloc(int type)
void relations_strip_free_anim(Strip *strip)
static void seq_update_sound_strips(Scene *scene, Strip *strip)
Strip * lookup_meta_by_strip(Editing *ed, const Strip *key)
int time_right_handle_frame_get(const Scene *scene, const Strip *strip)
void foreach_strip(ListBase *seqbase, ForEachFunc callback, void *user_data)
static void seqbase_dupli_recursive(Main *bmain, const Scene *scene_src, Scene *scene_dst, ListBase *nseqbase, const ListBase *seqbase, const StripDuplicate dupe_flag, const int flag, blender::Map< Strip *, Strip * > &strip_map, StripDuplicateContext &ctx)
SequencerToolSettings * tool_settings_init()
bool disconnect(Strip *strip)
EffectHandle strip_effect_handle_get(Strip *strip)
void eval_strips(Depsgraph *depsgraph, Scene *scene, ListBase *seqbase)
void sound_update_bounds_all(Scene *scene)
static void strip_update_mix_sounds(Scene *scene, Strip *strip)
eSeqImageFitMethod tool_settings_fit_method_get(Scene *scene)
int retiming_keys_count(const Strip *strip)
static bool scene_sequencer_is_used(const Scene *scene, ListBase *seqbase)
static void seq_duplicate_postprocess(Main *bmain, StripDuplicateContext &ctx, blender::Map< Strip *, Strip * > &strip_map, const StripDuplicate dupe_flag)
static void seq_update_scene_strip_sound(const Scene *scene, Strip *strip)
void doversion_250_sound_proxy_update(Main *bmain, Editing *ed)
void channels_ensure(ListBase *channels)
void strip_channel_set(Strip *strip, int channel)
void media_presence_free(Scene *scene)
SequencerToolSettings * tool_settings_copy(SequencerToolSettings *tool_settings)
static bool must_update_strip_sound(Scene *scene, Strip *strip)
void blend_write(BlendWriter *writer, ListBase *seqbase)
void tool_settings_free(SequencerToolSettings *tool_settings)
Editing * editing_get(const Scene *scene)
void meta_stack_set(const Scene *scene, Strip *dst)
StripProxy * seq_strip_proxy_alloc()
void seq_prefetch_free(Scene *scene)
static bool strip_sound_update_cb(Strip *strip, void *user_data)
int time_left_handle_frame_get(const Scene *, const Strip *strip)
static void seq_free_strip(StripData *data)
void seq_free_strip_recurse(Scene *scene, Strip *strip, const bool do_id_user)
static void strip_update_sound_modifiers(Strip *strip)
void relations_invalidate_cache_raw(Scene *scene, Strip *strip)
static Strip * strip_duplicate_recursive_impl(Main *bmain, const Scene *scene_src, Scene *scene_dst, ListBase *new_seq_list, Strip *strip, const StripDuplicate dupe_flag, blender::Map< Strip *, Strip * > &strip_map, StripDuplicateContext &ctx)
static bool seq_set_strip_done_cb(Strip *strip, void *)
void strip_free(Scene *scene, Strip *strip)
void cut_one_way_connections(Strip *strip)
static void seq_strip_free_ex(Scene *scene, Strip *strip, const bool do_cache, const bool do_id_user)
MetaStack * meta_stack_active_get(const Editing *ed)
Editing * editing_ensure(Scene *scene)
void proxy_set(Strip *strip, bool value)
static bool seq_mute_sound_strips_cb(Strip *strip, void *user_data)
static MetaStack * seq_meta_stack_alloc(const Scene *scene, Strip *strip_meta)
static bool strip_doversion_250_sound_proxy_update_cb(Strip *strip, void *user_data)
void final_image_cache_destroy(Scene *scene)
void editing_free(Scene *scene, const bool do_id_user)
constexpr int MAX_CHANNELS
static void strip_update_sound_properties(const Scene *scene, const Strip *strip)
static bool strip_write_data_cb(Strip *strip, void *userdata)
bool is_strip_connected(const Strip *strip)
void modifier_blend_read_data(BlendDataReader *reader, ListBase *lb)
void preview_cache_destroy(Scene *scene)
bool modifier_persistent_uids_are_valid(const Strip &strip)
int tool_settings_pivot_point_get(Scene *scene)
void edit_update_muting(Editing *ed)
void retiming_sound_animation_data_set(const Scene *scene, const Strip *strip)
void * sound_modifier_recreator(Strip *strip, StripModifierData *smd, void *sound, bool &needs_update)
void tool_settings_fit_method_set(Scene *scene, eSeqImageFitMethod fit_method)
void channels_duplicate(ListBase *channels_dst, ListBase *channels_src)
void modifier_clear(Strip *strip)
bool is_valid_strip_channel(const Strip *strip)
short tool_settings_snap_flag_get(Scene *scene)
SequencerToolSettings * tool_settings_ensure(Scene *scene)
static bool strip_read_data_cb(Strip *strip, void *user_data)
int tool_settings_snap_distance_get(Scene *scene)
void intra_frame_cache_destroy(Scene *scene)
void source_image_cache_destroy(Scene *scene)
static void strip_lookup_free(StripLookup **lookup)
void strip_unique_name_set(Scene *scene, ListBase *seqbasep, Strip *strip)
void relations_session_uid_generate(Strip *strip)
void modifier_list_copy(Strip *strip_new, Strip *strip)
static Strip * strip_duplicate(Main *bmain, const Scene *scene_src, Scene *scene_dst, ListBase *new_seq_list, Strip *strip, const StripDuplicate dupe_flag, const int flag, blender::Map< Strip *, Strip * > &strip_map, StripDuplicateContext &ctx)
void channels_free(ListBase *channels)
Strip * strip_duplicate_recursive(Main *bmain, const Scene *scene_src, Scene *scene_dst, ListBase *new_seq_list, Strip *strip, const StripDuplicate dupe_flag)
static void seq_new_fix_links_recursive(Strip *strip, blender::Map< Strip *, Strip * > strip_map)
ListBase * active_seqbase_get(const Editing *ed)
short tool_settings_snap_mode_get(Scene *scene)
void connections_duplicate(ListBase *connections_dst, ListBase *connections_src)
Strip * meta_stack_pop(Editing *ed)
void blend_read(BlendDataReader *reader, ListBase *seqbase)
Strip * strip_alloc(ListBase *lb, int timeline_frame, int channel, int type)
void thumbnail_cache_destroy(Scene *scene)
eSeqOverlapMode tool_settings_overlap_mode_get(Scene *scene)
void modifier_blend_write(BlendWriter *writer, ListBase *modbase)
void seqbase_duplicate_recursive(Main *bmain, const Scene *scene_src, Scene *scene_dst, ListBase *nseqbase, const ListBase *seqbase, const StripDuplicate dupe_flag, const int flag)
Strip * current_meta_strip
struct ToolSettings * toolsettings
StripTransform * transform
struct MovieReader * anim
struct Stereo3dFormat * stereo3d_format
float media_playback_rate
struct SeqRetimingKey * retiming_keys
struct IDProperty * system_properties
TextVarsRuntime * runtime
void(* copy)(Strip *dst, const Strip *src, int flag)
void(* free)(Strip *strip, bool do_id_user)
blender::Set< Scene * > scenes
blender::Set< Mask * > masks
blender::Set< MovieClip * > movieclips