Blender V5.0
rna_sequencer.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cstdlib>
10
11#include "DNA_scene_types.h"
12#include "DNA_sequence_types.h"
13
14#include "BLI_math_rotation.h"
16
17#include "BLT_translation.hh"
18
19#include "BKE_animsys.h"
20
21#include "RNA_define.hh"
22#include "RNA_enum_types.hh"
23#include "RNA_types.hh"
24#include "rna_internal.hh"
25
26#include "UI_resources.hh"
27
28#include "SEQ_effects.hh"
29#include "SEQ_sequencer.hh"
30#include "SEQ_sound.hh"
31
32#include "WM_types.hh"
33
34struct EffectInfo {
35 const char *struct_name;
36 const char *ui_name;
37 const char *ui_desc;
38 void (*func)(StructRNA *);
39 int inputs;
40};
41
42/* These wrap strangely, disable formatting for fixed indentation and wrapping. */
43/* clang-format off */
44#define RNA_ENUM_SEQUENCER_VIDEO_MODIFIER_TYPE_ITEMS \
45 {eSeqModifierType_BrightContrast, "BRIGHT_CONTRAST", ICON_MOD_BRIGHTNESS_CONTRAST, "Brightness/Contrast", ""}, \
46 {eSeqModifierType_ColorBalance, "COLOR_BALANCE", ICON_MOD_COLOR_BALANCE, "Color Balance", ""}, \
47 {eSeqModifierType_Compositor, "COMPOSITOR", ICON_NODE_COMPOSITING, "Compositor", ""}, \
48 {eSeqModifierType_Curves, "CURVES", ICON_MOD_CURVES, "Curves", ""}, \
49 {eSeqModifierType_HueCorrect, "HUE_CORRECT", ICON_MOD_HUE_CORRECT, "Hue Correct", ""}, \
50 {eSeqModifierType_Mask, "MASK", ICON_MOD_MASK, "Mask", ""}, \
51 {eSeqModifierType_Tonemap, "TONEMAP", ICON_MOD_TONEMAP, "Tone Map", ""}, \
52 {eSeqModifierType_WhiteBalance, "WHITE_BALANCE", ICON_MOD_WHITE_BALANCE, "White Balance", ""}
53
54#define RNA_ENUM_SEQUENCER_AUDIO_MODIFIER_TYPE_ITEMS \
55 {eSeqModifierType_SoundEqualizer, "SOUND_EQUALIZER", ICON_NONE, "Sound Equalizer", ""}
56/* clang-format on */
57
63
68
73
75 {STRIP_COLOR_NONE, "NONE", ICON_X, "None", "Assign no color tag to the collection"},
76 {STRIP_COLOR_01, "COLOR_01", ICON_STRIP_COLOR_01, "Color 01", ""},
77 {STRIP_COLOR_02, "COLOR_02", ICON_STRIP_COLOR_02, "Color 02", ""},
78 {STRIP_COLOR_03, "COLOR_03", ICON_STRIP_COLOR_03, "Color 03", ""},
79 {STRIP_COLOR_04, "COLOR_04", ICON_STRIP_COLOR_04, "Color 04", ""},
80 {STRIP_COLOR_05, "COLOR_05", ICON_STRIP_COLOR_05, "Color 05", ""},
81 {STRIP_COLOR_06, "COLOR_06", ICON_STRIP_COLOR_06, "Color 06", ""},
82 {STRIP_COLOR_07, "COLOR_07", ICON_STRIP_COLOR_07, "Color 07", ""},
83 {STRIP_COLOR_08, "COLOR_08", ICON_STRIP_COLOR_08, "Color 08", ""},
84 {STRIP_COLOR_09, "COLOR_09", ICON_STRIP_COLOR_09, "Color 09", ""},
85 {0, nullptr, 0, nullptr, nullptr},
86};
87
90 "FIT",
91 0,
92 "Scale to Fit",
93 "Fits the image bounds inside the canvas, avoiding crops while maintaining aspect ratio"},
95 "FILL",
96 0,
97 "Scale to Fill",
98 "Fills the canvas edge-to-edge, cropping if needed, while maintaining aspect ratio"},
100 "STRETCH",
101 0,
102 "Stretch to Fill",
103 "Stretches image bounds to the canvas without preserving aspect ratio"},
105 "ORIGINAL",
106 0,
107 "Use Original Size",
108 "Display image at its original size"},
109 {0, nullptr, 0, nullptr, nullptr},
110};
111
112#ifdef RNA_RUNTIME
113
114# include <algorithm>
115
116# include <fmt/format.h>
117
118# include "DNA_vfont_types.h"
119
120# include "BLI_iterator.h"
121# include "BLI_string_utils.hh"
122
123# include "BKE_anim_data.hh"
124# include "BKE_global.hh"
125# include "BKE_idprop.hh"
126# include "BKE_lib_id.hh"
127# include "BKE_movieclip.h"
128# include "BKE_report.hh"
129
130# include "WM_api.hh"
131
132# include "DEG_depsgraph.hh"
133# include "DEG_depsgraph_build.hh"
134
135# include "IMB_imbuf.hh"
136
137# include "MOV_read.hh"
138
139# include "ED_sequencer.hh"
140
141# include "SEQ_add.hh"
142# include "SEQ_channels.hh"
143# include "SEQ_edit.hh"
144# include "SEQ_effects.hh"
145# include "SEQ_iterator.hh"
146# include "SEQ_modifier.hh"
147# include "SEQ_prefetch.hh"
148# include "SEQ_proxy.hh"
149# include "SEQ_relations.hh"
150# include "SEQ_retiming.hh"
151# include "SEQ_select.hh"
152# include "SEQ_sequencer.hh"
153# include "SEQ_sound.hh"
154# include "SEQ_thumbnail_cache.hh"
155# include "SEQ_time.hh"
156# include "SEQ_transform.hh"
157# include "SEQ_utils.hh"
158
159struct StripSearchData {
160 Strip *strip;
161 void *data;
163};
164
165static void rna_StripElement_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
166{
167 Scene *scene = (Scene *)ptr->owner_id;
169
170 if (ed) {
171 StripElem *se = (StripElem *)ptr->data;
172 Strip *strip;
173
174 /* slow but we can't avoid! */
176 if (strip) {
178 }
179 }
180}
181
182static void rna_Strip_invalidate_raw_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
183{
184 Scene *scene = (Scene *)ptr->owner_id;
186
187 if (ed) {
188 Strip *strip = (Strip *)ptr->data;
189
191 }
192}
193
194static void rna_Strip_invalidate_preprocessed_update(Main * /*bmain*/,
195 Scene * /*scene*/,
197{
198 Scene *scene = (Scene *)ptr->owner_id;
200
201 if (ed) {
202 Strip *strip = (Strip *)ptr->data;
203
205 }
206}
207
208static void rna_Strip_mute_update(bContext *C, PointerRNA *ptr)
209{
211 rna_Strip_invalidate_raw_update(nullptr, nullptr, ptr);
212}
213
214static void UNUSED_FUNCTION(rna_Strip_invalidate_composite_update)(Main * /*bmain*/,
215 Scene * /*scene*/,
217{
218 Scene *scene = (Scene *)ptr->owner_id;
220
221 if (ed) {
222 Strip *strip = (Strip *)ptr->data;
223
225 }
226}
227
228static void rna_Strip_scene_switch_update(Main *bmain, Scene *scene, PointerRNA *ptr)
229{
230 rna_Strip_invalidate_raw_update(bmain, scene, ptr);
233}
234
235static void rna_Strip_use_strip(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
236{
237 Scene *scene = reinterpret_cast<Scene *>(ptr->owner_id);
238
239 /* General update callback. */
240 rna_Strip_invalidate_raw_update(bmain, scene, ptr);
241 /* Changing recursion changes set of IDs which needs to be remapped by the copy-on-evaluation.
242 * the only way for this currently is to tag the ID for ID_RECALC_SYNC_TO_EVAL. */
244 if (ed) {
245 Strip *strip = (Strip *)ptr->data;
246 if (strip->scene != nullptr) {
247 DEG_id_tag_update(&strip->scene->id, ID_RECALC_SYNC_TO_EVAL);
248 }
249 }
250 /* The sequencer scene is to be updated as well, including new relations from the nested
251 * sequencer. */
254}
255
256static void add_strips_from_seqbase(const ListBase *seqbase, blender::Vector<Strip *> &strips)
257{
258 LISTBASE_FOREACH (Strip *, strip, seqbase) {
259 strips.append(strip);
260
261 if (strip->type == STRIP_TYPE_META) {
262 add_strips_from_seqbase(&strip->seqbase, strips);
263 }
264 }
265}
266
267struct StripsAllIterator {
268 blender::Vector<Strip *> strips;
269 int index;
270};
271
272static std::optional<std::string> rna_SequenceEditor_path(const PointerRNA * /*ptr*/)
273{
274 return "sequence_editor";
275}
276
277static void rna_SequenceEditor_strips_all_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
278{
279 Scene *scene = (Scene *)ptr->owner_id;
281
282 StripsAllIterator *strip_iter = MEM_new<StripsAllIterator>(__func__);
283 strip_iter->index = 0;
284 add_strips_from_seqbase(&ed->seqbase, strip_iter->strips);
285
286 BLI_Iterator *bli_iter = MEM_callocN<BLI_Iterator>(__func__);
287 iter->internal.custom = bli_iter;
288 bli_iter->data = strip_iter;
289
290 Strip **strip_arr = strip_iter->strips.begin();
291 bli_iter->current = *strip_arr;
292 iter->valid = bli_iter->current != nullptr;
293}
294
295static void rna_SequenceEditor_strips_all_next(CollectionPropertyIterator *iter)
296{
297 BLI_Iterator *bli_iter = static_cast<BLI_Iterator *>(iter->internal.custom);
298 StripsAllIterator *strip_iter = static_cast<StripsAllIterator *>(bli_iter->data);
299
300 strip_iter->index++;
301 Strip **strip_arr = strip_iter->strips.begin();
302 bli_iter->current = *(strip_arr + strip_iter->index);
303
304 iter->valid = bli_iter->current != nullptr && strip_iter->index < strip_iter->strips.size();
305}
306
307static PointerRNA rna_SequenceEditor_strips_all_get(CollectionPropertyIterator *iter)
308{
309 Strip *strip = static_cast<Strip *>(((BLI_Iterator *)iter->internal.custom)->current);
310 return RNA_pointer_create_with_parent(iter->parent, &RNA_Strip, strip);
311}
312
313static void rna_SequenceEditor_strips_all_end(CollectionPropertyIterator *iter)
314{
315 BLI_Iterator *bli_iter = static_cast<BLI_Iterator *>(iter->internal.custom);
316 StripsAllIterator *strip_iter = static_cast<StripsAllIterator *>(bli_iter->data);
317
318 MEM_delete(strip_iter);
319 MEM_freeN(bli_iter);
320}
321
322static bool rna_SequenceEditor_strips_all_lookup_string(PointerRNA *ptr,
323 const char *key,
324 PointerRNA *r_ptr)
325{
326 ID *id = ptr->owner_id;
327 Scene *scene = (Scene *)id;
328
329 Strip *strip = blender::seq::lookup_strip_by_name(scene->ed, key);
330 if (strip) {
331 rna_pointer_create_with_ancestors(*ptr, &RNA_Strip, strip, *r_ptr);
332 return true;
333 }
334 return false;
335}
336
337static void rna_SequenceEditor_update_cache(Main * /*bmain*/, Scene *scene, PointerRNA * /*ptr*/)
338{
339 Editing *ed = scene->ed;
340
343}
344
345static void rna_SequenceEditor_cache_settings_changed(Main * /*bmain*/,
346 Scene *scene,
347 PointerRNA * /*ptr*/)
348{
350}
351
352/* internal use */
353static int rna_Strip_elements_length(PointerRNA *ptr)
354{
355 Strip *strip = (Strip *)ptr->data;
356
357 /* Hack? copied from `sequencer.cc`, #reload_sequence_new_file(). */
358 size_t olen = MEM_allocN_len(strip->data->stripdata) / sizeof(StripElem);
359
360 /* The problem with `strip->data->len` and `strip->len` is that it's discounted from the offset
361 * (hard cut trim). */
362 return int(olen);
363}
364
365static void rna_Strip_elements_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
366{
367 Strip *strip = (Strip *)ptr->data;
369 ptr,
370 (void *)strip->data->stripdata,
371 sizeof(StripElem),
372 rna_Strip_elements_length(ptr),
373 0,
374 nullptr);
375}
376
377static int rna_Strip_retiming_keys_length(PointerRNA *ptr)
378{
380}
381
382static void rna_Strip_retiming_keys_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
383{
384 Strip *strip = (Strip *)ptr->data;
386 ptr,
387 (void *)strip->retiming_keys,
388 sizeof(SeqRetimingKey),
390 0,
391 nullptr);
392}
393
394static Strip *strip_by_key_find(Scene *scene, SeqRetimingKey *key)
395{
398
399 for (Strip *strip : strips) {
401 SeqRetimingKey *first = strip->retiming_keys;
402 SeqRetimingKey *last = strip->retiming_keys + retiming_keys_count - 1;
403
404 if (key >= first && key <= last) {
405 return strip;
406 }
407 }
408
409 return nullptr;
410}
411
412static void rna_Strip_retiming_key_remove(ID *id, SeqRetimingKey *key)
413{
414 Scene *scene = (Scene *)id;
415 Strip *strip = strip_by_key_find(scene, key);
416
417 if (strip == nullptr) {
418 return;
419 }
420
422
425}
426
427static int rna_Strip_retiming_key_frame_get(PointerRNA *ptr)
428{
429 SeqRetimingKey *key = (SeqRetimingKey *)ptr->data;
430 Scene *scene = (Scene *)ptr->owner_id;
431 Strip *strip = strip_by_key_find(scene, key);
432
433 if (strip == nullptr) {
434 return 0;
435 }
436
438}
439
440static void rna_Strip_retiming_key_frame_set(PointerRNA *ptr, int value)
441{
442 SeqRetimingKey *key = (SeqRetimingKey *)ptr->data;
443 Scene *scene = (Scene *)ptr->owner_id;
444 Strip *strip = strip_by_key_find(scene, key);
445
446 if (strip == nullptr) {
447 return;
448 }
449
450 blender::seq::retiming_key_timeline_frame_set(scene, strip, key, value, true);
452}
453
454static bool rna_SequenceEditor_selected_retiming_key_get(PointerRNA *ptr)
455{
456 Scene *scene = (Scene *)ptr->owner_id;
458}
459
460static void rna_Strip_views_format_update(Main *bmain, Scene *scene, PointerRNA *ptr)
461{
462 rna_Strip_invalidate_raw_update(bmain, scene, ptr);
463}
464
465static void do_strip_frame_change_update(Scene *scene, Strip *strip)
466{
467 ListBase *seqbase = blender::seq::get_seqbase_by_strip(scene, strip);
468
469 if (blender::seq::transform_test_overlap(scene, seqbase, strip)) {
470 blender::seq::transform_seqbase_shuffle(seqbase, strip, scene);
471 }
472
473 if (strip->type == STRIP_TYPE_SOUND_RAM) {
475 }
476}
477
478/* A simple wrapper around above func, directly usable as prop update func.
479 * Also invalidate cache if needed.
480 */
481static void rna_Strip_frame_change_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
482{
483 Scene *scene = (Scene *)ptr->owner_id;
484 do_strip_frame_change_update(scene, (Strip *)ptr->data);
485}
486
487static int rna_Strip_frame_final_start_get(PointerRNA *ptr)
488{
489 Scene *scene = (Scene *)ptr->owner_id;
490 return blender::seq::time_left_handle_frame_get(scene, (Strip *)ptr->data);
491}
492
493static int rna_Strip_frame_final_end_get(PointerRNA *ptr)
494{
495 Scene *scene = (Scene *)ptr->owner_id;
497}
498
499static void rna_Strip_start_frame_final_set(PointerRNA *ptr, int value)
500{
501 Strip *strip = (Strip *)ptr->data;
502 Scene *scene = (Scene *)ptr->owner_id;
503
504 blender::seq::time_left_handle_frame_set(scene, strip, value);
505 do_strip_frame_change_update(scene, strip);
507}
508
509static void rna_Strip_end_frame_final_set(PointerRNA *ptr, int value)
510{
511 Strip *strip = (Strip *)ptr->data;
512 Scene *scene = (Scene *)ptr->owner_id;
513
515 do_strip_frame_change_update(scene, strip);
517}
518
519static void rna_Strip_start_frame_set(PointerRNA *ptr, float value)
520{
521 Strip *strip = (Strip *)ptr->data;
522 Scene *scene = (Scene *)ptr->owner_id;
523
524 blender::seq::transform_translate_strip(scene, strip, value - strip->start);
525 do_strip_frame_change_update(scene, strip);
527}
528
529static void rna_Strip_frame_offset_start_set(PointerRNA *ptr, float value)
530{
531 Strip *strip = (Strip *)ptr->data;
532 Scene *scene = (Scene *)ptr->owner_id;
533
535 strip->startofs = value;
536}
537
538static void rna_Strip_frame_offset_end_set(PointerRNA *ptr, float value)
539{
540 Strip *strip = (Strip *)ptr->data;
541 Scene *scene = (Scene *)ptr->owner_id;
542
544 strip->endofs = value;
545}
546
547static void rna_Strip_anim_startofs_final_set(PointerRNA *ptr, int value)
548{
549 Strip *strip = (Strip *)ptr->data;
550 Scene *scene = (Scene *)ptr->owner_id;
551
552 strip->anim_startofs = std::min(value, strip->len + strip->anim_startofs);
553
554 blender::seq::add_reload_new_file(G.main, scene, strip, false);
555 do_strip_frame_change_update(scene, strip);
556}
557
558static void rna_Strip_anim_endofs_final_set(PointerRNA *ptr, int value)
559{
560 Strip *strip = (Strip *)ptr->data;
561 Scene *scene = (Scene *)ptr->owner_id;
562
563 strip->anim_endofs = std::min(value, strip->len + strip->anim_endofs);
564
565 blender::seq::add_reload_new_file(G.main, scene, strip, false);
566 do_strip_frame_change_update(scene, strip);
567}
568
569static void rna_Strip_anim_endofs_final_range(
570 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
571{
572 Strip *strip = (Strip *)ptr->data;
573
574 *min = 0;
575 *max = strip->len + strip->anim_endofs - strip->startofs - strip->endofs - 1;
576}
577
578static void rna_Strip_anim_startofs_final_range(
579 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
580{
581 Strip *strip = (Strip *)ptr->data;
582
583 *min = 0;
584 *max = strip->len + strip->anim_startofs - strip->startofs - strip->endofs - 1;
585}
586
587static void rna_Strip_frame_offset_start_range(
588 PointerRNA *ptr, float *min, float *max, float * /*softmin*/, float * /*softmax*/)
589{
590 Strip *strip = (Strip *)ptr->data;
591 *min = INT_MIN;
592 *max = strip->len - strip->endofs - 1;
593}
594
595static void rna_Strip_frame_offset_end_range(
596 PointerRNA *ptr, float *min, float *max, float * /*softmin*/, float * /*softmax*/)
597{
598 Strip *strip = (Strip *)ptr->data;
599 *min = INT_MIN;
600 *max = strip->len - strip->startofs - 1;
601}
602
603static void rna_Strip_frame_length_set(PointerRNA *ptr, int value)
604{
605 Strip *strip = (Strip *)ptr->data;
606 Scene *scene = (Scene *)ptr->owner_id;
607
609 scene, strip, blender::seq::time_left_handle_frame_get(scene, strip) + value);
610 do_strip_frame_change_update(scene, strip);
612}
613
614static int rna_Strip_frame_length_get(PointerRNA *ptr)
615{
616 Strip *strip = (Strip *)ptr->data;
617 Scene *scene = (Scene *)ptr->owner_id;
618 return blender::seq::time_right_handle_frame_get(scene, strip) -
620}
621
622static int rna_Strip_frame_duration_get(PointerRNA *ptr)
623{
624 Strip *strip = static_cast<Strip *>(ptr->data);
625 Scene *scene = reinterpret_cast<Scene *>(ptr->owner_id);
626 return blender::seq::time_strip_length_get(scene, strip);
627}
628
629static int rna_Strip_frame_editable(const PointerRNA *ptr, const char ** /*r_info*/)
630{
631 Strip *strip = (Strip *)ptr->data;
632 /* Effect strips' start frame and length must be readonly! */
634}
635
636static void rna_Strip_channel_set(PointerRNA *ptr, int value)
637{
638 Strip *strip = (Strip *)ptr->data;
639 Scene *scene = (Scene *)ptr->owner_id;
640 ListBase *seqbase = blender::seq::get_seqbase_by_strip(scene, strip);
641
642 /* check channel increment or decrement */
643 const int channel_delta = (value >= strip->channel) ? 1 : -1;
645
646 if (blender::seq::transform_test_overlap(scene, seqbase, strip)) {
647 blender::seq::transform_seqbase_shuffle_ex(seqbase, strip, scene, channel_delta);
648 }
650}
651
652static bool rna_Strip_lock_get(PointerRNA *ptr)
653{
654 Scene *scene = reinterpret_cast<Scene *>(ptr->owner_id);
655 Strip *strip = static_cast<Strip *>(ptr->data);
657 ListBase *channels = blender::seq::get_channels_by_strip(ed, strip);
658 return blender::seq::transform_is_locked(channels, strip);
659}
660
661static void rna_Strip_use_proxy_set(PointerRNA *ptr, bool value)
662{
663 Strip *strip = (Strip *)ptr->data;
664 blender::seq::proxy_set(strip, value != 0);
665}
666
667static PointerRNA rna_Strip_active_modifier_get(PointerRNA *ptr)
668{
669 const Strip *strip = ptr->data_as<Strip>();
671 return RNA_pointer_create_with_parent(*ptr, &RNA_StripModifier, smd);
672}
673
674static void rna_Strip_active_modifier_set(PointerRNA *ptr, PointerRNA value, ReportList *reports)
675{
676 Strip *strip = ptr->data_as<Strip>();
678
680
681 if (RNA_pointer_is_null(&value)) {
682 blender::seq::modifier_set_active(strip, nullptr);
683 return;
684 }
685
686 if (BLI_findindex(&strip->modifiers, smd) == -1) {
688 reports, RPT_ERROR, "Modifier \"%s\" is not in the strip's modifier list", smd->name);
689 return;
690 }
691
693}
694
695static bool transform_strip_cmp_fn(Strip *strip, void *arg_pt)
696{
697 StripSearchData *data = static_cast<StripSearchData *>(arg_pt);
698
699 if (strip->data && strip->data->transform == data->data) {
700 data->strip = strip;
701 return false; /* done so bail out */
702 }
703 return true;
704}
705
706static Strip *strip_get_by_transform(Editing *ed, StripTransform *transform)
707{
708 StripSearchData data;
709
710 data.strip = nullptr;
711 data.data = transform;
712
713 /* irritating we need to search for our strip! */
714 blender::seq::foreach_strip(&ed->seqbase, transform_strip_cmp_fn, &data);
715
716 return data.strip;
717}
718
719static std::optional<std::string> rna_StripTransform_path(const PointerRNA *ptr)
720{
721 Scene *scene = (Scene *)ptr->owner_id;
723 Strip *strip = strip_get_by_transform(ed, static_cast<StripTransform *>(ptr->data));
724
725 if (strip) {
726 char name_esc[(sizeof(strip->name) - 2) * 2];
727 BLI_str_escape(name_esc, strip->name + 2, sizeof(name_esc));
728 return fmt::format("sequence_editor.strips_all[\"{}\"].transform", name_esc);
729 }
730 return "";
731}
732
733static void rna_StripTransform_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
734{
735 Scene *scene = (Scene *)ptr->owner_id;
737 Strip *strip = strip_get_by_transform(ed, static_cast<StripTransform *>(ptr->data));
738
740}
741
742static bool crop_strip_cmp_fn(Strip *strip, void *arg_pt)
743{
744 StripSearchData *data = static_cast<StripSearchData *>(arg_pt);
745
746 if (strip->data && strip->data->crop == data->data) {
747 data->strip = strip;
748 return false; /* done so bail out */
749 }
750 return true;
751}
752
753static Strip *strip_get_by_crop(Editing *ed, StripCrop *crop)
754{
755 StripSearchData data;
756
757 data.strip = nullptr;
758 data.data = crop;
759
760 /* irritating we need to search for our strip! */
761 blender::seq::foreach_strip(&ed->seqbase, crop_strip_cmp_fn, &data);
762
763 return data.strip;
764}
765
766static std::optional<std::string> rna_StripCrop_path(const PointerRNA *ptr)
767{
768 Scene *scene = (Scene *)ptr->owner_id;
770 Strip *strip = strip_get_by_crop(ed, static_cast<StripCrop *>(ptr->data));
771
772 if (strip) {
773 char name_esc[(sizeof(strip->name) - 2) * 2];
774 BLI_str_escape(name_esc, strip->name + 2, sizeof(name_esc));
775 return fmt::format("sequence_editor.strips_all[\"{}\"].crop", name_esc);
776 }
777 return "";
778}
779
780static void rna_StripCrop_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
781{
782 Scene *scene = (Scene *)ptr->owner_id;
784 Strip *strip = strip_get_by_crop(ed, static_cast<StripCrop *>(ptr->data));
785
787}
788
789static void rna_Strip_text_font_set(PointerRNA *ptr,
790 PointerRNA ptr_value,
791 ReportList * /*reports*/)
792{
793 Strip *strip = static_cast<Strip *>(ptr->data);
794 TextVars *data = static_cast<TextVars *>(strip->effectdata);
795 VFont *value = static_cast<VFont *>(ptr_value.data);
796
798
799 id_us_plus(&value->id);
800 data->text_blf_id = STRIP_FONT_NOT_LOADED;
801 data->text_font = value;
802}
803
804/* name functions that ignore the first two characters */
805static void rna_Strip_name_get(PointerRNA *ptr, char *value)
806{
807 Strip *strip = (Strip *)ptr->data;
808 strcpy(value, strip->name + 2);
809}
810
811static int rna_Strip_name_length(PointerRNA *ptr)
812{
813 Strip *strip = (Strip *)ptr->data;
814 return strlen(strip->name + 2);
815}
816
817static void rna_Strip_name_set(PointerRNA *ptr, const char *value)
818{
819 Scene *scene = (Scene *)ptr->owner_id;
820 Strip *strip = (Strip *)ptr->data;
821 char oldname[sizeof(strip->name)];
822 AnimData *adt;
823
825
826 /* make a copy of the old name first */
827 BLI_strncpy(oldname, strip->name + 2, sizeof(strip->name) - 2);
828
829 /* copy the new name into the name slot */
830 blender::seq::edit_strip_name_set(scene, strip, value);
831
832 /* make sure the name is unique */
833 blender::seq::strip_unique_name_set(scene, &scene->ed->seqbase, strip);
834 /* fix all the animation data which may link to this */
835
836 /* Don't rename everywhere because these are per scene. */
837# if 0
839 nullptr, "sequence_editor.strips_all", oldname, strip->name + 2);
840# endif
841 adt = BKE_animdata_from_id(&scene->id);
842 if (adt) {
844 &scene->id, adt, nullptr, "sequence_editor.strips_all", oldname, strip->name + 2, 0, 0, 1);
845 }
846}
847
848static int rna_Strip_text_length(PointerRNA *ptr)
849{
850 Strip *strip = static_cast<Strip *>(ptr->data);
851 TextVars *text = static_cast<TextVars *>(strip->effectdata);
852 return text->text_len_bytes;
853}
854
855static void rna_Strip_text_get(PointerRNA *ptr, char *value)
856{
857 Strip *strip = static_cast<Strip *>(ptr->data);
858 TextVars *text = static_cast<TextVars *>(strip->effectdata);
859 memcpy(value, text->text_ptr, text->text_len_bytes + 1);
860}
861
862static void rna_Strip_text_set(PointerRNA *ptr, const char *value)
863{
864 Strip *strip = static_cast<Strip *>(ptr->data);
865 TextVars *text = static_cast<TextVars *>(strip->effectdata);
866
867 if (text->text_ptr) {
868 MEM_freeN(text->text_ptr);
869 }
870 text->text_ptr = BLI_strdup(value);
871 text->text_len_bytes = strlen(text->text_ptr);
872}
873
874static StructRNA *rna_Strip_refine(PointerRNA *ptr)
875{
876 Strip *strip = (Strip *)ptr->data;
877
878 switch (strip->type) {
879 case STRIP_TYPE_IMAGE:
880 return &RNA_ImageStrip;
881 case STRIP_TYPE_META:
882 return &RNA_MetaStrip;
883 case STRIP_TYPE_SCENE:
884 return &RNA_SceneStrip;
885 case STRIP_TYPE_MOVIE:
886 return &RNA_MovieStrip;
888 return &RNA_MovieClipStrip;
889 case STRIP_TYPE_MASK:
890 return &RNA_MaskStrip;
892 return &RNA_SoundStrip;
893 case STRIP_TYPE_CROSS:
894 return &RNA_CrossStrip;
895 case STRIP_TYPE_ADD:
896 return &RNA_AddStrip;
897 case STRIP_TYPE_SUB:
898 return &RNA_SubtractStrip;
900 return &RNA_AlphaOverStrip;
902 return &RNA_AlphaUnderStrip;
904 return &RNA_GammaCrossStrip;
905 case STRIP_TYPE_MUL:
906 return &RNA_MultiplyStrip;
908 return &RNA_MulticamStrip;
910 return &RNA_AdjustmentStrip;
911 case STRIP_TYPE_WIPE:
912 return &RNA_WipeStrip;
913 case STRIP_TYPE_GLOW:
914 return &RNA_GlowStrip;
915 case STRIP_TYPE_COLOR:
916 return &RNA_ColorStrip;
917 case STRIP_TYPE_SPEED:
918 return &RNA_SpeedControlStrip;
920 return &RNA_GaussianBlurStrip;
921 case STRIP_TYPE_TEXT:
922 return &RNA_TextStrip;
924 return &RNA_ColorMixStrip;
925 default:
926 return &RNA_Strip;
927 }
928}
929
930static std::optional<std::string> rna_Strip_path(const PointerRNA *ptr)
931{
932 const Strip *strip = (Strip *)ptr->data;
933
934 /* sequencer data comes from scene...
935 * TODO: would be nice to make SequenceEditor data a data-block of its own (for shorter paths)
936 */
937 char name_esc[(sizeof(strip->name) - 2) * 2];
938
939 BLI_str_escape(name_esc, strip->name + 2, sizeof(name_esc));
940 return fmt::format("sequence_editor.strips_all[\"{}\"]", name_esc);
941}
942
943static IDProperty **rna_Strip_idprops(PointerRNA *ptr)
944{
945 Strip *strip = static_cast<Strip *>(ptr->data);
946 return &strip->prop;
947}
948
949static IDProperty **rna_Strip_system_idprops(PointerRNA *ptr)
950{
951 Strip *strip = static_cast<Strip *>(ptr->data);
952 return &strip->system_properties;
953}
954
955static bool rna_MovieStrip_reload_if_needed(ID *scene_id, Strip *strip, Main *bmain)
956{
957 Scene *scene = (Scene *)scene_id;
958
959 bool has_reloaded;
960 bool can_produce_frames;
961
963 bmain, scene, strip, &has_reloaded, &can_produce_frames);
964
965 if (has_reloaded && can_produce_frames) {
967
970 }
971
972 return can_produce_frames;
973}
974
975static PointerRNA rna_MovieStrip_metadata_get(ID *scene_id, Strip *strip)
976{
977 if (strip == nullptr || strip->anims.first == nullptr) {
978 return PointerRNA_NULL;
979 }
980
981 StripAnim *sanim = static_cast<StripAnim *>(strip->anims.first);
982 if (sanim->anim == nullptr) {
983 return PointerRNA_NULL;
984 }
985
986 IDProperty *metadata = MOV_load_metadata(sanim->anim);
987 if (metadata == nullptr) {
988 return PointerRNA_NULL;
989 }
990
991 PointerRNA ptr = RNA_pointer_create_discrete(scene_id, &RNA_IDPropertyWrapPtr, metadata);
992 return ptr;
993}
994
995static PointerRNA rna_SequenceEditor_meta_stack_get(CollectionPropertyIterator *iter)
996{
997 ListBaseIterator *internal = &iter->internal.listbase;
998 MetaStack *ms = (MetaStack *)internal->link;
999
1000 return RNA_pointer_create_with_parent(iter->parent, &RNA_Strip, ms->parent_strip);
1001}
1002
1003/* TODO: expose strip path setting as a higher level sequencer BKE function. */
1004static void rna_Strip_filepath_set(PointerRNA *ptr, const char *value)
1005{
1006 Strip *strip = (Strip *)(ptr->data);
1008 strip->data->dirpath,
1009 sizeof(strip->data->dirpath),
1010 strip->data->stripdata->filename,
1011 sizeof(strip->data->stripdata->filename));
1012}
1013
1014static void rna_Strip_filepath_get(PointerRNA *ptr, char *value)
1015{
1016 Strip *strip = (Strip *)(ptr->data);
1017 char filepath[FILE_MAX];
1018
1020 filepath, sizeof(filepath), strip->data->dirpath, strip->data->stripdata->filename);
1021 strcpy(value, filepath);
1022}
1023
1024static int rna_Strip_filepath_length(PointerRNA *ptr)
1025{
1026 Strip *strip = (Strip *)(ptr->data);
1027 char filepath[FILE_MAX];
1028
1030 filepath, sizeof(filepath), strip->data->dirpath, strip->data->stripdata->filename);
1031 return strlen(filepath);
1032}
1033
1034static void rna_Strip_proxy_filepath_set(PointerRNA *ptr, const char *value)
1035{
1036 StripProxy *proxy = (StripProxy *)(ptr->data);
1038 value, proxy->dirpath, sizeof(proxy->dirpath), proxy->filename, sizeof(proxy->filename));
1039 if (proxy->anim) {
1040 MOV_close(proxy->anim);
1041 proxy->anim = nullptr;
1042 }
1043}
1044
1045static void rna_Strip_proxy_filepath_get(PointerRNA *ptr, char *value)
1046{
1047 StripProxy *proxy = (StripProxy *)(ptr->data);
1048 char filepath[FILE_MAX];
1049
1050 BLI_path_join(filepath, sizeof(filepath), proxy->dirpath, proxy->filename);
1051 strcpy(value, filepath);
1052}
1053
1054static int rna_Strip_proxy_filepath_length(PointerRNA *ptr)
1055{
1056 StripProxy *proxy = (StripProxy *)(ptr->data);
1057 char filepath[FILE_MAX];
1058
1059 BLI_path_join(filepath, sizeof(filepath), proxy->dirpath, proxy->filename);
1060 return strlen(filepath);
1061}
1062
1063static void rna_Strip_audio_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
1064{
1066}
1067
1068static void rna_Strip_pan_range(
1069 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
1070{
1071 Scene *scene = (Scene *)ptr->owner_id;
1072
1073 *min = -FLT_MAX;
1074 *max = FLT_MAX;
1075 *softmax = 1 + int(scene->r.ffcodecdata.audio_channels > 2);
1076 *softmin = -*softmax;
1077}
1078
1079static int rna_Strip_input_count_get(PointerRNA *ptr)
1080{
1081 Strip *strip = (Strip *)(ptr->data);
1082
1084}
1085
1086static void rna_Strip_input_set(PointerRNA *ptr,
1087 const PointerRNA &ptr_value,
1088 ReportList *reports,
1089 int input_num)
1090{
1091
1092 Strip *strip = static_cast<Strip *>(ptr->data);
1093 Strip *input = static_cast<Strip *>(ptr_value.data);
1094
1096 BKE_report(reports, RPT_ERROR, "Cannot reassign inputs: recursion detected");
1097 return;
1098 }
1099
1100 switch (input_num) {
1101 case 1:
1102 strip->input1 = input;
1103 break;
1104 case 2:
1105 strip->input2 = input;
1106 break;
1107 }
1108}
1109
1110static void rna_Strip_input_1_set(PointerRNA *ptr, PointerRNA ptr_value, ReportList *reports)
1111{
1112 rna_Strip_input_set(ptr, ptr_value, reports, 1);
1113}
1114
1115static void rna_Strip_input_2_set(PointerRNA *ptr, PointerRNA ptr_value, ReportList *reports)
1116{
1117 rna_Strip_input_set(ptr, ptr_value, reports, 2);
1118}
1119# if 0
1120static void rna_SoundStrip_filename_set(PointerRNA *ptr, const char *value)
1121{
1122 Strip *strip = (Strip *)(ptr->data);
1124 strip->data->dirpath,
1125 sizeof(strip->data->dirpath),
1126 strip->data->stripdata->name,
1127 sizeof(strip->data->stripdata->name));
1128}
1129
1130static void rna_StripElement_filename_set(PointerRNA *ptr, const char *value)
1131{
1132 StripElem *elem = (StripElem *)(ptr->data);
1133 BLI_path_split_file_part(value, elem->name, sizeof(elem->name));
1134}
1135# endif
1136
1137static void rna_Strip_reopen_files_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
1138{
1139 Scene *scene = (Scene *)ptr->owner_id;
1141
1142 blender::seq::relations_free_imbuf(scene, &ed->seqbase, false);
1143 rna_Strip_invalidate_raw_update(bmain, scene, ptr);
1144
1145 if (RNA_struct_is_a(ptr->type, &RNA_SoundStrip)) {
1146 blender::seq::sound_update_bounds(scene, static_cast<Strip *>(ptr->data));
1147 }
1148}
1149
1150static void rna_Strip_filepath_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
1151{
1152 Scene *scene = (Scene *)ptr->owner_id;
1153 Strip *strip = (Strip *)(ptr->data);
1154 blender::seq::add_reload_new_file(bmain, scene, strip, true);
1155 rna_Strip_invalidate_raw_update(bmain, scene, ptr);
1156}
1157
1158static void rna_Strip_sound_update(Main *bmain, Scene * /*active_scene*/, PointerRNA *ptr)
1159{
1160 Scene *scene = (Scene *)ptr->owner_id;
1163}
1164
1165static bool seqproxy_strip_cmp_fn(Strip *strip, void *arg_pt)
1166{
1167 StripSearchData *data = static_cast<StripSearchData *>(arg_pt);
1168
1169 if (strip->data && strip->data->proxy == data->data) {
1170 data->strip = strip;
1171 return false; /* done so bail out */
1172 }
1173 return true;
1174}
1175
1176static Strip *strip_get_by_proxy(Editing *ed, StripProxy *proxy)
1177{
1178 StripSearchData data;
1179
1180 data.strip = nullptr;
1181 data.data = proxy;
1182
1183 blender::seq::foreach_strip(&ed->seqbase, seqproxy_strip_cmp_fn, &data);
1184 return data.strip;
1185}
1186
1187static void rna_Strip_tcindex_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
1188{
1189 Scene *scene = (Scene *)ptr->owner_id;
1191 Strip *strip = strip_get_by_proxy(ed, static_cast<StripProxy *>(ptr->data));
1192
1193 blender::seq::add_reload_new_file(bmain, scene, strip, false);
1194 do_strip_frame_change_update(scene, strip);
1195}
1196
1197static void rna_StripProxy_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
1198{
1199 Scene *scene = (Scene *)ptr->owner_id;
1201 Strip *strip = strip_get_by_proxy(ed, static_cast<StripProxy *>(ptr->data));
1203}
1204
1205/* do_versions? */
1206static float rna_Strip_opacity_get(PointerRNA *ptr)
1207{
1208 Strip *strip = (Strip *)(ptr->data);
1209 return strip->blend_opacity / 100.0f;
1210}
1211static void rna_Strip_opacity_set(PointerRNA *ptr, float value)
1212{
1213 Strip *strip = (Strip *)(ptr->data);
1214 CLAMP(value, 0.0f, 1.0f);
1215 strip->blend_opacity = value * 100.0f;
1216}
1217
1218static int rna_Strip_color_tag_get(PointerRNA *ptr)
1219{
1220 Strip *strip = (Strip *)(ptr->data);
1221 return strip->color_tag;
1222}
1223
1224static void rna_Strip_color_tag_set(PointerRNA *ptr, int value)
1225{
1226 Strip *strip = (Strip *)(ptr->data);
1227 strip->color_tag = value;
1228}
1229
1230static bool colbalance_seq_cmp_fn(Strip *strip, void *arg_pt)
1231{
1232 StripSearchData *data = static_cast<StripSearchData *>(arg_pt);
1233
1234 for (StripModifierData *smd = static_cast<StripModifierData *>(strip->modifiers.first); smd;
1235 smd = smd->next)
1236 {
1237 if (smd->type == eSeqModifierType_ColorBalance) {
1239
1240 if (&cbmd->color_balance == data->data) {
1241 data->strip = strip;
1242 data->smd = smd;
1243 return false; /* done so bail out */
1244 }
1245 }
1246 }
1247
1248 return true;
1249}
1250
1251static Strip *strip_get_by_colorbalance(Editing *ed,
1253 StripModifierData **r_smd)
1254{
1255 StripSearchData data;
1256
1257 data.strip = nullptr;
1258 data.smd = nullptr;
1259 data.data = cb;
1260
1261 /* irritating we need to search for our strip! */
1262 blender::seq::foreach_strip(&ed->seqbase, colbalance_seq_cmp_fn, &data);
1263
1264 *r_smd = data.smd;
1265
1266 return data.strip;
1267}
1268
1269static std::optional<std::string> rna_StripColorBalance_path(const PointerRNA *ptr)
1270{
1271 Scene *scene = (Scene *)ptr->owner_id;
1272 StripModifierData *smd;
1274 Strip *strip = strip_get_by_colorbalance(ed, static_cast<StripColorBalance *>(ptr->data), &smd);
1275
1276 if (strip) {
1277 char name_esc[(sizeof(strip->name) - 2) * 2];
1278
1279 BLI_str_escape(name_esc, strip->name + 2, sizeof(name_esc));
1280
1281 if (!smd) {
1282 /* Path to old filter color balance. */
1283 return fmt::format("sequence_editor.strips_all[\"{}\"].color_balance", name_esc);
1284 }
1285 /* Path to modifier. */
1286 char name_esc_smd[sizeof(smd->name) * 2];
1287
1288 BLI_str_escape(name_esc_smd, smd->name, sizeof(name_esc_smd));
1289 return fmt::format("sequence_editor.strips_all[\"{}\"].modifiers[\"{}\"].color_balance",
1290 name_esc,
1291 name_esc_smd);
1292 }
1293 return "";
1294}
1295
1296static void rna_StripColorBalance_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
1297{
1298 Scene *scene = (Scene *)ptr->owner_id;
1300 StripModifierData *smd;
1301 Strip *strip = strip_get_by_colorbalance(ed, static_cast<StripColorBalance *>(ptr->data), &smd);
1302
1304}
1305
1306static void rna_SequenceEditor_overlay_lock_set(PointerRNA *ptr, bool value)
1307{
1308 Scene *scene = (Scene *)ptr->owner_id;
1310
1311 if (ed == nullptr) {
1312 return;
1313 }
1314
1315 /* convert from abs to relative and back */
1316 if ((ed->overlay_frame_flag & SEQ_EDIT_OVERLAY_FRAME_ABS) == 0 && value) {
1317 ed->overlay_frame_abs = scene->r.cfra + ed->overlay_frame_ofs;
1319 }
1320 else if ((ed->overlay_frame_flag & SEQ_EDIT_OVERLAY_FRAME_ABS) && !value) {
1321 ed->overlay_frame_ofs = ed->overlay_frame_abs - scene->r.cfra;
1323 }
1324}
1325
1326static int rna_SequenceEditor_overlay_frame_get(PointerRNA *ptr)
1327{
1328 Scene *scene = (Scene *)ptr->owner_id;
1330
1331 if (ed == nullptr) {
1332 return scene->r.cfra;
1333 }
1334
1336 return ed->overlay_frame_abs - scene->r.cfra;
1337 }
1338 else {
1339 return ed->overlay_frame_ofs;
1340 }
1341}
1342
1343static void rna_SequenceEditor_overlay_frame_set(PointerRNA *ptr, int value)
1344{
1345 Scene *scene = (Scene *)ptr->owner_id;
1347
1348 if (ed == nullptr) {
1349 return;
1350 }
1351
1353 ed->overlay_frame_abs = (scene->r.cfra + value);
1354 }
1355 else {
1356 ed->overlay_frame_ofs = value;
1357 }
1358}
1359
1360static int rna_SequenceEditor_get_cache_raw_size(PointerRNA *ptr)
1361{
1362 Scene *scene = (Scene *)ptr->owner_id;
1363 if (scene == nullptr) {
1364 return 0;
1365 }
1366 return int(blender::seq::source_image_cache_calc_memory_size(scene) / 1024 / 1024);
1367}
1368
1369static int rna_SequenceEditor_get_cache_final_size(PointerRNA *ptr)
1370{
1371 Scene *scene = (Scene *)ptr->owner_id;
1372 if (scene == nullptr) {
1373 return 0;
1374 }
1375 return int(blender::seq::final_image_cache_calc_memory_size(scene) / 1024 / 1024);
1376}
1377
1378static void rna_SequenceEditor_display_stack(ID *id,
1379 Editing *ed,
1380 ReportList *reports,
1381 Strip *strip_meta)
1382{
1383 /* Check for non-meta sequence */
1384 if (strip_meta != nullptr && strip_meta->type != STRIP_TYPE_META &&
1385 blender::seq::exists_in_seqbase(strip_meta, &ed->seqbase))
1386 {
1387 BKE_report(reports, RPT_ERROR, "Strip type must be 'META'");
1388 return;
1389 }
1390
1391 /* Get editing base of meta sequence */
1392 Scene *scene = (Scene *)id;
1393 blender::seq::meta_stack_set(scene, strip_meta);
1394 /* De-activate strip. This is to prevent strip from different timeline being drawn. */
1395 blender::seq::select_active_set(scene, nullptr);
1396
1398}
1399
1400static bool modifier_strip_cmp_fn(Strip *strip, void *arg_pt)
1401{
1402 StripSearchData *data = static_cast<StripSearchData *>(arg_pt);
1403
1404 if (BLI_findindex(&strip->modifiers, data->data) != -1) {
1405 data->strip = strip;
1406 return false; /* done so bail out */
1407 }
1408
1409 return true;
1410}
1411
1412static Strip *strip_get_by_modifier(Editing *ed, StripModifierData *smd)
1413{
1414 StripSearchData data;
1415
1416 data.strip = nullptr;
1417 data.data = smd;
1418
1419 /* irritating we need to search for our strip! */
1420 blender::seq::foreach_strip(&ed->seqbase, modifier_strip_cmp_fn, &data);
1421
1422 return data.strip;
1423}
1424
1425static StructRNA *rna_StripModifier_refine(PointerRNA *ptr)
1426{
1427 StripModifierData *smd = (StripModifierData *)ptr->data;
1428
1429 switch (smd->type) {
1431 return &RNA_ColorBalanceModifier;
1433 return &RNA_CurvesModifier;
1435 return &RNA_HueCorrectModifier;
1437 return &RNA_MaskStripModifier;
1439 return &RNA_BrightContrastModifier;
1441 return &RNA_WhiteBalanceModifier;
1443 return &RNA_SequencerTonemapModifierData;
1445 return &RNA_SoundEqualizerModifier;
1447 return &RNA_SequencerCompositorModifierData;
1448 default:
1449 return &RNA_StripModifier;
1450 }
1451}
1452
1453static std::optional<std::string> rna_StripModifier_path(const PointerRNA *ptr)
1454{
1455 Scene *scene = (Scene *)ptr->owner_id;
1457 StripModifierData *smd = static_cast<StripModifierData *>(ptr->data);
1458 Strip *strip = strip_get_by_modifier(ed, smd);
1459
1460 if (strip) {
1461 char name_esc[(sizeof(strip->name) - 2) * 2];
1462 char name_esc_smd[sizeof(smd->name) * 2];
1463
1464 BLI_str_escape(name_esc, strip->name + 2, sizeof(name_esc));
1465 BLI_str_escape(name_esc_smd, smd->name, sizeof(name_esc_smd));
1466 return fmt::format(
1467 "sequence_editor.strips_all[\"{}\"].modifiers[\"{}\"]", name_esc, name_esc_smd);
1468 }
1469 return "";
1470}
1471
1472static void rna_StripModifier_name_set(PointerRNA *ptr, const char *value)
1473{
1474 StripModifierData *smd = static_cast<StripModifierData *>(ptr->data);
1475 Scene *scene = (Scene *)ptr->owner_id;
1477 Strip *strip = strip_get_by_modifier(ed, smd);
1478 AnimData *adt;
1479 char oldname[sizeof(smd->name)];
1480
1481 /* make a copy of the old name first */
1482 STRNCPY(oldname, smd->name);
1483
1484 /* copy the new name into the name slot */
1485 STRNCPY_UTF8(smd->name, value);
1486
1487 /* make sure the name is truly unique */
1489
1490 /* fix all the animation data which may link to this */
1491 adt = BKE_animdata_from_id(&scene->id);
1492 if (adt) {
1493 char rna_path_prefix[1024];
1494
1495 char strip_name_esc[(sizeof(strip->name) - 2) * 2];
1496 BLI_str_escape(strip_name_esc, strip->name + 2, sizeof(strip_name_esc));
1497
1498 SNPRINTF(rna_path_prefix, "sequence_editor.strips_all[\"%s\"].modifiers", strip_name_esc);
1500 &scene->id, adt, nullptr, rna_path_prefix, oldname, smd->name, 0, 0, 1);
1501 }
1502}
1503
1504static void rna_StripModifier_is_active_set(PointerRNA *ptr, bool value)
1505{
1506 StripModifierData *smd = ptr->data_as<StripModifierData>();
1507
1508 if (value) {
1509 /* Disable the active flag of all other modifiers. */
1510 for (StripModifierData *prev_smd = smd->prev; prev_smd != nullptr; prev_smd = prev_smd->prev) {
1511 prev_smd->flag &= ~STRIP_MODIFIER_FLAG_ACTIVE;
1512 }
1513 for (StripModifierData *next_smd = smd->next; next_smd != nullptr; next_smd = next_smd->next) {
1514 next_smd->flag &= ~STRIP_MODIFIER_FLAG_ACTIVE;
1515 }
1516
1519 }
1520}
1521
1522static void rna_StripModifier_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
1523{
1524 /* strip from other scenes could be modified, so using active scene is not reliable */
1525 Scene *scene = (Scene *)ptr->owner_id;
1527 Strip *strip = strip_get_by_modifier(ed, static_cast<StripModifierData *>(ptr->data));
1528
1532 }
1533 else {
1535 }
1536}
1537
1538/*
1539 * Update of Curve in an EQ Sound Modifier
1540 */
1541static void rna_StripModifier_EQCurveMapping_update(Main *bmain,
1542 Scene * /*scene*/,
1543 PointerRNA *ptr)
1544{
1545 Scene *scene = (Scene *)ptr->owner_id;
1546
1550}
1551
1552static bool rna_StripModifier_otherStrip_poll(PointerRNA *ptr, PointerRNA value)
1553{
1554 Scene *scene = (Scene *)ptr->owner_id;
1556 Strip *strip = strip_get_by_modifier(ed, static_cast<StripModifierData *>(ptr->data));
1557 Strip *cur = (Strip *)value.data;
1558
1559 if ((strip == cur) || (cur->type == STRIP_TYPE_SOUND_RAM)) {
1560 return false;
1561 }
1562
1563 return true;
1564}
1565
1566static StripModifierData *rna_Strip_modifier_new(
1567 Strip *strip, bContext *C, ReportList *reports, const char *name, int type)
1568{
1570 BKE_report(reports, RPT_ERROR, "Strip type does not support modifiers");
1571
1572 return nullptr;
1573 }
1574 else {
1576 StripModifierData *smd;
1577
1578 smd = blender::seq::modifier_new(strip, name, type);
1580
1582
1584
1585 return smd;
1586 }
1587}
1588
1589static void rna_Strip_modifier_remove(Strip *strip,
1590 bContext *C,
1591 ReportList *reports,
1592 PointerRNA *smd_ptr)
1593{
1594 StripModifierData *smd = static_cast<StripModifierData *>(smd_ptr->data);
1596
1597 if (blender::seq::modifier_remove(strip, smd) == false) {
1598 BKE_report(reports, RPT_ERROR, "Modifier was not found in the stack");
1599 return;
1600 }
1601
1602 smd_ptr->invalidate();
1604
1606}
1607
1608static void rna_Strip_modifier_clear(Strip *strip, bContext *C)
1609{
1611
1613
1615
1617}
1618
1619static void rna_StripModifier_strip_set(PointerRNA *ptr, PointerRNA value, ReportList *reports)
1620{
1621 StripModifierData *smd = static_cast<StripModifierData *>(ptr->data);
1622 Scene *scene = (Scene *)ptr->owner_id;
1624 Strip *strip = strip_get_by_modifier(ed, smd);
1625 Strip *target = (Strip *)value.data;
1626
1627 if (target != nullptr && blender::seq::relations_render_loop_check(target, strip)) {
1628 BKE_report(reports, RPT_ERROR, "Recursion detected, cannot use this strip");
1629 return;
1630 }
1631
1632 smd->mask_strip = target;
1633}
1634
1635static float rna_Strip_fps_get(PointerRNA *ptr)
1636{
1637 Scene *scene = (Scene *)ptr->owner_id;
1638 Strip *strip = (Strip *)(ptr->data);
1639 return blender::seq::time_strip_fps_get(scene, strip);
1640}
1641
1642static void rna_Strip_separate(ID *id, Strip *strip_meta, Main *bmain)
1643{
1644 Scene *scene = (Scene *)id;
1645
1646 /* Find the appropriate seqbase */
1647 ListBase *seqbase = blender::seq::get_seqbase_by_strip(scene, strip_meta);
1648
1649 LISTBASE_FOREACH_MUTABLE (Strip *, strip, &strip_meta->seqbase) {
1650 blender::seq::edit_move_strip_to_seqbase(scene, &strip_meta->seqbase, strip, seqbase);
1651 }
1652
1653 blender::seq::edit_flag_for_removal(scene, seqbase, strip_meta);
1655
1656 /* Update depsgraph. */
1659
1661}
1662
1663static void rna_SequenceTimelineChannel_name_set(PointerRNA *ptr, const char *value)
1664{
1665 SeqTimelineChannel *channel = (SeqTimelineChannel *)ptr->data;
1666 Scene *scene = (Scene *)ptr->owner_id;
1668
1669 Strip *channel_owner = blender::seq::lookup_strip_by_channel_owner(ed, channel);
1670 ListBase *channels_base = &ed->channels;
1671
1672 if (channel_owner != nullptr) {
1673 channels_base = &channel_owner->channels;
1674 }
1675
1676 STRNCPY_UTF8(channel->name, value);
1677 BLI_uniquename(channels_base,
1678 channel,
1679 "Channel",
1680 '.',
1682 sizeof(channel->name));
1683}
1684
1685static void rna_SequenceTimelineChannel_mute_update(Main *bmain,
1686 Scene *active_scene,
1687 PointerRNA *ptr)
1688{
1689 Scene *scene = (Scene *)ptr->owner_id;
1692
1693 Strip *channel_owner = blender::seq::lookup_strip_by_channel_owner(ed, channel);
1694 ListBase *seqbase;
1695 if (channel_owner == nullptr) {
1696 seqbase = &ed->seqbase;
1697 }
1698 else {
1699 seqbase = &channel_owner->seqbase;
1700 }
1701
1702 LISTBASE_FOREACH (Strip *, strip, seqbase) {
1704 }
1705
1706 rna_Strip_sound_update(bmain, active_scene, ptr);
1707}
1708
1709static std::optional<std::string> rna_SeqTimelineChannel_path(const PointerRNA *ptr)
1710{
1711 Scene *scene = (Scene *)ptr->owner_id;
1712 SeqTimelineChannel *channel = (SeqTimelineChannel *)ptr->data;
1713
1714 Strip *channel_owner = blender::seq::lookup_strip_by_channel_owner(scene->ed, channel);
1715
1716 char channel_name_esc[(sizeof(channel->name)) * 2];
1717 BLI_str_escape(channel_name_esc, channel->name, sizeof(channel_name_esc));
1718
1719 if (channel_owner == nullptr) {
1720 return fmt::format("sequence_editor.channels[\"{}\"]", channel_name_esc);
1721 }
1722 char owner_name_esc[(sizeof(channel_owner->name) - 2) * 2];
1723 BLI_str_escape(owner_name_esc, channel_owner->name + 2, sizeof(owner_name_esc));
1724 return fmt::format(
1725 "sequence_editor.strips_all[\"{}\"].channels[\"{}\"]", owner_name_esc, channel_name_esc);
1726}
1727
1728static EQCurveMappingData *rna_Strip_SoundEqualizer_Curve_add(SoundEqualizerModifierData *semd,
1729 bContext * /*C*/,
1730 float min_freq,
1731 float max_freq)
1732{
1734 semd, min_freq, max_freq);
1736 return eqcmd;
1737}
1738
1739static void rna_Strip_SoundEqualizer_Curve_clear(SoundEqualizerModifierData *semd,
1740 bContext * /*C*/)
1741{
1744}
1745
1746static bool rna_CompositorModifier_node_group_poll(PointerRNA * /*ptr*/, PointerRNA value)
1747{
1748 const bNodeTree *node_tree = value.data_as<bNodeTree>();
1749 if (node_tree->type != NTREE_COMPOSIT) {
1750 return false;
1751 }
1752 return true;
1753}
1754
1755static void rna_CompositorModifier_node_group_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1756{
1757 rna_StripModifier_update(bmain, scene, ptr);
1758
1759 /* Tag depsgraph relations for an update since the modifier could now be referencing a different
1760 * node tree. */
1762
1763 /* Strips from other scenes could be modified, so use the scene of the strip as opposed to the
1764 * active scene argument. */
1765 Scene *strip_scene = reinterpret_cast<Scene *>(ptr->owner_id);
1766 Editing *ed = blender::seq::editing_get(strip_scene);
1767
1768 /* The sequencer stores a cached mapping between compositor node trees and strips that use them
1769 * as a modifier, so we need to invalidate the cache since the node tree changed. */
1771}
1772
1773#else
1774
1776{
1777 StructRNA *srna;
1778 PropertyRNA *prop;
1779
1780 srna = RNA_def_struct(brna, "StripElement", nullptr);
1781 RNA_def_struct_ui_text(srna, "Strip Element", "Sequence strip data for a single frame");
1782 RNA_def_struct_sdna(srna, "StripElem");
1783
1784 prop = RNA_def_property(srna, "filename", PROP_STRING, PROP_FILENAME);
1785 RNA_def_property_string_sdna(prop, nullptr, "filename");
1786 RNA_def_property_ui_text(prop, "Filename", "Name of the source file");
1787 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripElement_update");
1788
1789 prop = RNA_def_property(srna, "orig_width", PROP_INT, PROP_NONE);
1790 RNA_def_property_int_sdna(prop, nullptr, "orig_width");
1792 RNA_def_property_ui_text(prop, "Orig Width", "Original image width");
1793
1794 prop = RNA_def_property(srna, "orig_height", PROP_INT, PROP_NONE);
1795 RNA_def_property_int_sdna(prop, nullptr, "orig_height");
1797 RNA_def_property_ui_text(prop, "Orig Height", "Original image height");
1798
1799 prop = RNA_def_property(srna, "orig_fps", PROP_FLOAT, PROP_NONE);
1800 RNA_def_property_float_sdna(prop, nullptr, "orig_fps");
1802 RNA_def_property_ui_text(prop, "Orig FPS", "Original frames per second");
1803}
1804
1806{
1807 StructRNA *srna;
1808 PropertyRNA *prop;
1809
1810 srna = RNA_def_struct(brna, "RetimingKey", nullptr);
1812 srna,
1813 "Retiming Key",
1814 "Key mapped to particular frame that can be moved to change playback speed");
1815 RNA_def_struct_sdna(srna, "SeqRetimingKey");
1816
1817 prop = RNA_def_property(srna, "timeline_frame", PROP_INT, PROP_NONE);
1819 prop, "rna_Strip_retiming_key_frame_get", "rna_Strip_retiming_key_frame_set", nullptr);
1820 RNA_def_property_ui_text(prop, "Timeline Frame", "Position of retiming key in timeline");
1821
1822 FunctionRNA *func = RNA_def_function(srna, "remove", "rna_Strip_retiming_key_remove");
1824 RNA_def_function_ui_description(func, "Remove retiming key");
1825}
1826
1828{
1829 StructRNA *srna;
1830 PropertyRNA *prop;
1831
1832 srna = RNA_def_struct(brna, "StripCrop", nullptr);
1833 RNA_def_struct_ui_text(srna, "Strip Crop", "Cropping parameters for a sequence strip");
1834 RNA_def_struct_sdna(srna, "StripCrop");
1835
1836 prop = RNA_def_property(srna, "max_y", PROP_INT, PROP_PIXEL);
1837 RNA_def_property_int_sdna(prop, nullptr, "top");
1838 RNA_def_property_ui_text(prop, "Top", "Number of pixels to crop from the top");
1839 RNA_def_property_ui_range(prop, 0, 4096, 1, -1);
1840 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripCrop_update");
1841
1842 prop = RNA_def_property(srna, "min_y", PROP_INT, PROP_PIXEL);
1843 RNA_def_property_int_sdna(prop, nullptr, "bottom");
1844 RNA_def_property_ui_text(prop, "Bottom", "Number of pixels to crop from the bottom");
1845 RNA_def_property_ui_range(prop, 0, 4096, 1, -1);
1846 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripCrop_update");
1847
1848 prop = RNA_def_property(srna, "min_x", PROP_INT, PROP_PIXEL);
1849 RNA_def_property_int_sdna(prop, nullptr, "left");
1850 RNA_def_property_ui_text(prop, "Left", "Number of pixels to crop from the left side");
1851 RNA_def_property_ui_range(prop, 0, 4096, 1, -1);
1852 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripCrop_update");
1853
1854 prop = RNA_def_property(srna, "max_x", PROP_INT, PROP_PIXEL);
1855 RNA_def_property_int_sdna(prop, nullptr, "right");
1856 RNA_def_property_ui_text(prop, "Right", "Number of pixels to crop from the right side");
1857 RNA_def_property_ui_range(prop, 0, 4096, 1, -1);
1858 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripCrop_update");
1859
1860 RNA_def_struct_path_func(srna, "rna_StripCrop_path");
1861}
1862
1865 "AUTO",
1866 0,
1867 "Auto",
1868 "Automatically choose filter based on scaling factor"},
1869 {SEQ_TRANSFORM_FILTER_NEAREST, "NEAREST", 0, "Nearest", "Use nearest sample"},
1871 "BILINEAR",
1872 0,
1873 "Bilinear",
1874 "Interpolate between 2" BLI_STR_UTF8_MULTIPLICATION_SIGN "2 samples"},
1876 "CUBIC_MITCHELL",
1877 0,
1878 "Cubic Mitchell",
1879 "Cubic Mitchell filter on 4" BLI_STR_UTF8_MULTIPLICATION_SIGN "4 samples"},
1881 "CUBIC_BSPLINE",
1882 0,
1883 "Cubic B-Spline",
1884 "Cubic B-Spline filter (blurry but no ringing) on 4" BLI_STR_UTF8_MULTIPLICATION_SIGN
1885 "4 samples"},
1887 "BOX",
1888 0,
1889 "Box",
1890 "Averages source image samples that fall under destination pixel"},
1891 {0, nullptr, 0, nullptr, nullptr},
1892};
1893
1895{
1896 StructRNA *srna;
1897 PropertyRNA *prop;
1898
1899 srna = RNA_def_struct(brna, "StripTransform", nullptr);
1900 RNA_def_struct_ui_text(srna, "Strip Transform", "Transform parameters for a sequence strip");
1901 RNA_def_struct_sdna(srna, "StripTransform");
1902
1903 prop = RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_UNSIGNED);
1904 RNA_def_property_float_sdna(prop, nullptr, "scale_x");
1905 RNA_def_property_ui_text(prop, "Scale X", "Scale along X axis");
1906 RNA_def_property_ui_range(prop, 0, FLT_MAX, 3, 3);
1908 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripTransform_update");
1909
1910 prop = RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_UNSIGNED);
1911 RNA_def_property_float_sdna(prop, nullptr, "scale_y");
1912 RNA_def_property_ui_text(prop, "Scale Y", "Scale along Y axis");
1913 RNA_def_property_ui_range(prop, 0, FLT_MAX, 3, 3);
1915 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripTransform_update");
1916
1917 prop = RNA_def_property(srna, "offset_x", PROP_FLOAT, PROP_PIXEL);
1918 RNA_def_property_float_sdna(prop, nullptr, "xofs");
1919 RNA_def_property_ui_text(prop, "Translate X", "Move along X axis");
1920 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 100, 3);
1921 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripTransform_update");
1922
1923 prop = RNA_def_property(srna, "offset_y", PROP_FLOAT, PROP_PIXEL);
1924 RNA_def_property_float_sdna(prop, nullptr, "yofs");
1925 RNA_def_property_ui_text(prop, "Translate Y", "Move along Y axis");
1926 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 100, 3);
1927 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripTransform_update");
1928
1929 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
1930 RNA_def_property_float_sdna(prop, nullptr, "rotation");
1931 RNA_def_property_ui_text(prop, "Rotation", "Rotate around image center");
1932 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripTransform_update");
1933
1934 prop = RNA_def_property(srna, "origin", PROP_FLOAT, PROP_NONE);
1935 RNA_def_property_float_sdna(prop, nullptr, "origin");
1936 RNA_def_property_ui_text(prop, "Origin", "Origin of image for transformation");
1937 RNA_def_property_ui_range(prop, 0, 1, 1, 3);
1938 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripTransform_update");
1939
1940 prop = RNA_def_property(srna, "filter", PROP_ENUM, PROP_NONE);
1941 RNA_def_property_enum_sdna(prop, nullptr, "filter");
1944 RNA_def_property_ui_text(prop, "Filter", "Type of filter to use for image transformation");
1945 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripTransform_update");
1946
1947 RNA_def_struct_path_func(srna, "rna_StripTransform_path");
1948}
1949
1951{
1952 StructRNA *srna;
1953 PropertyRNA *prop;
1954
1955 static const EnumPropertyItem strip_tc_items[] = {
1957 "NONE",
1958 0,
1959 "None",
1960 "Ignore generated timecodes, seek in movie stream based on calculated timestamp"},
1962 "RECORD_RUN",
1963 0,
1964 "Record Run",
1965 "Seek based on timestamps read from movie stream, giving the best match between scene and "
1966 "movie times"},
1968 "RECORD_RUN_NO_GAPS",
1969 0,
1970 "Record Run No Gaps",
1971 "Effectively convert movie to an image sequence, ignoring incomplete or dropped frames, "
1972 "and changes in frame rate"},
1973 {0, nullptr, 0, nullptr, nullptr},
1974 };
1975
1976 srna = RNA_def_struct(brna, "StripProxy", nullptr);
1977 RNA_def_struct_ui_text(srna, "Strip Proxy", "Proxy parameters for a sequence strip");
1978 RNA_def_struct_sdna(srna, "StripProxy");
1979
1980 prop = RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
1981 RNA_def_property_string_sdna(prop, nullptr, "dirpath");
1982 RNA_def_property_ui_text(prop, "Directory", "Location to store the proxy files");
1984 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripProxy_update");
1985
1986 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
1987 RNA_def_property_ui_text(prop, "Path", "Location of custom proxy file");
1990 "rna_Strip_proxy_filepath_get",
1991 "rna_Strip_proxy_filepath_length",
1992 "rna_Strip_proxy_filepath_set");
1994 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripProxy_update");
1995
1996 prop = RNA_def_property(srna, "use_overwrite", PROP_BOOLEAN, PROP_NONE);
1998 RNA_def_property_ui_text(prop, "Overwrite", "Overwrite existing proxy files when building");
1999
2000 prop = RNA_def_property(srna, "build_25", PROP_BOOLEAN, PROP_NONE);
2001 RNA_def_property_boolean_sdna(prop, nullptr, "build_size_flags", SEQ_PROXY_IMAGE_SIZE_25);
2002 RNA_def_property_ui_text(prop, "25%", "Build 25% proxy resolution");
2003
2004 prop = RNA_def_property(srna, "build_50", PROP_BOOLEAN, PROP_NONE);
2005 RNA_def_property_boolean_sdna(prop, nullptr, "build_size_flags", SEQ_PROXY_IMAGE_SIZE_50);
2006 RNA_def_property_ui_text(prop, "50%", "Build 50% proxy resolution");
2007
2008 prop = RNA_def_property(srna, "build_75", PROP_BOOLEAN, PROP_NONE);
2009 RNA_def_property_boolean_sdna(prop, nullptr, "build_size_flags", SEQ_PROXY_IMAGE_SIZE_75);
2010 RNA_def_property_ui_text(prop, "75%", "Build 75% proxy resolution");
2011
2012 prop = RNA_def_property(srna, "build_100", PROP_BOOLEAN, PROP_NONE);
2013 RNA_def_property_boolean_sdna(prop, nullptr, "build_size_flags", SEQ_PROXY_IMAGE_SIZE_100);
2014 RNA_def_property_ui_text(prop, "100%", "Build 100% proxy resolution");
2015
2016 prop = RNA_def_property(srna, "build_record_run", PROP_BOOLEAN, PROP_NONE);
2017 RNA_def_property_boolean_sdna(prop, nullptr, "build_tc_flags", SEQ_PROXY_TC_RECORD_RUN);
2018 RNA_def_property_ui_text(prop, "Rec Run", "Build record run time code index");
2019
2020 prop = RNA_def_property(srna, "quality", PROP_INT, PROP_UNSIGNED);
2021 RNA_def_property_int_sdna(prop, nullptr, "quality");
2022 RNA_def_property_ui_text(prop, "Quality", "Quality of proxies to build");
2023 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
2024
2025 prop = RNA_def_property(srna, "timecode", PROP_ENUM, PROP_NONE);
2026 RNA_def_property_enum_sdna(prop, nullptr, "tc");
2027 RNA_def_property_enum_items(prop, strip_tc_items);
2028 RNA_def_property_ui_text(prop, "Timecode", "Method for reading the inputs timecode");
2029 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_tcindex_update");
2030
2031 prop = RNA_def_property(srna, "use_proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
2033 RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data");
2035 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2036
2037 prop = RNA_def_property(srna, "use_proxy_custom_file", PROP_BOOLEAN, PROP_NONE);
2039 RNA_def_property_ui_text(prop, "Proxy Custom File", "Use a custom file to read proxy data from");
2041 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2042}
2043
2045{
2046 StructRNA *srna;
2047 PropertyRNA *prop;
2048
2049 static const EnumPropertyItem method_items[] = {
2050 {SEQ_COLOR_BALANCE_METHOD_LIFTGAMMAGAIN, "LIFT_GAMMA_GAIN", 0, "Lift/Gamma/Gain", ""},
2052 "OFFSET_POWER_SLOPE",
2053 0,
2054 "Offset/Power/Slope (ASC-CDL)",
2055 "ASC-CDL standard color correction"},
2056 {0, nullptr, 0, nullptr, nullptr},
2057 };
2058
2059 srna = RNA_def_struct(brna, "StripColorBalanceData", nullptr);
2061 "Strip Color Balance Data",
2062 "Color balance parameters for a sequence strip and its modifiers");
2063 RNA_def_struct_sdna(srna, "StripColorBalance");
2064
2065 prop = RNA_def_property(srna, "correction_method", PROP_ENUM, PROP_NONE);
2066 RNA_def_property_enum_sdna(prop, nullptr, "method");
2067 RNA_def_property_enum_items(prop, method_items);
2068 RNA_def_property_ui_text(prop, "Correction Method", "");
2069 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2070
2071 prop = RNA_def_property(srna, "lift", PROP_FLOAT, PROP_COLOR_GAMMA);
2072 RNA_def_property_ui_text(prop, "Lift", "Color balance lift (shadows)");
2073 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
2075 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2076
2077 prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_COLOR_GAMMA);
2078 RNA_def_property_ui_text(prop, "Gamma", "Color balance gamma (midtones)");
2079 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
2081 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2082
2083 prop = RNA_def_property(srna, "gain", PROP_FLOAT, PROP_COLOR_GAMMA);
2084 RNA_def_property_ui_text(prop, "Gain", "Color balance gain (highlights)");
2085 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
2087 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2088
2089 prop = RNA_def_property(srna, "slope", PROP_FLOAT, PROP_COLOR_GAMMA);
2090 RNA_def_property_ui_text(prop, "Slope", "Correction for highlights");
2091 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
2093 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2094
2095 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_COLOR_GAMMA);
2096 RNA_def_property_ui_text(prop, "Offset", "Correction for entire tonal range");
2097 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
2099 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2100
2101 prop = RNA_def_property(srna, "power", PROP_FLOAT, PROP_COLOR_GAMMA);
2102 RNA_def_property_ui_text(prop, "Power", "Correction for midtones");
2104 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
2106 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2107
2108 prop = RNA_def_property(srna, "invert_lift", PROP_BOOLEAN, PROP_NONE);
2110 RNA_def_property_ui_text(prop, "Inverse Lift", "Invert the lift color");
2111 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2112
2113 prop = RNA_def_property(srna, "invert_gamma", PROP_BOOLEAN, PROP_NONE);
2115 RNA_def_property_ui_text(prop, "Inverse Gamma", "Invert the gamma color");
2116 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2117
2118 prop = RNA_def_property(srna, "invert_gain", PROP_BOOLEAN, PROP_NONE);
2120 RNA_def_property_ui_text(prop, "Inverse Gain", "Invert the gain color");
2121 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2122
2123 prop = RNA_def_property(srna, "invert_slope", PROP_BOOLEAN, PROP_NONE);
2125 RNA_def_property_ui_text(prop, "Inverse Slope", "Invert the slope color");
2126 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2127
2128 prop = RNA_def_property(srna, "invert_offset", PROP_BOOLEAN, PROP_NONE);
2130 RNA_def_property_ui_text(prop, "Inverse Offset", "Invert the offset color");
2131 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2132
2133 prop = RNA_def_property(srna, "invert_power", PROP_BOOLEAN, PROP_NONE);
2135 RNA_def_property_ui_text(prop, "Inverse Power", "Invert the power color");
2136 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripColorBalance_update");
2137
2138 /* not yet used */
2139# if 0
2140 prop = RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
2141 RNA_def_property_range(prop, 0.0f, 1.0f);
2142 RNA_def_property_ui_text(prop, "Exposure", "");
2143 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_ColorBabalnce_update");
2144
2145 prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
2146 RNA_def_property_range(prop, 0.0f, 1.0f);
2147 RNA_def_property_ui_text(prop, "Saturation", "");
2148 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_ColorBabalnce_update");
2149# endif
2150
2151 RNA_def_struct_path_func(srna, "rna_StripColorBalance_path");
2152}
2153
2155{
2156 StructRNA *srna;
2157
2158 srna = RNA_def_struct(brna, "StripColorBalance", "StripColorBalanceData");
2160 srna, "Strip Color Balance", "Color balance parameters for a sequence strip");
2161 RNA_def_struct_sdna(srna, "StripColorBalance");
2162}
2163
2165 {STRIP_BLEND_REPLACE, "REPLACE", 0, "Replace", ""},
2166 {STRIP_BLEND_CROSS, "CROSS", 0, "Cross", ""},
2168 {STRIP_BLEND_DARKEN, "DARKEN", 0, "Darken", ""},
2169 {STRIP_BLEND_MUL, "MULTIPLY", 0, "Multiply", ""},
2170 {STRIP_BLEND_COLOR_BURN, "BURN", 0, "Color Burn", ""},
2171 {STRIP_BLEND_LINEAR_BURN, "LINEAR_BURN", 0, "Linear Burn", ""},
2173 {STRIP_BLEND_LIGHTEN, "LIGHTEN", 0, "Lighten", ""},
2174 {STRIP_BLEND_SCREEN, "SCREEN", 0, "Screen", ""},
2175 {STRIP_BLEND_DODGE, "DODGE", 0, "Color Dodge", ""},
2176 {STRIP_BLEND_ADD, "ADD", 0, "Add", ""},
2178 {STRIP_BLEND_OVERLAY, "OVERLAY", 0, "Overlay", ""},
2179 {STRIP_BLEND_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""},
2180 {STRIP_BLEND_HARD_LIGHT, "HARD_LIGHT", 0, "Hard Light", ""},
2181 {STRIP_BLEND_VIVID_LIGHT, "VIVID_LIGHT", 0, "Vivid Light", ""},
2182 {STRIP_BLEND_LIN_LIGHT, "LINEAR_LIGHT", 0, "Linear Light", ""},
2183 {STRIP_BLEND_PIN_LIGHT, "PIN_LIGHT", 0, "Pin Light", ""},
2185 {STRIP_BLEND_DIFFERENCE, "DIFFERENCE", 0, "Difference", ""},
2186 {STRIP_BLEND_EXCLUSION, "EXCLUSION", 0, "Exclusion", ""},
2187 {STRIP_BLEND_SUB, "SUBTRACT", 0, "Subtract", ""},
2189 {STRIP_BLEND_HUE, "HUE", 0, "Hue", ""},
2190 {STRIP_BLEND_SATURATION, "SATURATION", 0, "Saturation", ""},
2191 {STRIP_BLEND_BLEND_COLOR, "COLOR", 0, "Color", ""},
2192 {STRIP_BLEND_VALUE, "VALUE", 0, "Value", ""},
2194 {STRIP_BLEND_ALPHAOVER, "ALPHA_OVER", 0, "Alpha Over", ""},
2195 {STRIP_BLEND_ALPHAUNDER, "ALPHA_UNDER", 0, "Alpha Under", ""},
2196 {STRIP_BLEND_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Cross", ""},
2197 {0, nullptr, 0, nullptr, nullptr},
2198};
2199
2201{
2202 StructRNA *srna;
2203 PropertyRNA *prop;
2204
2205 FunctionRNA *func;
2206 PropertyRNA *parm;
2207
2208 RNA_def_property_srna(cprop, "StripModifiers");
2209 srna = RNA_def_struct(brna, "StripModifiers", nullptr);
2210 RNA_def_struct_sdna(srna, "Strip");
2211 RNA_def_struct_ui_text(srna, "Strip Modifiers", "Collection of strip modifiers");
2212
2213 /* add modifier */
2214 func = RNA_def_function(srna, "new", "rna_Strip_modifier_new");
2216 RNA_def_function_ui_description(func, "Add a new modifier");
2217 parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the modifier");
2219 /* modifier to add */
2220 parm = RNA_def_enum(func,
2221 "type",
2224 "",
2225 "Modifier type to add");
2227 /* return type */
2228 parm = RNA_def_pointer(func, "modifier", "StripModifier", "", "Newly created modifier");
2229 RNA_def_function_return(func, parm);
2230
2231 /* remove modifier */
2232 func = RNA_def_function(srna, "remove", "rna_Strip_modifier_remove");
2234 RNA_def_function_ui_description(func, "Remove an existing modifier from the strip");
2235 /* modifier to remove */
2236 parm = RNA_def_pointer(func, "modifier", "StripModifier", "", "Modifier to remove");
2239
2240 /* clear all modifiers */
2241 func = RNA_def_function(srna, "clear", "rna_Strip_modifier_clear");
2243 RNA_def_function_ui_description(func, "Remove all modifiers from the strip");
2244
2245 /* Active modifier. */
2246 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2247 RNA_def_property_struct_type(prop, "StripModifier");
2249 prop, "rna_Strip_active_modifier_get", "rna_Strip_active_modifier_set", nullptr, nullptr);
2253 RNA_def_property_ui_text(prop, "Active Modifier", "The active strip modifier in the list");
2255}
2256
2257static void rna_def_strip(BlenderRNA *brna)
2258{
2259 StructRNA *srna;
2260 PropertyRNA *prop;
2261
2262 static const EnumPropertyItem strip_type_items[] = {
2263 {STRIP_TYPE_IMAGE, "IMAGE", 0, "Image", ""},
2264 {STRIP_TYPE_META, "META", 0, "Meta", ""},
2265 {STRIP_TYPE_SCENE, "SCENE", 0, "Scene", ""},
2266 {STRIP_TYPE_MOVIE, "MOVIE", 0, "Movie", ""},
2267 {STRIP_TYPE_MOVIECLIP, "MOVIECLIP", 0, "Clip", ""},
2268 {STRIP_TYPE_MASK, "MASK", 0, "Mask", ""},
2269 {STRIP_TYPE_SOUND_RAM, "SOUND", 0, "Sound", ""},
2270 {STRIP_TYPE_CROSS, "CROSS", 0, "Crossfade", ""},
2271 {STRIP_TYPE_ADD, "ADD", 0, "Add", ""},
2272 {STRIP_TYPE_SUB, "SUBTRACT", 0, "Subtract", ""},
2273 {STRIP_TYPE_ALPHAOVER, "ALPHA_OVER", 0, "Alpha Over", ""},
2274 {STRIP_TYPE_ALPHAUNDER, "ALPHA_UNDER", 0, "Alpha Under", ""},
2275 {STRIP_TYPE_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Crossfade", ""},
2276 {STRIP_TYPE_MUL, "MULTIPLY", 0, "Multiply", ""},
2277 {STRIP_TYPE_WIPE, "WIPE", 0, "Wipe", ""},
2278 {STRIP_TYPE_GLOW, "GLOW", 0, "Glow", ""},
2279 {STRIP_TYPE_COLOR, "COLOR", 0, "Color", ""},
2280 {STRIP_TYPE_SPEED, "SPEED", 0, "Speed", ""},
2281 {STRIP_TYPE_MULTICAM, "MULTICAM", 0, "Multicam Selector", ""},
2282 {STRIP_TYPE_ADJUSTMENT, "ADJUSTMENT", 0, "Adjustment Layer", ""},
2283 {STRIP_TYPE_GAUSSIAN_BLUR, "GAUSSIAN_BLUR", 0, "Gaussian Blur", ""},
2284 {STRIP_TYPE_TEXT, "TEXT", 0, "Text", ""},
2285 {STRIP_TYPE_COLORMIX, "COLORMIX", 0, "Color Mix", ""},
2286 {0, nullptr, 0, nullptr, nullptr},
2287 };
2288
2289 srna = RNA_def_struct(brna, "Strip", nullptr);
2290 RNA_def_struct_ui_text(srna, "Strip", "Sequence strip in the sequence editor");
2291 RNA_def_struct_refine_func(srna, "rna_Strip_refine");
2292 RNA_def_struct_path_func(srna, "rna_Strip_path");
2293 RNA_def_struct_ui_icon(srna, ICON_SEQ_SEQUENCER);
2294 RNA_def_struct_idprops_func(srna, "rna_Strip_idprops");
2295 RNA_def_struct_system_idprops_func(srna, "rna_Strip_system_idprops");
2296
2297 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2299 prop, "rna_Strip_name_get", "rna_Strip_name_length", "rna_Strip_name_set");
2301 RNA_def_property_ui_text(prop, "Name", "");
2302 RNA_def_struct_name_property(srna, prop);
2304
2305 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2307 RNA_def_property_enum_items(prop, strip_type_items);
2308 RNA_def_property_ui_text(prop, "Type", "");
2310 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
2311
2312 /* flags */
2313 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
2314 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SELECT);
2315 RNA_def_property_ui_text(prop, "Select", "");
2317
2318 prop = RNA_def_property(srna, "select_left_handle", PROP_BOOLEAN, PROP_NONE);
2319 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_LEFTSEL);
2320 RNA_def_property_ui_text(prop, "Left Handle Selected", "");
2322
2323 prop = RNA_def_property(srna, "select_right_handle", PROP_BOOLEAN, PROP_NONE);
2324 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_RIGHTSEL);
2325 RNA_def_property_ui_text(prop, "Right Handle Selected", "");
2327
2328 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
2329 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_MUTE);
2330 RNA_def_property_ui_icon(prop, ICON_CHECKBOX_HLT, -1);
2332 prop, "Mute", "Disable strip so that it cannot be viewed in the output");
2334 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_mute_update");
2335
2336 prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
2337 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_LOCK);
2338 RNA_def_property_boolean_funcs(prop, "rna_Strip_lock_get", nullptr);
2340 RNA_def_property_ui_icon(prop, ICON_UNLOCKED, true);
2341 RNA_def_property_ui_text(prop, "Lock", "Lock strip so that it cannot be transformed");
2343
2344 /* strip positioning */
2345 /* Cache has to be invalidated before and after transformation. */
2346 prop = RNA_def_property(srna, "frame_final_duration", PROP_INT, PROP_TIME);
2350 prop, "Length", "The length of the contents of this strip after the handles are applied");
2352 prop, "rna_Strip_frame_length_get", "rna_Strip_frame_length_set", nullptr);
2353 RNA_def_property_editable_func(prop, "rna_Strip_frame_editable");
2355 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2356
2357 prop = RNA_def_property(srna, "frame_duration", PROP_INT, PROP_TIME);
2358 RNA_def_property_int_funcs(prop, "rna_Strip_frame_duration_get", nullptr, nullptr);
2362 prop, "Length", "The length of the contents of this strip before the handles are applied");
2363
2364 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
2365 RNA_def_property_float_sdna(prop, nullptr, "start");
2367 RNA_def_property_ui_text(prop, "Start Frame", "X position where the strip begins");
2368 RNA_def_property_ui_range(prop, MINFRAME, MAXFRAME, 100.0f, 0);
2370 prop, nullptr, "rna_Strip_start_frame_set", nullptr); /* overlap tests and calc_seq_disp */
2371 RNA_def_property_editable_func(prop, "rna_Strip_frame_editable");
2373 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2374
2375 prop = RNA_def_property(srna, "frame_final_start", PROP_INT, PROP_TIME);
2376 RNA_def_property_int_sdna(prop, nullptr, "startdisp");
2378 prop, "rna_Strip_frame_final_start_get", "rna_Strip_start_frame_final_set", nullptr);
2379 RNA_def_property_editable_func(prop, "rna_Strip_frame_editable");
2382 prop,
2383 "Start Frame",
2384 "Start frame displayed in the sequence editor after offsets are applied, setting this is "
2385 "equivalent to moving the handle, not the actual start frame");
2386 /* overlap tests and calc_seq_disp */
2388 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2389
2390 prop = RNA_def_property(srna, "frame_final_end", PROP_INT, PROP_TIME);
2391 RNA_def_property_int_sdna(prop, nullptr, "enddisp");
2393 prop, "rna_Strip_frame_final_end_get", "rna_Strip_end_frame_final_set", nullptr);
2394 RNA_def_property_editable_func(prop, "rna_Strip_frame_editable");
2397 prop, "End Frame", "End frame displayed in the sequence editor after offsets are applied");
2398 /* overlap tests and calc_seq_disp */
2400 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2401
2402 prop = RNA_def_property(srna, "frame_offset_start", PROP_FLOAT, PROP_TIME);
2403 RNA_def_property_float_sdna(prop, nullptr, "startofs");
2404 // RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* overlap tests */
2405 RNA_def_property_ui_text(prop, "Start Offset", "");
2406 RNA_def_property_ui_range(prop, MINFRAME, MAXFRAME, 100.0f, 0);
2408 prop, nullptr, "rna_Strip_frame_offset_start_set", "rna_Strip_frame_offset_start_range");
2409 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_frame_change_update");
2410
2411 prop = RNA_def_property(srna, "frame_offset_end", PROP_FLOAT, PROP_TIME);
2412 RNA_def_property_float_sdna(prop, nullptr, "endofs");
2413 // RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* overlap tests */
2414 RNA_def_property_ui_text(prop, "End Offset", "");
2415 RNA_def_property_ui_range(prop, MINFRAME, MAXFRAME, 100.0f, 0);
2417 prop, nullptr, "rna_Strip_frame_offset_end_set", "rna_Strip_frame_offset_end_range");
2418 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_frame_change_update");
2419
2420 prop = RNA_def_property(srna, "channel", PROP_INT, PROP_UNSIGNED);
2421 RNA_def_property_int_sdna(prop, nullptr, "channel");
2424 RNA_def_property_ui_text(prop, "Channel", "Y position of the sequence strip");
2425 RNA_def_property_int_funcs(prop, nullptr, "rna_Strip_channel_set", nullptr); /* overlap test */
2427 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2428
2429 prop = RNA_def_property(srna, "use_linear_modifiers", PROP_BOOLEAN, PROP_NONE);
2432 "Use Linear Modifiers",
2433 "Calculate modifiers in linear space instead of sequencer's space");
2435 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2436
2437 /* blending */
2438
2439 prop = RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
2440 RNA_def_property_enum_sdna(prop, nullptr, "blend_mode");
2444 prop, "Blending Mode", "Method for controlling how the strip combines with other strips");
2447 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2448
2449 prop = RNA_def_property(srna, "blend_alpha", PROP_FLOAT, PROP_FACTOR);
2450 RNA_def_property_range(prop, 0.0f, 1.0f);
2453 prop, "Blend Opacity", "Percentage of how much the strip's colors affect other strips");
2454 /* stupid 0-100 -> 0-1 */
2455 RNA_def_property_float_funcs(prop, "rna_Strip_opacity_get", "rna_Strip_opacity_set", nullptr);
2457 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2458
2459 prop = RNA_def_property(srna, "effect_fader", PROP_FLOAT, PROP_FACTOR);
2460 RNA_def_property_range(prop, 0.0f, 1.0f);
2461 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3);
2462 RNA_def_property_float_sdna(prop, nullptr, "effect_fader");
2463 RNA_def_property_ui_text(prop, "Effect Fader Position", "Custom fade value");
2465 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2466
2467 prop = RNA_def_property(srna, "use_default_fade", PROP_BOOLEAN, PROP_NONE);
2470 "Use Default Fade",
2471 "Fade effect using the built-in default (usually makes the transition "
2472 "as long as the effect strip)");
2474 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2475
2476 prop = RNA_def_property(srna, "color_tag", PROP_ENUM, PROP_NONE);
2477 RNA_def_property_enum_sdna(prop, nullptr, "color_tag");
2478 RNA_def_property_enum_funcs(prop, "rna_Strip_color_tag_get", "rna_Strip_color_tag_set", nullptr);
2480 RNA_def_property_ui_text(prop, "Strip Color", "Color tag for a strip");
2482
2483 /* modifiers */
2484 prop = RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE);
2485 RNA_def_property_struct_type(prop, "StripModifier");
2486 RNA_def_property_ui_text(prop, "Modifiers", "Modifiers affecting this strip");
2487 rna_def_strip_modifiers(brna, prop);
2488
2489 prop = RNA_def_property(srna, "show_retiming_keys", PROP_BOOLEAN, PROP_NONE);
2490 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_SHOW_RETIMING);
2491 RNA_def_property_ui_text(prop, "Show Retiming Keys", "Show retiming keys, so they can be moved");
2492
2493 RNA_api_strip(srna);
2494}
2495
2496static void rna_def_channel(BlenderRNA *brna)
2497{
2498 StructRNA *srna;
2499 PropertyRNA *prop;
2500
2501 srna = RNA_def_struct(brna, "SequenceTimelineChannel", nullptr);
2502 RNA_def_struct_sdna(srna, "SeqTimelineChannel");
2503 RNA_def_struct_path_func(srna, "rna_SeqTimelineChannel_path");
2504 RNA_def_struct_ui_text(srna, "Channel", "");
2505
2506 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2508 RNA_def_property_ui_text(prop, "Name", "");
2509 RNA_def_struct_name_property(srna, prop);
2510 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_SequenceTimelineChannel_name_set");
2512
2513 prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
2514 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_CHANNEL_LOCK);
2515 RNA_def_property_ui_text(prop, "Lock channel", "");
2517
2518 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
2519 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_CHANNEL_MUTE);
2520 RNA_def_property_ui_text(prop, "Mute channel", "");
2522 prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceTimelineChannel_mute_update");
2523}
2524
2526{
2527 StructRNA *srna;
2528
2529 srna = RNA_def_struct(brna, "StripsTopLevel", nullptr);
2530 RNA_def_struct_sdna(srna, "Editing");
2531 RNA_def_struct_ui_text(srna, "Strips", "Collection of Strips");
2532
2533 RNA_api_strips(srna, false);
2534}
2535
2536static void rna_def_editor(BlenderRNA *brna)
2537{
2538 StructRNA *srna;
2539 FunctionRNA *func;
2540 PropertyRNA *parm;
2541 PropertyRNA *prop;
2542
2543 static const EnumPropertyItem editing_storage_items[] = {
2544 {0, "PER_STRIP", 0, "Per Strip", "Store proxies using per strip settings"},
2546 "PROJECT",
2547 0,
2548 "Project",
2549 "Store proxies using project directory"},
2550 {0, nullptr, 0, nullptr, nullptr},
2551 };
2552 srna = RNA_def_struct(brna, "SequenceEditor", nullptr);
2553 RNA_def_struct_ui_text(srna, "Sequence Editor", "Sequence editing data for a Scene data-block");
2554 RNA_def_struct_path_func(srna, "rna_SequenceEditor_path");
2555 RNA_def_struct_ui_icon(srna, ICON_SEQUENCE);
2556 RNA_def_struct_sdna(srna, "Editing");
2557
2559
2560 prop = RNA_def_property(srna, "strips", PROP_COLLECTION, PROP_NONE);
2561 RNA_def_property_srna(prop, "StripsTopLevel");
2562 RNA_def_property_collection_sdna(prop, nullptr, "seqbase", nullptr);
2563 RNA_def_property_struct_type(prop, "Strip");
2564 RNA_def_property_ui_text(prop, "Strips", "Top-level strips only");
2565
2566 prop = RNA_def_property(srna, "strips_all", PROP_COLLECTION, PROP_NONE);
2567 RNA_def_property_collection_sdna(prop, nullptr, "seqbase", nullptr);
2568 RNA_def_property_struct_type(prop, "Strip");
2570 prop, "All Strips", "All strips, recursively including those inside metastrips");
2572 "rna_SequenceEditor_strips_all_begin",
2573 "rna_SequenceEditor_strips_all_next",
2574 "rna_SequenceEditor_strips_all_end",
2575 "rna_SequenceEditor_strips_all_get",
2576 nullptr,
2577 nullptr,
2578 "rna_SequenceEditor_strips_all_lookup_string",
2579 nullptr);
2580
2581 prop = RNA_def_property(srna, "meta_stack", PROP_COLLECTION, PROP_NONE);
2582 RNA_def_property_collection_sdna(prop, nullptr, "metastack", nullptr);
2583 RNA_def_property_struct_type(prop, "Strip");
2585 prop, "Meta Stack", "Meta strip stack, last is currently edited meta strip");
2587 nullptr,
2588 nullptr,
2589 nullptr,
2590 "rna_SequenceEditor_meta_stack_get",
2591 nullptr,
2592 nullptr,
2593 nullptr,
2594 nullptr);
2595
2596 prop = RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE);
2597 RNA_def_property_collection_sdna(prop, nullptr, "channels", nullptr);
2598 RNA_def_property_struct_type(prop, "SequenceTimelineChannel");
2599 RNA_def_property_ui_text(prop, "Channels", "");
2600
2601 prop = RNA_def_property(srna, "active_strip", PROP_POINTER, PROP_NONE);
2602 RNA_def_property_pointer_sdna(prop, nullptr, "act_strip");
2604 RNA_def_property_ui_text(prop, "Active Strip", "Sequencer's active strip");
2605
2606 prop = RNA_def_property(srna, "selected_retiming_keys", PROP_BOOLEAN, PROP_NONE);
2607 RNA_def_property_ui_text(prop, "Retiming Key Selection Status", "");
2608 RNA_def_property_boolean_funcs(prop, "rna_SequenceEditor_selected_retiming_key_get", nullptr);
2610
2611 prop = RNA_def_property(srna, "show_overlay_frame", PROP_BOOLEAN, PROP_NONE);
2612 RNA_def_property_boolean_sdna(prop, nullptr, "overlay_frame_flag", SEQ_EDIT_OVERLAY_FRAME_SHOW);
2614 prop, "Show Overlay", "Partial overlay on top of the sequencer with a frame offset");
2616
2617 prop = RNA_def_property(srna, "use_overlay_frame_lock", PROP_BOOLEAN, PROP_NONE);
2618 RNA_def_property_boolean_sdna(prop, nullptr, "overlay_frame_flag", SEQ_EDIT_OVERLAY_FRAME_ABS);
2619 RNA_def_property_ui_text(prop, "Overlay Lock", "");
2620 RNA_def_property_boolean_funcs(prop, nullptr, "rna_SequenceEditor_overlay_lock_set");
2622
2623 prop = RNA_def_property(srna, "show_missing_media", PROP_BOOLEAN, PROP_NONE);
2625 prop, nullptr, "show_missing_media_flag", SEQ_EDIT_SHOW_MISSING_MEDIA);
2627 prop, "Show Missing Media", "Render missing images/movies with a solid magenta color");
2628 RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_update_cache");
2629
2630 /* access to fixed and relative frame */
2631 prop = RNA_def_property(srna, "overlay_frame", PROP_INT, PROP_NONE);
2632 RNA_def_property_ui_text(prop, "Overlay Offset", "Number of frames to offset");
2634 "rna_SequenceEditor_overlay_frame_get",
2635 "rna_SequenceEditor_overlay_frame_set",
2636 nullptr);
2638
2639 prop = RNA_def_property(srna, "proxy_storage", PROP_ENUM, PROP_NONE);
2640 RNA_def_property_enum_items(prop, editing_storage_items);
2641 RNA_def_property_ui_text(prop, "Proxy Storage", "How to store proxies for this project");
2643 RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_update_cache");
2644
2645 prop = RNA_def_property(srna, "proxy_dir", PROP_STRING, PROP_DIRPATH);
2646 RNA_def_property_string_sdna(prop, nullptr, "proxy_dir");
2647 RNA_def_property_ui_text(prop, "Proxy Directory", "");
2649 RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_update_cache");
2650
2651 /* cache flags */
2652
2653 prop = RNA_def_property(srna, "use_cache_raw", PROP_BOOLEAN, PROP_NONE);
2654 RNA_def_property_boolean_sdna(prop, nullptr, "cache_flag", SEQ_CACHE_STORE_RAW);
2656 "Cache Raw",
2657 "Cache raw images read from disk, for faster tweaking of strip "
2658 "parameters at the cost of memory usage");
2660 prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_cache_settings_changed");
2661
2662 prop = RNA_def_property(srna, "use_cache_final", PROP_BOOLEAN, PROP_NONE);
2663 RNA_def_property_boolean_sdna(prop, nullptr, "cache_flag", SEQ_CACHE_STORE_FINAL_OUT);
2664 RNA_def_property_ui_text(prop, "Cache Final", "Cache final image for each frame");
2666 prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_cache_settings_changed");
2667
2668 prop = RNA_def_property(srna, "use_prefetch", PROP_BOOLEAN, PROP_NONE);
2669 RNA_def_property_boolean_sdna(prop, nullptr, "cache_flag", SEQ_CACHE_PREFETCH_ENABLE);
2671 prop,
2672 "Prefetch Frames",
2673 "Render frames ahead of current frame in the background for faster playback");
2675
2676 prop = RNA_def_property(srna, "cache_raw_size", PROP_INT, PROP_NONE);
2678 RNA_def_property_int_funcs(prop, "rna_SequenceEditor_get_cache_raw_size", nullptr, nullptr);
2679 RNA_def_property_ui_text(prop, "Raw Cache Size", "Size of raw source images cache in megabytes");
2680
2681 prop = RNA_def_property(srna, "cache_final_size", PROP_INT, PROP_NONE);
2683 RNA_def_property_int_funcs(prop, "rna_SequenceEditor_get_cache_final_size", nullptr, nullptr);
2685 prop, "Final Cache Size", "Size of final rendered images cache in megabytes");
2686
2687 /* functions */
2688
2689 func = RNA_def_function(srna, "display_stack", "rna_SequenceEditor_display_stack");
2691 RNA_def_function_ui_description(func, "Display strips stack");
2692 parm = RNA_def_pointer(
2693 func, "meta_sequence", "Strip", "Meta Strip", "Meta to display its stack");
2695}
2696
2698{
2699 PropertyRNA *prop;
2700
2701 static const EnumPropertyItem alpha_mode_items[] = {
2703 "STRAIGHT",
2704 0,
2705 "Straight",
2706 "RGB channels in transparent pixels are unaffected by the alpha channel"},
2708 "PREMUL",
2709 0,
2710 "Premultiplied",
2711 "RGB channels in transparent pixels are multiplied by the alpha channel"},
2712 {0, nullptr, 0, nullptr, nullptr},
2713 };
2714
2715 prop = RNA_def_property(srna, "use_deinterlace", PROP_BOOLEAN, PROP_NONE);
2716 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_FILTERY);
2717 RNA_def_property_ui_text(prop, "Deinterlace", "Remove fields from video movies");
2718 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_reopen_files_update");
2719
2720 prop = RNA_def_property(srna, "alpha_mode", PROP_ENUM, PROP_NONE);
2721 RNA_def_property_enum_items(prop, alpha_mode_items);
2723 prop, "Alpha Mode", "Representation of alpha information in the RGBA pixels");
2724 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
2725
2726 prop = RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE);
2727 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_FLIPX);
2728 RNA_def_property_ui_text(prop, "Flip X", "Flip on the X axis");
2729 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
2730
2731 prop = RNA_def_property(srna, "use_flip_y", PROP_BOOLEAN, PROP_NONE);
2732 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_FLIPY);
2733 RNA_def_property_ui_text(prop, "Flip Y", "Flip on the Y axis");
2734 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
2735
2736 prop = RNA_def_property(srna, "use_float", PROP_BOOLEAN, PROP_NONE);
2737 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_MAKE_FLOAT);
2738 RNA_def_property_ui_text(prop, "Convert Float", "Convert input to float data");
2739 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
2740
2741 prop = RNA_def_property(srna, "use_reverse_frames", PROP_BOOLEAN, PROP_NONE);
2742 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_REVERSE_FRAMES);
2743 RNA_def_property_ui_text(prop, "Reverse Frames", "Reverse frame order");
2745 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2746
2747 prop = RNA_def_property(srna, "color_multiply", PROP_FLOAT, PROP_UNSIGNED);
2748 RNA_def_property_float_sdna(prop, nullptr, "mul");
2749 RNA_def_property_range(prop, 0.0f, 20.0f);
2751 RNA_def_property_ui_text(prop, "Multiply Colors", "");
2753 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2754
2755 prop = RNA_def_property(srna, "multiply_alpha", PROP_BOOLEAN, PROP_NONE);
2756 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_MULTIPLY_ALPHA);
2757 RNA_def_property_ui_text(prop, "Multiply Alpha", "Multiply alpha along with color channels");
2758 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
2759
2760 prop = RNA_def_property(srna, "color_saturation", PROP_FLOAT, PROP_UNSIGNED);
2761 RNA_def_property_float_sdna(prop, nullptr, "sat");
2762 RNA_def_property_range(prop, 0.0f, 20.0f);
2763 RNA_def_property_ui_range(prop, 0.0f, 2.0f, 3, 3);
2765 RNA_def_property_ui_text(prop, "Saturation", "Adjust the intensity of the input's color");
2767 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2768
2769 prop = RNA_def_property(srna, "strobe", PROP_FLOAT, PROP_NONE);
2770 RNA_def_property_range(prop, 1.0f, 30.0f);
2771 RNA_def_property_ui_text(prop, "Strobe", "Only display every nth frame");
2773 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2774
2775 prop = RNA_def_property(srna, "transform", PROP_POINTER, PROP_NONE);
2776 RNA_def_property_pointer_sdna(prop, nullptr, "data->transform");
2777 RNA_def_property_ui_text(prop, "Transform", "");
2778
2779 prop = RNA_def_property(srna, "crop", PROP_POINTER, PROP_NONE);
2780 RNA_def_property_pointer_sdna(prop, nullptr, "data->crop");
2781 RNA_def_property_ui_text(prop, "Crop", "");
2782}
2783
2784static void rna_def_proxy(StructRNA *srna)
2785{
2786 PropertyRNA *prop;
2787
2788 prop = RNA_def_property(srna, "use_proxy", PROP_BOOLEAN, PROP_NONE);
2789 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_USE_PROXY);
2791 prop, "Use Proxy / Timecode", "Use a preview proxy and/or time-code index for this strip");
2792 RNA_def_property_boolean_funcs(prop, nullptr, "rna_Strip_use_proxy_set");
2794 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2795
2796 prop = RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE);
2797 RNA_def_property_pointer_sdna(prop, nullptr, "data->proxy");
2798 RNA_def_property_ui_text(prop, "Proxy", "");
2799}
2800
2801static void rna_def_input(StructRNA *srna)
2802{
2803 PropertyRNA *prop;
2804
2805 prop = RNA_def_property(srna, "animation_offset_start", PROP_INT, PROP_UNSIGNED);
2806 RNA_def_property_int_sdna(prop, nullptr, "anim_startofs");
2809 nullptr,
2810 "rna_Strip_anim_startofs_final_set",
2811 "rna_Strip_anim_startofs_final_range"); /* overlap tests */
2812 RNA_def_property_ui_text(prop, "Animation Start Offset", "Animation start offset (trim start)");
2814 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2815
2816 prop = RNA_def_property(srna, "animation_offset_end", PROP_INT, PROP_UNSIGNED);
2817 RNA_def_property_int_sdna(prop, nullptr, "anim_endofs");
2820 nullptr,
2821 "rna_Strip_anim_endofs_final_set",
2822 "rna_Strip_anim_endofs_final_range"); /* overlap tests */
2823 RNA_def_property_ui_text(prop, "Animation End Offset", "Animation end offset (trim end)");
2825 prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_preprocessed_update");
2826}
2827
2829{
2830 PropertyRNA *prop;
2831
2832 prop = RNA_def_property(srna, "input_count", PROP_INT, PROP_UNSIGNED);
2834 RNA_def_property_int_funcs(prop, "rna_Strip_input_count_get", nullptr, nullptr);
2835
2836 if (count >= 1) {
2837 prop = RNA_def_property(srna, "input_1", PROP_POINTER, PROP_NONE);
2838 RNA_def_property_pointer_sdna(prop, nullptr, "input1");
2840 RNA_def_property_pointer_funcs(prop, nullptr, "rna_Strip_input_1_set", nullptr, nullptr);
2841 RNA_def_property_ui_text(prop, "Input 1", "First input for the effect strip");
2842 }
2843
2844 if (count >= 2) {
2845 prop = RNA_def_property(srna, "input_2", PROP_POINTER, PROP_NONE);
2846 RNA_def_property_pointer_sdna(prop, nullptr, "input2");
2848 RNA_def_property_pointer_funcs(prop, nullptr, "rna_Strip_input_2_set", nullptr, nullptr);
2849 RNA_def_property_ui_text(prop, "Input 2", "Second input for the effect strip");
2850 }
2851}
2852
2854{
2855 PropertyRNA *prop;
2856
2857 prop = RNA_def_property(srna, "colorspace_settings", PROP_POINTER, PROP_NONE);
2858 RNA_def_property_pointer_sdna(prop, nullptr, "data->colorspace_settings");
2859 RNA_def_property_struct_type(prop, "ColorManagedInputColorspaceSettings");
2860 RNA_def_property_ui_text(prop, "Color Space Settings", "Input color space settings");
2861}
2862
2864{
2865 PropertyRNA *prop;
2866
2867 prop = RNA_def_property(srna, "fps", PROP_FLOAT, PROP_NONE);
2868 RNA_def_property_ui_text(prop, "FPS", "Frames per second");
2870 RNA_def_property_float_funcs(prop, "rna_Strip_fps_get", nullptr, nullptr);
2871}
2872
2874{
2875 PropertyRNA *prop = RNA_def_property(srna, "retiming_keys", PROP_COLLECTION, PROP_NONE);
2876 RNA_def_property_collection_sdna(prop, nullptr, "retiming_keys", nullptr);
2877 RNA_def_property_struct_type(prop, "RetimingKey");
2878 RNA_def_property_ui_text(prop, "Retiming Keys", "");
2880 "rna_Strip_retiming_keys_begin",
2881 "rna_iterator_array_next",
2882 "rna_iterator_array_end",
2883 "rna_iterator_array_get",
2884 "rna_Strip_retiming_keys_length",
2885 nullptr,
2886 nullptr,
2887 nullptr);
2888 RNA_def_property_srna(prop, "RetimingKeys");
2889}
2890
2891static void rna_def_image(BlenderRNA *brna)
2892{
2893 StructRNA *srna;
2894 PropertyRNA *prop;
2895
2896 srna = RNA_def_struct(brna, "ImageStrip", "Strip");
2897 RNA_def_struct_ui_text(srna, "Image Strip", "Sequence strip to load one or more images");
2898 RNA_def_struct_sdna(srna, "Strip");
2899
2900 prop = RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
2901 RNA_def_property_string_sdna(prop, nullptr, "data->dirpath");
2902 RNA_def_property_ui_text(prop, "Directory", "");
2904 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
2905
2906 prop = RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_NONE);
2907 RNA_def_property_collection_sdna(prop, nullptr, "data->stripdata", nullptr);
2908 RNA_def_property_struct_type(prop, "StripElement");
2909 RNA_def_property_ui_text(prop, "Elements", "");
2911 "rna_Strip_elements_begin",
2912 "rna_iterator_array_next",
2913 "rna_iterator_array_end",
2914 "rna_iterator_array_get",
2915 "rna_Strip_elements_length",
2916 nullptr,
2917 nullptr,
2918 nullptr);
2919 RNA_api_strip_elements(brna, prop);
2920
2922
2923 /* multiview */
2924 prop = RNA_def_property(srna, "use_multiview", PROP_BOOLEAN, PROP_NONE);
2925 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_USE_VIEWS);
2926 RNA_def_property_ui_text(prop, "Use Multi-View", "Use Multiple Views (when available)");
2927 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_views_format_update");
2928
2929 prop = RNA_def_property(srna, "views_format", PROP_ENUM, PROP_NONE);
2930 RNA_def_property_enum_sdna(prop, nullptr, "views_format");
2932 RNA_def_property_ui_text(prop, "Views Format", "Mode to load image views");
2933 RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Strip_views_format_update");
2934
2935 prop = RNA_def_property(srna, "stereo_3d_format", PROP_POINTER, PROP_NONE);
2936 RNA_def_property_pointer_sdna(prop, nullptr, "stereo3d_format");
2938 RNA_def_property_struct_type(prop, "Stereo3dFormat");
2939 RNA_def_property_ui_text(prop, "Stereo 3D Format", "Settings for stereo 3D");
2940
2942 rna_def_proxy(srna);
2943 rna_def_input(srna);
2945}
2946
2948{
2949 StructRNA *srna;
2950
2951 srna = RNA_def_struct(brna, "StripsMeta", nullptr);
2952 RNA_def_struct_sdna(srna, "Strip");
2953 RNA_def_struct_ui_text(srna, "Strips", "Collection of Strips");
2954
2955 RNA_api_strips(srna, true);
2956}
2957
2958static void rna_def_meta(BlenderRNA *brna)
2959{
2960 StructRNA *srna;
2961 FunctionRNA *func;
2962 PropertyRNA *prop;
2963
2964 srna = RNA_def_struct(brna, "MetaStrip", "Strip");
2966 srna, "Meta Strip", "Sequence strip to group other strips as a single sequence strip");
2967 RNA_def_struct_sdna(srna, "Strip");
2968
2969 rna_def_strips_meta(brna);
2970
2971 prop = RNA_def_property(srna, "strips", PROP_COLLECTION, PROP_NONE);
2972 RNA_def_property_srna(prop, "StripsMeta");
2973 RNA_def_property_collection_sdna(prop, nullptr, "seqbase", nullptr);
2974 RNA_def_property_struct_type(prop, "Strip");
2975 RNA_def_property_ui_text(prop, "Strips", "Strips nested in meta strip");
2976
2977 prop = RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE);
2978 RNA_def_property_collection_sdna(prop, nullptr, "channels", nullptr);
2979 RNA_def_property_struct_type(prop, "SequenceTimelineChannel");
2980 RNA_def_property_ui_text(prop, "Channels", "");
2981
2982 func = RNA_def_function(srna, "separate", "rna_Strip_separate");
2984 RNA_def_function_ui_description(func, "Separate meta");
2985
2987 rna_def_proxy(srna);
2988 rna_def_input(srna);
2989}
2990
2992{
2993 PropertyRNA *prop;
2994
2995 prop = RNA_def_property(srna, "volume", PROP_FLOAT, PROP_NONE);
2996 RNA_def_property_float_sdna(prop, nullptr, "volume");
2997 RNA_def_property_range(prop, 0.0f, 100.0f);
2999 RNA_def_property_ui_text(prop, "Volume", "Playback volume of the sound");
3001 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_audio_update");
3002}
3003
3004static void rna_def_scene(BlenderRNA *brna)
3005{
3006 StructRNA *srna;
3007 PropertyRNA *prop;
3008
3009 static const EnumPropertyItem scene_input_items[] = {
3010 {0, "CAMERA", ICON_VIEW3D, "Camera", "Use the Scene's 3D camera as input"},
3012 "SEQUENCER",
3013 ICON_SEQUENCE,
3014 "Sequencer",
3015 "Use the Scene's Sequencer timeline as input"},
3016 {0, nullptr, 0, nullptr, nullptr},
3017 };
3018
3019 srna = RNA_def_struct(brna, "SceneStrip", "Strip");
3021 srna, "Scene Strip", "Sequence strip using the rendered image of a scene");
3022 RNA_def_struct_sdna(srna, "Strip");
3023
3024 prop = RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
3026 RNA_def_property_ui_text(prop, "Scene", "Scene that this strip uses");
3027 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_scene_switch_update");
3028
3029 prop = RNA_def_property(srna, "scene_camera", PROP_POINTER, PROP_NONE);
3031 RNA_def_property_pointer_funcs(prop, nullptr, nullptr, nullptr, "rna_Camera_object_poll");
3032 RNA_def_property_ui_text(prop, "Camera Override", "Override the scene's active camera");
3033 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3034
3035 prop = RNA_def_property(srna, "scene_input", PROP_ENUM, PROP_NONE);
3036 RNA_def_property_enum_bitflag_sdna(prop, nullptr, "flag");
3037 RNA_def_property_enum_items(prop, scene_input_items);
3038 RNA_def_property_ui_text(prop, "Input", "Input type to use for the Scene strip");
3039 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_use_strip");
3040
3041 prop = RNA_def_property(srna, "use_annotations", PROP_BOOLEAN, PROP_NONE);
3043 RNA_def_property_ui_text(prop, "Use Annotations", "Show Annotations in OpenGL previews");
3044 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3045
3049 rna_def_proxy(srna);
3050 rna_def_input(srna);
3051 rna_def_movie_types(srna);
3052}
3053
3054static void rna_def_movie(BlenderRNA *brna)
3055{
3056 StructRNA *srna;
3057 PropertyRNA *prop;
3058 FunctionRNA *func;
3059 PropertyRNA *parm;
3060
3061 srna = RNA_def_struct(brna, "MovieStrip", "Strip");
3062 RNA_def_struct_ui_text(srna, "Movie Strip", "Sequence strip to load a video");
3063 RNA_def_struct_sdna(srna, "Strip");
3064
3065 prop = RNA_def_property(srna, "stream_index", PROP_INT, PROP_NONE);
3066 RNA_def_property_int_sdna(prop, nullptr, "streamindex");
3067 RNA_def_property_range(prop, 0, 20);
3069 prop,
3070 "Stream Index",
3071 "For files with several movie streams, use the stream with the given index");
3072 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_reopen_files_update");
3073
3074 prop = RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_NONE);
3075 RNA_def_property_collection_sdna(prop, nullptr, "data->stripdata", nullptr);
3076 RNA_def_property_struct_type(prop, "StripElement");
3077 RNA_def_property_ui_text(prop, "Elements", "");
3079 "rna_Strip_elements_begin",
3080 "rna_iterator_array_next",
3081 "rna_iterator_array_end",
3082 "rna_iterator_array_get",
3083 "rna_Strip_elements_length",
3084 nullptr,
3085 nullptr,
3086 nullptr);
3087
3089
3090 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
3091 RNA_def_property_ui_text(prop, "File", "");
3093 prop, "rna_Strip_filepath_get", "rna_Strip_filepath_length", "rna_Strip_filepath_set");
3095 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_filepath_update");
3096
3097 func = RNA_def_function(srna, "reload_if_needed", "rna_MovieStrip_reload_if_needed");
3099 /* return type */
3100 parm = RNA_def_boolean(func,
3101 "can_produce_frames",
3102 false,
3103 "True if the strip can produce frames, False otherwise",
3104 "");
3105 RNA_def_function_return(func, parm);
3106
3107 /* metadata */
3108 func = RNA_def_function(srna, "metadata", "rna_MovieStrip_metadata_get");
3110 RNA_def_function_ui_description(func, "Retrieve metadata of the movie file");
3111 /* return type */
3112 parm = RNA_def_pointer(
3113 func, "metadata", "IDPropertyWrapPtr", "", "Dict-like object containing the metadata");
3115 RNA_def_function_return(func, parm);
3116
3117 /* multiview */
3118 prop = RNA_def_property(srna, "use_multiview", PROP_BOOLEAN, PROP_NONE);
3119 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_USE_VIEWS);
3120 RNA_def_property_ui_text(prop, "Use Multi-View", "Use Multiple Views (when available)");
3121 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_views_format_update");
3122
3123 prop = RNA_def_property(srna, "views_format", PROP_ENUM, PROP_NONE);
3124 RNA_def_property_enum_sdna(prop, nullptr, "views_format");
3126 RNA_def_property_ui_text(prop, "Views Format", "Mode to load movie views");
3127 RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Strip_views_format_update");
3128
3129 prop = RNA_def_property(srna, "stereo_3d_format", PROP_POINTER, PROP_NONE);
3130 RNA_def_property_pointer_sdna(prop, nullptr, "stereo3d_format");
3132 RNA_def_property_struct_type(prop, "Stereo3dFormat");
3133 RNA_def_property_ui_text(prop, "Stereo 3D Format", "Settings for stereo 3D");
3134
3136 rna_def_proxy(srna);
3137 rna_def_input(srna);
3139 rna_def_movie_types(srna);
3140}
3141
3143{
3144 StructRNA *srna;
3145 PropertyRNA *prop;
3146
3147 srna = RNA_def_struct(brna, "MovieClipStrip", "Strip");
3149 srna, "MovieClip Strip", "Sequence strip to load a video from the clip editor");
3150 RNA_def_struct_sdna(srna, "Strip");
3151
3152 prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
3154 RNA_def_property_ui_text(prop, "Movie Clip", "Movie clip that this strip uses");
3155 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3156
3157 prop = RNA_def_property(srna, "undistort", PROP_BOOLEAN, PROP_NONE);
3159 RNA_def_property_ui_text(prop, "Undistort Clip", "Use the undistorted version of the clip");
3160 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3161
3162 prop = RNA_def_property(srna, "stabilize2d", PROP_BOOLEAN, PROP_NONE);
3164 RNA_def_property_ui_text(prop, "Stabilize 2D Clip", "Use the 2D stabilized version of the clip");
3165 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3166
3168 rna_def_input(srna);
3169 rna_def_movie_types(srna);
3170}
3171
3172static void rna_def_mask(BlenderRNA *brna)
3173{
3174 StructRNA *srna;
3175 PropertyRNA *prop;
3176
3177 srna = RNA_def_struct(brna, "MaskStrip", "Strip");
3178 RNA_def_struct_ui_text(srna, "Mask Strip", "Sequence strip to load a video from a mask");
3179 RNA_def_struct_sdna(srna, "Strip");
3180
3181 prop = RNA_def_property(srna, "mask", PROP_POINTER, PROP_NONE);
3183 RNA_def_property_ui_text(prop, "Mask", "Mask that this strip uses");
3184 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3185
3187 rna_def_input(srna);
3188}
3189
3190static void rna_def_sound(BlenderRNA *brna)
3191{
3192 StructRNA *srna;
3193 PropertyRNA *prop;
3194
3195 srna = RNA_def_struct(brna, "SoundStrip", "Strip");
3197 srna, "Sound Strip", "Sequence strip defining a sound to be played over a period of time");
3198 RNA_def_struct_sdna(srna, "Strip");
3199
3200 prop = RNA_def_property(srna, "sound", PROP_POINTER, PROP_NONE);
3202 RNA_def_property_struct_type(prop, "Sound");
3203 RNA_def_property_ui_text(prop, "Sound", "Sound data-block used by this strip");
3204 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_sound_update");
3205
3207
3208 prop = RNA_def_property(srna, "pan", PROP_FLOAT, PROP_NONE);
3209 RNA_def_property_float_sdna(prop, nullptr, "pan");
3211 RNA_def_property_ui_range(prop, -2, 2, 1, 2);
3212 RNA_def_property_ui_text(prop, "Pan", "Playback panning of the sound (only for Mono sources)");
3214 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_Strip_pan_range");
3215 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_audio_update");
3216
3217 prop = RNA_def_property(srna, "sound_offset", PROP_FLOAT, PROP_TIME_ABSOLUTE);
3218 RNA_def_property_float_sdna(prop, nullptr, "sound_offset");
3221 RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); /* not meant to be animated */
3223 prop,
3224 "Sound Offset",
3225 "Offset of the sound from the beginning of the strip, expressed in seconds");
3227 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_audio_update");
3228
3229 prop = RNA_def_property(srna, "show_waveform", PROP_BOOLEAN, PROP_NONE);
3232 prop, "Display Waveform", "Display the audio waveform inside the strip");
3234
3235 prop = RNA_def_property(srna, "pitch_correction", PROP_BOOLEAN, PROP_NONE);
3238 prop,
3239 "Preserve Pitch",
3240 "Maintain the original pitch of the audio when changing playback speed");
3241 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_sound_update");
3243 rna_def_input(srna);
3244}
3245
3246static void rna_def_effect(BlenderRNA *brna)
3247{
3248 StructRNA *srna;
3249
3250 srna = RNA_def_struct(brna, "EffectStrip", "Strip");
3252 srna,
3253 "Effect Strip",
3254 "Sequence strip applying an effect on the images created by other strips");
3255 RNA_def_struct_sdna(srna, "Strip");
3256
3258 rna_def_proxy(srna);
3259}
3260
3261static void rna_def_multicam(StructRNA *srna)
3262{
3263 PropertyRNA *prop;
3264
3265 prop = RNA_def_property(srna, "multicam_source", PROP_INT, PROP_UNSIGNED);
3266 RNA_def_property_int_sdna(prop, nullptr, "multicam_source");
3268 RNA_def_property_ui_text(prop, "Multicam Source Channel", "");
3269 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3270
3271 rna_def_input(srna);
3272}
3273
3274static void rna_def_wipe(StructRNA *srna)
3275{
3276 PropertyRNA *prop;
3277
3278 static const EnumPropertyItem wipe_type_items[] = {
3279 {SEQ_WIPE_SINGLE, "SINGLE", 0, "Single", ""},
3280 {SEQ_WIPE_DOUBLE, "DOUBLE", 0, "Double", ""},
3281 /* not used yet {SEQ_WIPE_BOX, "BOX", 0, "Box", ""}, */
3282 /* not used yet {SEQ_WIPE_CROSS, "CROSS", 0, "Cross", ""}, */
3283 {SEQ_WIPE_IRIS, "IRIS", 0, "Iris", ""},
3284 {SEQ_WIPE_CLOCK, "CLOCK", 0, "Clock", ""},
3285 {0, nullptr, 0, nullptr, nullptr},
3286 };
3287
3288 static const EnumPropertyItem wipe_direction_items[] = {
3289 {0, "OUT", 0, "Out", ""},
3290 {1, "IN", 0, "In", ""},
3291 {0, nullptr, 0, nullptr, nullptr},
3292 };
3293
3294 RNA_def_struct_sdna_from(srna, "WipeVars", "effectdata");
3295
3296 prop = RNA_def_property(srna, "blur_width", PROP_FLOAT, PROP_FACTOR);
3297 RNA_def_property_float_sdna(prop, nullptr, "edgeWidth");
3298 RNA_def_property_range(prop, 0.0f, 1.0f);
3300 prop,
3301 "Blur Width",
3302 "Width of the blur for the transition, in percentage relative to the image size");
3303 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3304
3305 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
3306 RNA_def_property_range(prop, DEG2RADF(-90.0f), DEG2RADF(90.0f));
3307 RNA_def_property_ui_text(prop, "Angle", "Angle of the transition");
3308 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3309
3310 prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
3311 RNA_def_property_enum_sdna(prop, nullptr, "forward");
3312 RNA_def_property_enum_items(prop, wipe_direction_items);
3313 RNA_def_property_ui_text(prop, "Direction", "Whether to fade in or out");
3315 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3316
3317 prop = RNA_def_property(srna, "transition_type", PROP_ENUM, PROP_NONE);
3318 RNA_def_property_enum_sdna(prop, nullptr, "wipetype");
3319 RNA_def_property_enum_items(prop, wipe_type_items);
3321 RNA_def_property_ui_text(prop, "Transition Type", "");
3322 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3323}
3324
3325static void rna_def_glow(StructRNA *srna)
3326{
3327 PropertyRNA *prop;
3328
3329 RNA_def_struct_sdna_from(srna, "GlowVars", "effectdata");
3330
3331 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_FACTOR);
3332 RNA_def_property_float_sdna(prop, nullptr, "fMini");
3333 RNA_def_property_range(prop, 0.0f, 1.0f);
3334 RNA_def_property_ui_text(prop, "Threshold", "Minimum intensity to trigger a glow");
3335 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3336
3337 prop = RNA_def_property(srna, "clamp", PROP_FLOAT, PROP_FACTOR);
3338 RNA_def_property_float_sdna(prop, nullptr, "fClamp");
3339 RNA_def_property_range(prop, 0.0f, 1.0f);
3340 RNA_def_property_ui_text(prop, "Clamp", "Brightness limit of intensity");
3341 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3342
3343 prop = RNA_def_property(srna, "boost_factor", PROP_FLOAT, PROP_NONE);
3344 RNA_def_property_float_sdna(prop, nullptr, "fBoost");
3345 RNA_def_property_range(prop, 0.0f, 10.0f);
3346 RNA_def_property_ui_text(prop, "Boost Factor", "Brightness multiplier");
3347 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3348
3349 prop = RNA_def_property(srna, "blur_radius", PROP_FLOAT, PROP_NONE);
3350 RNA_def_property_float_sdna(prop, nullptr, "dDist");
3351 RNA_def_property_range(prop, 0.5f, 20.0f);
3352 RNA_def_property_ui_text(prop, "Blur Distance", "Radius of glow effect");
3353 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3354
3355 prop = RNA_def_property(srna, "quality", PROP_INT, PROP_NONE);
3356 RNA_def_property_int_sdna(prop, nullptr, "dQuality");
3357 RNA_def_property_range(prop, 1, 5);
3358 RNA_def_property_ui_text(prop, "Quality", "Accuracy of the blur effect");
3359 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3360
3361 prop = RNA_def_property(srna, "use_only_boost", PROP_BOOLEAN, PROP_NONE);
3362 RNA_def_property_boolean_sdna(prop, nullptr, "bNoComp", 0);
3363 RNA_def_property_ui_text(prop, "Only Boost", "Show the glow buffer only");
3364 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3365}
3366
3368{
3369 PropertyRNA *prop;
3370
3371 RNA_def_struct_sdna_from(srna, "SolidColorVars", "effectdata");
3372
3373 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
3374 RNA_def_property_float_sdna(prop, nullptr, "col");
3375 RNA_def_property_ui_text(prop, "Color", "Effect Strip color");
3376 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3377}
3378
3380{
3381 PropertyRNA *prop;
3382
3383 RNA_def_struct_sdna_from(srna, "SpeedControlVars", "effectdata");
3384
3385 static const EnumPropertyItem speed_control_items[] = {
3387 "STRETCH",
3388 0,
3389 "Stretch",
3390 "Adjust input playback speed, so its duration fits strip length"},
3391 {SEQ_SPEED_MULTIPLY, "MULTIPLY", 0, "Multiply", "Multiply with the speed factor"},
3393 "FRAME_NUMBER",
3394 0,
3395 "Frame Number",
3396 "Frame number of the input strip"},
3397 {SEQ_SPEED_LENGTH, "LENGTH", 0, "Length", "Percentage of the input strip length"},
3398 {0, nullptr, 0, nullptr, nullptr},
3399 };
3400
3401 prop = RNA_def_property(srna, "speed_control", PROP_ENUM, PROP_NONE);
3402 RNA_def_property_enum_sdna(prop, nullptr, "speed_control_type");
3403 RNA_def_property_enum_items(prop, speed_control_items);
3405 RNA_def_property_ui_text(prop, "Speed Control", "Speed control method");
3406 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3407
3408 prop = RNA_def_property(srna, "speed_factor", PROP_FLOAT, PROP_NONE);
3409 RNA_def_property_float_sdna(prop, nullptr, "speed_fader");
3411 prop,
3412 "Multiply Factor",
3413 "Multiply the current speed of the strip with this number or remap current frame "
3414 "to this frame");
3415 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3416
3417 prop = RNA_def_property(srna, "speed_frame_number", PROP_FLOAT, PROP_NONE);
3418 RNA_def_property_float_sdna(prop, nullptr, "speed_fader_frame_number");
3419 RNA_def_property_ui_text(prop, "Frame Number", "Frame number of input strip");
3420 RNA_def_property_ui_range(prop, 0.0, MAXFRAME, 1.0, -1);
3421 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3422
3423 prop = RNA_def_property(srna, "speed_length", PROP_FLOAT, PROP_PERCENTAGE);
3424 RNA_def_property_float_sdna(prop, nullptr, "speed_fader_length");
3425 RNA_def_property_ui_text(prop, "Length", "Percentage of input strip length");
3426 RNA_def_property_ui_range(prop, 0.0, 100.0, 1, -1);
3427 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3428
3429 prop = RNA_def_property(srna, "use_frame_interpolate", PROP_BOOLEAN, PROP_NONE);
3432 prop, "Frame Interpolation", "Do crossfade blending between current and next frame");
3433 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3434}
3435
3437{
3438 PropertyRNA *prop;
3439
3440 RNA_def_struct_sdna_from(srna, "GaussianBlurVars", "effectdata");
3441 prop = RNA_def_property(srna, "size_x", PROP_FLOAT, PROP_UNSIGNED);
3442 RNA_def_property_ui_text(prop, "Size X", "Size of the blur along X axis");
3443 RNA_def_property_ui_range(prop, 0.0f, FLT_MAX, 1, -1);
3444 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3445
3446 prop = RNA_def_property(srna, "size_y", PROP_FLOAT, PROP_UNSIGNED);
3447 RNA_def_property_ui_text(prop, "Size Y", "Size of the blur along Y axis");
3448 RNA_def_property_ui_range(prop, 0.0f, FLT_MAX, 1, -1);
3449 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3450}
3451
3452static void rna_def_text(StructRNA *srna)
3453{
3454 static const EnumPropertyItem text_alignment_x_items[] = {
3455 {SEQ_TEXT_ALIGN_X_LEFT, "LEFT", ICON_ALIGN_LEFT, "Left", ""},
3456 {SEQ_TEXT_ALIGN_X_CENTER, "CENTER", ICON_ALIGN_CENTER, "Center", ""},
3457 {SEQ_TEXT_ALIGN_X_RIGHT, "RIGHT", ICON_ALIGN_RIGHT, "Right", ""},
3458 {0, nullptr, 0, nullptr, nullptr},
3459 };
3460
3461 static const EnumPropertyItem text_anchor_x_items[] = {
3462 {SEQ_TEXT_ALIGN_X_LEFT, "LEFT", ICON_ANCHOR_LEFT, "Left", ""},
3463 {SEQ_TEXT_ALIGN_X_CENTER, "CENTER", ICON_ANCHOR_CENTER, "Center", ""},
3464 {SEQ_TEXT_ALIGN_X_RIGHT, "RIGHT", ICON_ANCHOR_RIGHT, "Right", ""},
3465 {0, nullptr, 0, nullptr, nullptr},
3466 };
3467
3468 static const EnumPropertyItem text_anchor_y_items[] = {
3469 {SEQ_TEXT_ALIGN_Y_TOP, "TOP", ICON_ANCHOR_TOP, "Top", ""},
3470 {SEQ_TEXT_ALIGN_Y_CENTER, "CENTER", ICON_ANCHOR_CENTER, "Center", ""},
3471 {SEQ_TEXT_ALIGN_Y_BOTTOM, "BOTTOM", ICON_ANCHOR_BOTTOM, "Bottom", ""},
3472 {0, nullptr, 0, nullptr, nullptr},
3473 };
3474
3475 PropertyRNA *prop;
3476
3477 RNA_def_struct_sdna_from(srna, "TextVars", "effectdata");
3478
3479 prop = RNA_def_property(srna, "font", PROP_POINTER, PROP_NONE);
3480 RNA_def_property_pointer_sdna(prop, nullptr, "text_font");
3481 RNA_def_property_ui_icon(prop, ICON_FILE_FONT, false);
3483 prop, "Font", "Font of the text. Falls back to the UI font by default.");
3485 RNA_def_property_pointer_funcs(prop, nullptr, "rna_Strip_text_font_set", nullptr, nullptr);
3486 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3487
3488 prop = RNA_def_property(srna, "font_size", PROP_FLOAT, PROP_UNSIGNED);
3489 RNA_def_property_float_sdna(prop, nullptr, "text_size");
3490 RNA_def_property_ui_text(prop, "Size", "Size of the text");
3491 RNA_def_property_range(prop, 0.0, 2000);
3492 RNA_def_property_ui_range(prop, 0.0f, 2000, 10.0f, 1);
3493 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3494
3495 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
3496 RNA_def_property_float_sdna(prop, nullptr, "color");
3497 RNA_def_property_ui_text(prop, "Color", "Text color");
3498 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3499
3500 prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR_GAMMA);
3501 RNA_def_property_float_sdna(prop, nullptr, "shadow_color");
3502 RNA_def_property_ui_text(prop, "Shadow Color", "");
3503 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3504
3505 prop = RNA_def_property(srna, "shadow_angle", PROP_FLOAT, PROP_ANGLE);
3506 RNA_def_property_float_sdna(prop, nullptr, "shadow_angle");
3507 RNA_def_property_range(prop, 0, M_PI * 2);
3508 RNA_def_property_ui_text(prop, "Shadow Angle", "");
3510 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3511
3512 prop = RNA_def_property(srna, "shadow_offset", PROP_FLOAT, PROP_UNSIGNED);
3513 RNA_def_property_float_sdna(prop, nullptr, "shadow_offset");
3514 RNA_def_property_ui_text(prop, "Shadow Offset", "");
3515 RNA_def_property_float_default(prop, 0.04f);
3516 RNA_def_property_range(prop, 0.0f, 1.0f);
3517 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 1.0f, 2);
3518 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3519
3520 prop = RNA_def_property(srna, "shadow_blur", PROP_FLOAT, PROP_UNSIGNED);
3521 RNA_def_property_float_sdna(prop, nullptr, "shadow_blur");
3522 RNA_def_property_ui_text(prop, "Shadow Blur", "");
3524 RNA_def_property_range(prop, 0.0f, 1.0f);
3525 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 1.0f, 2);
3526 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3527
3528 prop = RNA_def_property(srna, "outline_color", PROP_FLOAT, PROP_COLOR_GAMMA);
3529 RNA_def_property_float_sdna(prop, nullptr, "outline_color");
3530 RNA_def_property_ui_text(prop, "Outline Color", "");
3531 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3532
3533 prop = RNA_def_property(srna, "outline_width", PROP_FLOAT, PROP_UNSIGNED);
3534 RNA_def_property_float_sdna(prop, nullptr, "outline_width");
3535 RNA_def_property_ui_text(prop, "Outline Width", "");
3536 RNA_def_property_float_default(prop, 0.05f);
3537 RNA_def_property_range(prop, 0.0f, 1.0f);
3538 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 1.0f, 2);
3539 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3540
3541 prop = RNA_def_property(srna, "box_color", PROP_FLOAT, PROP_COLOR_GAMMA);
3542 RNA_def_property_float_sdna(prop, nullptr, "box_color");
3543 RNA_def_property_ui_text(prop, "Box Color", "");
3544 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3545
3546 prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_XYZ);
3547 RNA_def_property_float_sdna(prop, nullptr, "loc");
3548 RNA_def_property_ui_text(prop, "Location", "Location of the text");
3550 RNA_def_property_ui_range(prop, -10.0, 10.0, 1, -1);
3551 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3552
3553 prop = RNA_def_property(srna, "wrap_width", PROP_FLOAT, PROP_NONE);
3554 RNA_def_property_float_sdna(prop, nullptr, "wrap_width");
3555 RNA_def_property_ui_text(prop, "Wrap Width", "Word wrap width as factor, zero disables");
3557 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
3558 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3559
3560 prop = RNA_def_property(srna, "box_margin", PROP_FLOAT, PROP_NONE);
3561 RNA_def_property_float_sdna(prop, nullptr, "box_margin");
3562 RNA_def_property_ui_text(prop, "Box Margin", "Box margin as factor of image width");
3563 RNA_def_property_range(prop, 0, 1.0);
3564 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
3565 RNA_def_property_float_default(prop, 0.01f);
3566 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3567
3568 prop = RNA_def_property(srna, "box_roundness", PROP_FLOAT, PROP_NONE);
3569 RNA_def_property_float_sdna(prop, nullptr, "box_roundness");
3570 RNA_def_property_ui_text(prop, "Box Roundness", "Box corner radius as a factor of box height");
3571 RNA_def_property_range(prop, 0, 1.0);
3572 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3573
3574 prop = RNA_def_property(srna, "alignment_x", PROP_ENUM, PROP_NONE);
3575 RNA_def_property_enum_sdna(prop, nullptr, "align");
3576 RNA_def_property_enum_items(prop, text_alignment_x_items);
3577 RNA_def_property_ui_text(prop, "Align X", "Horizontal text alignment");
3578 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3579
3580 prop = RNA_def_property(srna, "anchor_x", PROP_ENUM, PROP_NONE);
3581 RNA_def_property_enum_sdna(prop, nullptr, "anchor_x");
3582 RNA_def_property_enum_items(prop, text_anchor_x_items);
3584 prop, "Anchor X", "Horizontal position of the text box relative to Location");
3585 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3586
3587 prop = RNA_def_property(srna, "anchor_y", PROP_ENUM, PROP_NONE);
3588 RNA_def_property_enum_sdna(prop, nullptr, "anchor_y");
3589 RNA_def_property_enum_items(prop, text_anchor_y_items);
3591 prop, "Anchor Y", "Vertical position of the text box relative to Location");
3592 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3593
3594 prop = RNA_def_property(srna, "text", PROP_STRING, PROP_NONE);
3595 RNA_def_property_string_sdna(prop, nullptr, "text_ptr");
3597 prop, "rna_Strip_text_get", "rna_Strip_text_length", "rna_Strip_text_set");
3598 RNA_def_property_ui_text(prop, "Text", "Text that will be displayed");
3600 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3601
3602 prop = RNA_def_property(srna, "use_shadow", PROP_BOOLEAN, PROP_NONE);
3603 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_TEXT_SHADOW);
3604 RNA_def_property_ui_text(prop, "Shadow", "Display shadow behind text");
3605 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3606
3607 prop = RNA_def_property(srna, "use_outline", PROP_BOOLEAN, PROP_NONE);
3608 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_TEXT_OUTLINE);
3609 RNA_def_property_ui_text(prop, "Outline", "Display outline around text");
3610 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3611
3612 prop = RNA_def_property(srna, "use_box", PROP_BOOLEAN, PROP_NONE);
3613 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_TEXT_BOX);
3614 RNA_def_property_ui_text(prop, "Box", "Display colored box behind text");
3616 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3617
3618 prop = RNA_def_property(srna, "use_bold", PROP_BOOLEAN, PROP_NONE);
3619 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_TEXT_BOLD);
3620 RNA_def_property_ui_text(prop, "Bold", "Display text as bold");
3621 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3622
3623 prop = RNA_def_property(srna, "use_italic", PROP_BOOLEAN, PROP_NONE);
3624 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SEQ_TEXT_ITALIC);
3625 RNA_def_property_ui_text(prop, "Italic", "Display text as italic");
3626 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3627}
3628
3630{
3631 static const EnumPropertyItem blend_color_items[] = {
3632 {STRIP_BLEND_DARKEN, "DARKEN", 0, "Darken", ""},
3633 {STRIP_BLEND_MUL, "MULTIPLY", 0, "Multiply", ""},
3634 {STRIP_BLEND_COLOR_BURN, "BURN", 0, "Color Burn", ""},
3635 {STRIP_BLEND_LINEAR_BURN, "LINEAR_BURN", 0, "Linear Burn", ""},
3637 {STRIP_BLEND_LIGHTEN, "LIGHTEN", 0, "Lighten", ""},
3638 {STRIP_BLEND_SCREEN, "SCREEN", 0, "Screen", ""},
3639 {STRIP_BLEND_DODGE, "DODGE", 0, "Color Dodge", ""},
3640 {STRIP_BLEND_ADD, "ADD", 0, "Add", ""},
3642 {STRIP_BLEND_OVERLAY, "OVERLAY", 0, "Overlay", ""},
3643 {STRIP_BLEND_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""},
3644 {STRIP_BLEND_HARD_LIGHT, "HARD_LIGHT", 0, "Hard Light", ""},
3645 {STRIP_BLEND_VIVID_LIGHT, "VIVID_LIGHT", 0, "Vivid Light", ""},
3646 {STRIP_BLEND_LIN_LIGHT, "LINEAR_LIGHT", 0, "Linear Light", ""},
3647 {STRIP_BLEND_PIN_LIGHT, "PIN_LIGHT", 0, "Pin Light", ""},
3649 {STRIP_BLEND_DIFFERENCE, "DIFFERENCE", 0, "Difference", ""},
3650 {STRIP_BLEND_EXCLUSION, "EXCLUSION", 0, "Exclusion", ""},
3651 {STRIP_BLEND_SUB, "SUBTRACT", 0, "Subtract", ""},
3653 {STRIP_BLEND_HUE, "HUE", 0, "Hue", ""},
3654 {STRIP_BLEND_SATURATION, "SATURATION", 0, "Saturation", ""},
3655 {STRIP_BLEND_BLEND_COLOR, "COLOR", 0, "Color", ""},
3656 {STRIP_BLEND_VALUE, "VALUE", 0, "Value", ""},
3657 {0, nullptr, 0, nullptr, nullptr},
3658 };
3659
3660 PropertyRNA *prop;
3661
3662 RNA_def_struct_sdna_from(srna, "ColorMixVars", "effectdata");
3663
3664 prop = RNA_def_property(srna, "blend_effect", PROP_ENUM, PROP_NONE);
3665 RNA_def_property_enum_sdna(prop, nullptr, "blend_effect");
3666 RNA_def_property_enum_items(prop, blend_color_items);
3668 prop, "Blending Mode", "Method for controlling how the strip combines with other strips");
3670 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3671
3672 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
3673 RNA_def_property_range(prop, 0.0f, 1.0f);
3675 prop, "Blend Factor", "Percentage of how much the strip's colors affect other strips");
3676 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Strip_invalidate_raw_update");
3677}
3678
3680 {"AddStrip", "Add Strip", "Add Strip", nullptr, 2},
3681 {"AdjustmentStrip",
3682 "Adjustment Layer Strip",
3683 "Sequence strip to perform filter adjustments to layers below",
3685 0},
3686 {"AlphaOverStrip", "Alpha Over Strip", "Alpha Over Strip", nullptr, 2},
3687 {"AlphaUnderStrip", "Alpha Under Strip", "Alpha Under Strip", nullptr, 2},
3688 {"ColorStrip",
3689 "Color Strip",
3690 "Sequence strip creating an image filled with a single color",
3692 0},
3693 {"CrossStrip", "Crossfade Strip", "Crossfade Strip", nullptr, 2},
3694 {"GammaCrossStrip", "Gamma Crossfade Strip", "Gamma Crossfade Strip", nullptr, 2},
3695 {"GlowStrip", "Glow Strip", "Sequence strip creating a glow effect", rna_def_glow, 1},
3696 {"MulticamStrip",
3697 "Multicam Select Strip",
3698 "Sequence strip to perform multicam editing",
3700 0},
3701 {"MultiplyStrip", "Multiply Strip", "Multiply Strip", nullptr, 2},
3702 {"SpeedControlStrip",
3703 "SpeedControl Strip",
3704 "Sequence strip to control the speed of other strips",
3706 1},
3707 {"SubtractStrip", "Subtract Strip", "Subtract Strip", nullptr, 2},
3708 {"WipeStrip", "Wipe Strip", "Sequence strip creating a wipe transition", rna_def_wipe, 2},
3709 {"GaussianBlurStrip",
3710 "Gaussian Blur Strip",
3711 "Sequence strip creating a gaussian blur",
3713 1},
3714 {"TextStrip", "Text Strip", "Sequence strip creating text", rna_def_text, 0},
3715 {"ColorMixStrip", "Color Mix Strip", "Color Mix Strip", rna_def_color_mix, 2},
3716 {"", "", "", nullptr, 0},
3717};
3718
3719static void rna_def_effects(BlenderRNA *brna)
3720{
3721 StructRNA *srna;
3722 EffectInfo *effect;
3723
3724 for (effect = def_effects; effect->struct_name[0] != '\0'; effect++) {
3725 srna = RNA_def_struct(brna, effect->struct_name, "EffectStrip");
3726 RNA_def_struct_ui_text(srna, effect->ui_name, effect->ui_desc);
3727 RNA_def_struct_sdna(srna, "Strip");
3728
3729 rna_def_effect_inputs(srna, effect->inputs);
3730
3731 if (effect->func) {
3732 effect->func(srna);
3733 }
3734 }
3735}
3736
3737static void rna_def_modifier_panel_open_prop(StructRNA *srna, const char *identifier, const int id)
3738{
3739 BLI_assert(id >= 0);
3741
3742 PropertyRNA *prop;
3743 prop = RNA_def_property(srna, identifier, PROP_BOOLEAN, PROP_NONE);
3746 prop, nullptr, "modifier.layout_panel_open_flag", (int64_t(1) << id));
3748}
3749
3751{
3752 StructRNA *srna;
3753 PropertyRNA *prop;
3754
3755 static const EnumPropertyItem mask_input_type_items[] = {
3756 {STRIP_MASK_INPUT_STRIP, "STRIP", 0, "Strip", "Use sequencer strip as mask input"},
3757 {STRIP_MASK_INPUT_ID, "ID", 0, "Mask", "Use mask ID as mask input"},
3758 {0, nullptr, 0, nullptr, nullptr},
3759 };
3760
3761 static const EnumPropertyItem mask_time_items[] = {
3763 "RELATIVE",
3764 0,
3765 "Relative",
3766 "Mask animation is offset to start of strip"},
3768 "ABSOLUTE",
3769 0,
3770 "Absolute",
3771 "Mask animation is in sync with scene frame"},
3772 {0, nullptr, 0, nullptr, nullptr},
3773 };
3774
3775 srna = RNA_def_struct(brna, "StripModifier", nullptr);
3776 RNA_def_struct_sdna(srna, "StripModifierData");
3777 RNA_def_struct_ui_text(srna, "Strip Modifier", "Modifier for sequence strip");
3778 RNA_def_struct_refine_func(srna, "rna_StripModifier_refine");
3779 RNA_def_struct_path_func(srna, "rna_StripModifier_path");
3780
3781 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
3782 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_StripModifier_name_set");
3783 RNA_def_property_ui_text(prop, "Name", "");
3784 RNA_def_struct_name_property(srna, prop);
3786
3787 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
3790 RNA_def_property_ui_text(prop, "Type", "");
3792
3793 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
3795 RNA_def_property_ui_text(prop, "Mute", "Mute this modifier");
3796 RNA_def_property_ui_icon(prop, ICON_HIDE_OFF, -1);
3797 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3798
3799 prop = RNA_def_property(srna, "enable", PROP_BOOLEAN, PROP_NONE);
3801 RNA_def_property_ui_text(prop, "Enable", "Enable this modifier");
3802 RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
3803 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3804
3805 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
3808 prop, nullptr, "layout_panel_open_flag", UI_PANEL_DATA_EXPAND_ROOT);
3809 RNA_def_property_ui_text(prop, "Expanded", "Mute expanded settings for the modifier");
3811
3812 prop = RNA_def_property(srna, "input_mask_type", PROP_ENUM, PROP_NONE);
3813 RNA_def_property_enum_sdna(prop, nullptr, "mask_input_type");
3814 RNA_def_property_enum_items(prop, mask_input_type_items);
3815 RNA_def_property_ui_text(prop, "Type", "Type of input data used for mask");
3816 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3817
3818 prop = RNA_def_property(srna, "mask_time", PROP_ENUM, PROP_NONE);
3819 RNA_def_property_enum_sdna(prop, nullptr, "mask_time");
3820 RNA_def_property_enum_items(prop, mask_time_items);
3821 RNA_def_property_ui_text(prop, "Mask Time", "Time to use for the Mask animation");
3822 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3823
3824 prop = RNA_def_property(srna, "input_mask_strip", PROP_POINTER, PROP_NONE);
3825 RNA_def_property_pointer_sdna(prop, nullptr, "mask_strip");
3827 prop, nullptr, "rna_StripModifier_strip_set", nullptr, "rna_StripModifier_otherStrip_poll");
3829 RNA_def_property_ui_text(prop, "Mask Strip", "Strip used as mask input for the modifier");
3830 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3831
3832 prop = RNA_def_property(srna, "input_mask_id", PROP_POINTER, PROP_NONE);
3833 RNA_def_property_pointer_sdna(prop, nullptr, "mask_id");
3835 RNA_def_property_ui_text(prop, "Mask", "Mask ID used as mask input for the modifier");
3836 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3837
3838 prop = RNA_def_property(srna, "is_active", PROP_BOOLEAN, PROP_NONE);
3840 RNA_def_property_boolean_funcs(prop, nullptr, "rna_StripModifier_is_active_set");
3844 RNA_def_property_ui_text(prop, "Is Active", "This modifier is active");
3845 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3846}
3847
3849{
3850 StructRNA *srna;
3851 PropertyRNA *prop;
3852
3853 srna = RNA_def_struct(brna, "ColorBalanceModifier", "StripModifier");
3854 RNA_def_struct_ui_icon(srna, ICON_MOD_COLOR_BALANCE);
3855 RNA_def_struct_sdna(srna, "ColorBalanceModifierData");
3857 srna, "ColorBalanceModifier", "Color balance modifier for sequence strip");
3858
3859 prop = RNA_def_property(srna, "color_balance", PROP_POINTER, PROP_NONE);
3860 RNA_def_property_struct_type(prop, "StripColorBalanceData");
3861
3862 prop = RNA_def_property(srna, "color_multiply", PROP_FLOAT, PROP_UNSIGNED);
3863 RNA_def_property_float_sdna(prop, nullptr, "color_multiply");
3864 RNA_def_property_range(prop, 0.0f, 20.0f);
3866 RNA_def_property_ui_text(prop, "Multiply Colors", "Multiply the intensity of each pixel");
3867 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3868
3869 rna_def_modifier_panel_open_prop(srna, "open_mask_input_panel", 1);
3870}
3871
3873{
3874 StructRNA *srna;
3875 PropertyRNA *prop;
3876
3877 srna = RNA_def_struct(brna, "WhiteBalanceModifier", "StripModifier");
3878 RNA_def_struct_sdna(srna, "WhiteBalanceModifierData");
3879 RNA_def_struct_ui_icon(srna, ICON_MOD_WHITE_BALANCE);
3881 srna, "WhiteBalanceModifier", "White balance modifier for sequence strip");
3882
3883 prop = RNA_def_property(srna, "white_value", PROP_FLOAT, PROP_COLOR_GAMMA);
3884 RNA_def_property_range(prop, 0.0, 1.0);
3885 RNA_def_property_float_sdna(prop, nullptr, "white_value");
3886 RNA_def_property_ui_text(prop, "White Value", "This color defines white in the strip");
3887 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3888
3889 rna_def_modifier_panel_open_prop(srna, "open_mask_input_panel", 1);
3890}
3891
3893{
3894 StructRNA *srna;
3895 PropertyRNA *prop;
3896
3897 srna = RNA_def_struct(brna, "CurvesModifier", "StripModifier");
3898 RNA_def_struct_sdna(srna, "CurvesModifierData");
3899 RNA_def_struct_ui_icon(srna, ICON_MOD_CURVES);
3900 RNA_def_struct_ui_text(srna, "CurvesModifier", "RGB curves modifier for sequence strip");
3901
3902 prop = RNA_def_property(srna, "curve_mapping", PROP_POINTER, PROP_NONE);
3903 RNA_def_property_pointer_sdna(prop, nullptr, "curve_mapping");
3904 RNA_def_property_struct_type(prop, "CurveMapping");
3905 RNA_def_property_ui_text(prop, "Curve Mapping", "");
3906 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3907
3908 rna_def_modifier_panel_open_prop(srna, "open_mask_input_panel", 1);
3909}
3910
3912{
3913 StructRNA *srna;
3914 PropertyRNA *prop;
3915
3916 srna = RNA_def_struct(brna, "HueCorrectModifier", "StripModifier");
3917 RNA_def_struct_sdna(srna, "HueCorrectModifierData");
3918 RNA_def_struct_ui_icon(srna, ICON_MOD_HUE_CORRECT);
3919 RNA_def_struct_ui_text(srna, "HueCorrectModifier", "Hue correction modifier for sequence strip");
3920
3921 prop = RNA_def_property(srna, "curve_mapping", PROP_POINTER, PROP_NONE);
3922 RNA_def_property_pointer_sdna(prop, nullptr, "curve_mapping");
3923 RNA_def_property_struct_type(prop, "CurveMapping");
3924 RNA_def_property_ui_text(prop, "Curve Mapping", "");
3925 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3926
3927 rna_def_modifier_panel_open_prop(srna, "open_mask_input_panel", 1);
3928}
3929
3931{
3932 StructRNA *srna;
3933 srna = RNA_def_struct(brna, "MaskStripModifier", "StripModifier");
3934 RNA_def_struct_ui_icon(srna, ICON_MOD_MASK);
3935 RNA_def_struct_ui_text(srna, "Mask Modifier", "Mask modifier for sequence strip");
3936
3937 /* Mask properties are part of #rna_def_modifier. */
3938}
3939
3941{
3942 StructRNA *srna;
3943 PropertyRNA *prop;
3944
3945 srna = RNA_def_struct(brna, "BrightContrastModifier", "StripModifier");
3946 RNA_def_struct_ui_icon(srna, ICON_MOD_BRIGHTNESS_CONTRAST);
3947 RNA_def_struct_sdna(srna, "BrightContrastModifierData");
3949 srna, "BrightContrastModifier", "Bright/contrast modifier data for sequence strip");
3950
3951 prop = RNA_def_property(srna, "bright", PROP_FLOAT, PROP_UNSIGNED);
3952 RNA_def_property_float_sdna(prop, nullptr, "bright");
3954 RNA_def_property_ui_text(prop, "Brightness", "Adjust the luminosity of the colors");
3955 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3956
3957 prop = RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_UNSIGNED);
3958 RNA_def_property_float_sdna(prop, nullptr, "contrast");
3959 RNA_def_property_range(prop, -100.0f, 100.0f);
3960 RNA_def_property_ui_text(prop, "Contrast", "Adjust the difference in luminosity between pixels");
3961 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3962
3963 rna_def_modifier_panel_open_prop(srna, "open_mask_input_panel", 1);
3964}
3965
3967{
3968 StructRNA *srna;
3969 PropertyRNA *prop;
3970
3971 static const EnumPropertyItem type_items[] = {
3972 {SEQ_TONEMAP_RD_PHOTORECEPTOR, "RD_PHOTORECEPTOR", 0, "R/D Photoreceptor", ""},
3973 {SEQ_TONEMAP_RH_SIMPLE, "RH_SIMPLE", 0, "Rh Simple", ""},
3974 {0, nullptr, 0, nullptr, nullptr},
3975 };
3976
3977 srna = RNA_def_struct(brna, "SequencerTonemapModifierData", "StripModifier");
3978 RNA_def_struct_sdna(srna, "SequencerTonemapModifierData");
3979 RNA_def_struct_ui_icon(srna, ICON_MOD_TONEMAP);
3980 RNA_def_struct_ui_text(srna, "SequencerTonemapModifierData", "Tone mapping modifier");
3981
3982 prop = RNA_def_property(srna, "tonemap_type", PROP_ENUM, PROP_NONE);
3983 RNA_def_property_enum_sdna(prop, nullptr, "type");
3984 RNA_def_property_enum_items(prop, type_items);
3985 RNA_def_property_ui_text(prop, "Tonemap Type", "Tone mapping algorithm");
3986 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3987
3988 prop = RNA_def_property(srna, "key", PROP_FLOAT, PROP_FACTOR);
3989 RNA_def_property_range(prop, 0.0f, 1.0f);
3990 RNA_def_property_ui_text(prop, "Key", "The value the average luminance is mapped to");
3991 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
3992
3993 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
3994 RNA_def_property_range(prop, 0.001f, 10.0f);
3996 prop,
3997 "Offset",
3998 "Normally always 1, but can be used as an extra control to alter the brightness curve");
3999 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
4000
4001 prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_NONE);
4002 RNA_def_property_range(prop, 0.001f, 3.0f);
4003 RNA_def_property_ui_text(prop, "Gamma", "If not used, set to 1");
4004 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
4005
4006 prop = RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
4007 RNA_def_property_range(prop, -8.0f, 8.0f);
4009 prop, "Intensity", "If less than zero, darkens image; otherwise, makes it brighter");
4010 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
4011
4012 prop = RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_FACTOR);
4013 RNA_def_property_range(prop, 0.0f, 1.0f);
4014 RNA_def_property_ui_text(prop, "Contrast", "Set to 0 to use estimate from input image");
4015 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
4016
4017 prop = RNA_def_property(srna, "adaptation", PROP_FLOAT, PROP_FACTOR);
4018 RNA_def_property_range(prop, 0.0f, 1.0f);
4019 RNA_def_property_ui_text(prop, "Adaptation", "If 0, global; if 1, based on pixel intensity");
4020 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
4021
4022 prop = RNA_def_property(srna, "correction", PROP_FLOAT, PROP_FACTOR);
4023 RNA_def_property_range(prop, 0.0f, 1.0f);
4025 prop, "Color Correction", "If 0, same for all channels; if 1, each independent");
4026 RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_update");
4027
4028 rna_def_modifier_panel_open_prop(srna, "open_mask_input_panel", 1);
4029}
4030
4032{
4033 StructRNA *srna = RNA_def_struct(brna, "SequencerCompositorModifierData", "StripModifier");
4034 RNA_def_struct_sdna(srna, "SequencerCompositorModifierData");
4035 RNA_def_struct_ui_icon(srna, ICON_NODE_COMPOSITING);
4036 RNA_def_struct_ui_text(srna, "SequencerCompositorModifierData", "Compositor Modifier");
4037
4038 PropertyRNA *prop = RNA_def_property(srna, "node_group", PROP_POINTER, PROP_NONE);
4039 RNA_def_property_ui_text(prop, "Node Group", "Node group that controls what this modifier does");
4041 prop, nullptr, nullptr, nullptr, "rna_CompositorModifier_node_group_poll");
4044 prop, NC_SCENE | ND_SEQUENCER, "rna_CompositorModifier_node_group_update");
4045
4046 rna_def_modifier_panel_open_prop(srna, "open_mask_input_panel", 1);
4047}
4048
4062
4064{
4065 StructRNA *srna;
4066 PropertyRNA *prop;
4067
4068 /* Define Sound EQ */
4069 srna = RNA_def_struct(brna, "EQCurveMappingData", nullptr);
4070 RNA_def_struct_sdna(srna, "EQCurveMappingData");
4071 RNA_def_struct_ui_text(srna, "EQCurveMappingData", "EQCurveMappingData");
4072
4073 prop = RNA_def_property(srna, "curve_mapping", PROP_POINTER, PROP_NONE);
4074 RNA_def_property_pointer_sdna(prop, nullptr, "curve_mapping");
4075 RNA_def_property_struct_type(prop, "CurveMapping");
4076 RNA_def_property_ui_text(prop, "Curve Mapping", "");
4078 prop, NC_SCENE | ND_SEQUENCER, "rna_StripModifier_EQCurveMapping_update");
4079}
4080
4082{
4083 StructRNA *srna;
4084 PropertyRNA *prop;
4085 FunctionRNA *func;
4086 PropertyRNA *parm;
4087
4088 srna = RNA_def_struct(brna, "SoundEqualizerModifier", "StripModifier");
4089 RNA_def_struct_sdna(srna, "SoundEqualizerModifierData");
4090 RNA_def_struct_ui_text(srna, "SoundEqualizerModifier", "Equalize audio");
4091
4092 /* Sound Equalizers. */
4093 prop = RNA_def_property(srna, "graphics", PROP_COLLECTION, PROP_NONE);
4094 RNA_def_property_struct_type(prop, "EQCurveMappingData");
4096 prop, "Graphical definition equalization", "Graphical definition equalization");
4097
4098 /* Add band. */
4099 func = RNA_def_function(srna, "new_graphic", "rna_Strip_SoundEqualizer_Curve_add");
4101 RNA_def_function_ui_description(func, "Add a new EQ band");
4102
4103 parm = RNA_def_float(func,
4104 "min_freq",
4106 0.0,
4107 SOUND_EQUALIZER_DEFAULT_MAX_FREQ, /* Hard min and max */
4108 "Minimum Frequency",
4109 "Minimum Frequency",
4110 0.0,
4111 SOUND_EQUALIZER_DEFAULT_MAX_FREQ); /* Soft min and max */
4113 parm = RNA_def_float(func,
4114 "max_freq",
4116 0.0,
4117 SOUND_EQUALIZER_DEFAULT_MAX_FREQ, /* Hard min and max */
4118 "Maximum Frequency",
4119 "Maximum Frequency",
4120 0.0,
4121 SOUND_EQUALIZER_DEFAULT_MAX_FREQ); /* Soft min and max */
4123
4124 /* return type */
4125 parm = RNA_def_pointer(func,
4126 "graphic_eqs",
4127 "EQCurveMappingData",
4128 "",
4129 "Newly created graphical Equalizer definition");
4130 RNA_def_function_return(func, parm);
4131
4132 /* clear all modifiers */
4133 func = RNA_def_function(srna, "clear_soundeqs", "rna_Strip_SoundEqualizer_Curve_clear");
4136 "Remove all graphical equalizers from the Equalizer modifier");
4137
4139}
4140
4145
4147{
4149
4152 rna_def_strip_proxy(brna);
4154 rna_def_strip_crop(brna);
4156
4157 rna_def_strip(brna);
4158 rna_def_editor(brna);
4159 rna_def_channel(brna);
4160
4161 rna_def_image(brna);
4162 rna_def_meta(brna);
4163 rna_def_scene(brna);
4164 rna_def_movie(brna);
4165 rna_def_movieclip(brna);
4166 rna_def_mask(brna);
4167 rna_def_sound(brna);
4168 rna_def_effect(brna);
4169 rna_def_effects(brna);
4170 rna_def_modifiers(brna);
4172
4174}
4175
4176#endif
AnimData * BKE_animdata_from_id(const ID *id)
Definition anim_data.cc:83
void BKE_animdata_fix_paths_rename_all(struct ID *ref_id, const char *prefix, const char *oldName, const char *newName)
void BKE_animdata_fix_paths_rename(struct ID *owner_id, struct AnimData *adt, struct ID *ref_id, const char *prefix, const char *oldName, const char *newName, int oldSubscript, int newSubscript, bool verify_paths)
Scene * CTX_data_sequencer_scene(const bContext *C)
void id_us_plus(ID *id)
Definition lib_id.cc:358
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
@ RPT_ERROR
Definition BKE_report.hh:39
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition report.cc:153
#define BLI_assert(a)
Definition BLI_assert.h:46
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define DEG2RADF(_deg)
#define M_PI
#define FILE_MAX
#define BLI_path_join(...)
void void void BLI_path_split_file_part(const char *filepath, char *file, size_t file_maxncpy) ATTR_NONNULL(1
void BLI_path_split_dir_file(const char *filepath, char *dir, size_t dir_maxncpy, char *file, size_t file_maxncpy) ATTR_NONNULL(1
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
Definition string.cc:41
#define SNPRINTF(dst, format,...)
Definition BLI_string.h:604
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:693
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#define BLI_STR_UTF8_MULTIPLICATION_SIGN
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define CLAMP(a, b, c)
#define UNUSED_FUNCTION(x)
#define ELEM(...)
#define BLT_I18NCONTEXT_ID_SEQUENCE
#define BLT_I18NCONTEXT_ID_SOUND
#define BLT_I18NCONTEXT_ID_MOVIECLIP
#define BLT_I18NCONTEXT_EDITOR_FILEBROWSER
#define BLT_I18NCONTEXT_COLOR
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ ID_RECALC_AUDIO
Definition DNA_ID.h:1132
@ ID_RECALC_SYNC_TO_EVAL
Definition DNA_ID.h:1118
@ ID_RECALC_SEQUENCER_STRIPS
Definition DNA_ID.h:1122
@ NTREE_COMPOSIT
@ SEQ_SCALE_TO_FILL
@ SEQ_STRETCH_TO_FILL
@ SEQ_USE_ORIGINAL_SIZE
@ SEQ_SCALE_TO_FIT
#define MINFRAME
#define MAXFRAME
@ UI_PANEL_DATA_EXPAND_ROOT
@ SEQ_TEXT_ALIGN_X_RIGHT
@ SEQ_TEXT_ALIGN_X_CENTER
@ SEQ_TEXT_ALIGN_X_LEFT
@ SEQ_TONEMAP_RD_PHOTORECEPTOR
@ SEQ_TONEMAP_RH_SIMPLE
@ STRIP_MASK_TIME_RELATIVE
@ STRIP_MASK_TIME_ABSOLUTE
@ SEQ_EDIT_PROXY_DIR_STORAGE
@ SEQ_TEXT_ITALIC
@ SEQ_TEXT_SHADOW
@ SEQ_TEXT_BOLD
@ SEQ_TEXT_OUTLINE
@ SEQ_TEXT_BOX
@ SEQ_PROXY_TC_RECORD_RUN_NO_GAPS
@ SEQ_PROXY_TC_RECORD_RUN
@ SEQ_PROXY_TC_NONE
@ SEQ_COLOR_BALANCE_INVERSE_GAIN
@ SEQ_COLOR_BALANCE_INVERSE_LIFT
@ SEQ_COLOR_BALANCE_INVERSE_SLOPE
@ SEQ_COLOR_BALANCE_INVERSE_POWER
@ SEQ_COLOR_BALANCE_INVERSE_OFFSET
@ SEQ_COLOR_BALANCE_INVERSE_GAMMA
@ SEQ_STORAGE_PROXY_CUSTOM_FILE
@ SEQ_STORAGE_PROXY_CUSTOM_DIR
@ eSeqModifierType_BrightContrast
@ eSeqModifierType_Curves
@ eSeqModifierType_Mask
@ eSeqModifierType_WhiteBalance
@ eSeqModifierType_Tonemap
@ eSeqModifierType_Compositor
@ eSeqModifierType_HueCorrect
@ eSeqModifierType_ColorBalance
@ eSeqModifierType_SoundEqualizer
@ SEQ_WIPE_DOUBLE
@ SEQ_WIPE_IRIS
@ SEQ_WIPE_CLOCK
@ SEQ_WIPE_SINGLE
@ SEQ_TEXT_ALIGN_Y_BOTTOM
@ SEQ_TEXT_ALIGN_Y_TOP
@ SEQ_TEXT_ALIGN_Y_CENTER
@ SEQ_SPEED_STRETCH
@ SEQ_SPEED_MULTIPLY
@ SEQ_SPEED_LENGTH
@ SEQ_SPEED_FRAME_NUMBER
@ SEQ_CACHE_STORE_RAW
@ SEQ_CACHE_STORE_FINAL_OUT
@ SEQ_CACHE_PREFETCH_ENABLE
@ STRIP_TYPE_GAUSSIAN_BLUR
@ STRIP_TYPE_GAMCROSS
@ STRIP_TYPE_SCENE
@ STRIP_TYPE_MOVIECLIP
@ STRIP_TYPE_COLORMIX
@ STRIP_TYPE_WIPE
@ STRIP_TYPE_TEXT
@ STRIP_TYPE_SOUND_HD
@ STRIP_TYPE_SOUND_RAM
@ STRIP_TYPE_ADD
@ STRIP_TYPE_IMAGE
@ STRIP_TYPE_MOVIE
@ STRIP_TYPE_GLOW
@ STRIP_TYPE_SUB
@ STRIP_TYPE_MUL
@ STRIP_TYPE_SPEED
@ STRIP_TYPE_COLOR
@ STRIP_TYPE_ADJUSTMENT
@ STRIP_TYPE_META
@ STRIP_TYPE_MULTICAM
@ STRIP_TYPE_MASK
@ STRIP_TYPE_ALPHAUNDER
@ STRIP_TYPE_CROSS
@ STRIP_TYPE_ALPHAOVER
@ STRIP_COLOR_NONE
@ STRIP_COLOR_03
@ STRIP_COLOR_01
@ STRIP_COLOR_04
@ STRIP_COLOR_06
@ STRIP_COLOR_02
@ STRIP_COLOR_08
@ STRIP_COLOR_09
@ STRIP_COLOR_07
@ STRIP_COLOR_05
@ SEQ_PROXY_IMAGE_SIZE_100
@ SEQ_PROXY_IMAGE_SIZE_25
@ SEQ_PROXY_IMAGE_SIZE_50
@ SEQ_PROXY_IMAGE_SIZE_75
@ SEQ_EDIT_OVERLAY_FRAME_ABS
@ SEQ_EDIT_OVERLAY_FRAME_SHOW
@ STRIP_BLEND_LINEAR_BURN
@ STRIP_BLEND_SUB
@ STRIP_BLEND_VIVID_LIGHT
@ STRIP_BLEND_LIGHTEN
@ STRIP_BLEND_OVERLAY
@ STRIP_BLEND_SATURATION
@ STRIP_BLEND_SOFT_LIGHT
@ STRIP_BLEND_EXCLUSION
@ STRIP_BLEND_COLOR_BURN
@ STRIP_BLEND_GAMCROSS
@ STRIP_BLEND_ALPHAUNDER
@ STRIP_BLEND_HUE
@ STRIP_BLEND_DODGE
@ STRIP_BLEND_LIN_LIGHT
@ STRIP_BLEND_CROSS
@ STRIP_BLEND_ALPHAOVER
@ STRIP_BLEND_PIN_LIGHT
@ STRIP_BLEND_REPLACE
@ STRIP_BLEND_ADD
@ STRIP_BLEND_DIFFERENCE
@ STRIP_BLEND_HARD_LIGHT
@ STRIP_BLEND_MUL
@ STRIP_BLEND_BLEND_COLOR
@ STRIP_BLEND_DARKEN
@ STRIP_BLEND_VALUE
@ STRIP_BLEND_SCREEN
@ SEQ_CHANNEL_MUTE
@ SEQ_CHANNEL_LOCK
struct StripModifierData StripModifierData
@ SEQ_TRANSFORM_FILTER_CUBIC_BSPLINE
@ SEQ_TRANSFORM_FILTER_AUTO
@ SEQ_TRANSFORM_FILTER_CUBIC_MITCHELL
@ SEQ_TRANSFORM_FILTER_BILINEAR
@ SEQ_TRANSFORM_FILTER_BOX
@ SEQ_TRANSFORM_FILTER_NEAREST
@ SEQ_MOVIECLIP_RENDER_UNDISTORTED
@ SEQ_MOVIECLIP_RENDER_STABILIZED
@ STRIP_MASK_INPUT_ID
@ STRIP_MASK_INPUT_STRIP
@ SEQ_SPEED_USE_INTERPOLATION
@ SEQ_AUDIO_PITCH_CORRECTION
@ SEQ_FILTERY
@ SEQ_REVERSE_FRAMES
@ SEQ_FLIPX
@ SEQ_RIGHTSEL
@ SEQ_MAKE_FLOAT
@ SEQ_SCENE_STRIPS
@ SEQ_USE_PROXY
@ SEQ_USE_EFFECT_DEFAULT_FADE
@ SEQ_FLIPY
@ SEQ_MULTIPLY_ALPHA
@ SEQ_SHOW_RETIMING
@ SEQ_USE_VIEWS
@ SEQ_USE_LINEAR_MODIFIERS
@ SEQ_SCENE_NO_ANNOTATION
@ SEQ_AUDIO_DRAW_WAVEFORM
@ SEQ_LEFTSEL
@ STRIP_MODIFIER_FLAG_MUTE
@ STRIP_MODIFIER_FLAG_ACTIVE
@ SEQ_COLOR_BALANCE_METHOD_LIFTGAMMAGAIN
@ SEQ_COLOR_BALANCE_METHOD_SLOPEOFFSETPOWER
struct Strip Strip
@ SEQ_ALPHA_PREMUL
@ SEQ_ALPHA_STRAIGHT
#define STRIP_FONT_NOT_LOADED
@ SEQ_EDIT_SHOW_MISSING_MEDIA
@ SEQ_PROXY_SKIP_EXISTING
ParameterFlag
Definition RNA_types.hh:544
@ PARM_RNAPTR
Definition RNA_types.hh:547
@ PARM_REQUIRED
Definition RNA_types.hh:545
@ FUNC_USE_REPORTS
Definition RNA_types.hh:914
@ FUNC_USE_MAIN
Definition RNA_types.hh:912
@ FUNC_USE_CONTEXT
Definition RNA_types.hh:913
@ FUNC_USE_SELF_ID
Definition RNA_types.hh:889
@ PROP_FLOAT
Definition RNA_types.hh:164
@ PROP_BOOLEAN
Definition RNA_types.hh:162
@ PROP_ENUM
Definition RNA_types.hh:166
@ PROP_INT
Definition RNA_types.hh:163
@ PROP_STRING
Definition RNA_types.hh:165
@ PROP_POINTER
Definition RNA_types.hh:167
@ PROP_COLLECTION
Definition RNA_types.hh:168
#define RNA_ENUM_ITEM_SEPR
Definition RNA_types.hh:676
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition RNA_types.hh:503
PropertyFlag
Definition RNA_types.hh:300
@ PROP_THICK_WRAP
Definition RNA_types.hh:423
@ PROP_CONTEXT_UPDATE
Definition RNA_types.hh:407
@ PROP_ANIMATABLE
Definition RNA_types.hh:319
@ PROP_PATH_SUPPORTS_BLEND_RELATIVE
Definition RNA_types.hh:456
@ PROP_EDITABLE
Definition RNA_types.hh:306
@ PROP_NEVER_NULL
Definition RNA_types.hh:377
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:439
@ PROP_ID_SELF_CHECK
Definition RNA_types.hh:370
@ PROP_TEXTEDIT_UPDATE
Definition RNA_types.hh:326
@ PROP_TIME
Definition RNA_types.hh:253
@ PROP_XYZ
Definition RNA_types.hh:269
@ PROP_FILENAME
Definition RNA_types.hh:238
@ PROP_PIXEL
Definition RNA_types.hh:248
@ PROP_ANGLE
Definition RNA_types.hh:252
@ PROP_TIME_ABSOLUTE
Definition RNA_types.hh:254
@ PROP_NONE
Definition RNA_types.hh:233
@ PROP_DIRPATH
Definition RNA_types.hh:237
@ PROP_PERCENTAGE
Definition RNA_types.hh:250
@ PROP_FACTOR
Definition RNA_types.hh:251
@ PROP_COLOR_GAMMA
Definition RNA_types.hh:272
@ PROP_UNSIGNED
Definition RNA_types.hh:249
@ PROP_FILEPATH
Definition RNA_types.hh:236
#define C
Definition RandGen.cpp:29
#define SOUND_EQUALIZER_DEFAULT_MAX_FREQ
Definition SEQ_sound.hh:30
#define SOUND_EQUALIZER_DEFAULT_MIN_FREQ
Definition SEQ_sound.hh:29
#define ND_SEQUENCER
Definition WM_types.hh:437
#define ND_SPACE_SEQUENCER
Definition WM_types.hh:535
#define ND_DISPLAY
Definition WM_types.hh:491
#define NC_SCENE
Definition WM_types.hh:378
#define ND_MODIFIER
Definition WM_types.hh:462
#define NC_IMAGE
Definition WM_types.hh:384
#define NC_OBJECT
Definition WM_types.hh:379
#define NC_SPACE
Definition WM_types.hh:392
#define NA_SELECTED
Definition WM_types.hh:589
BMesh const char void * data
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
long long int int64_t
int64_t size() const
Definition BLI_map.hh:976
void append(const T &value)
#define SELECT
#define offsetof(t, d)
#define input
int count
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
size_t(* MEM_allocN_len)(const void *vmemh)
Definition mallocn.cc:36
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
#define G(x, y, z)
void MOV_close(MovieReader *anim)
Definition movie_read.cc:66
IDProperty * MOV_load_metadata(MovieReader *anim)
Definition movie_read.cc:86
void sync_active_scene_and_time_with_scene_strip(bContext &C)
void prefetch_stop(Scene *scene)
Definition prefetch.cc:310
int time_right_handle_frame_get(const Scene *scene, const Strip *strip)
void foreach_strip(ListBase *seqbase, ForEachFunc callback, void *user_data)
Definition iterator.cc:59
size_t final_image_cache_calc_memory_size(const Scene *scene)
void add_movie_reload_if_needed(Main *bmain, Scene *scene, Strip *strip, bool *r_was_reloaded, bool *r_can_produce_frames)
Definition strip_add.cc:706
void relations_invalidate_cache(Scene *scene, Strip *strip)
Strip * lookup_strip_by_name(Editing *ed, const char *key)
void edit_remove_flagged_strips(Scene *scene, ListBase *seqbase)
void cache_settings_changed(Scene *scene)
bool relations_render_loop_check(Strip *strip_main, Strip *strip)
int retiming_keys_count(const Strip *strip)
void edit_flag_for_removal(Scene *scene, ListBase *seqbase, Strip *strip)
void transform_translate_strip(Scene *evil_scene, Strip *strip, int delta)
blender::Map< SeqRetimingKey *, Strip * > retiming_selection_get(const Editing *ed)
static void query_all_strips_recursive(const ListBase *seqbase, VectorSet< Strip * > &strips)
Definition iterator.cc:101
void modifier_persistent_uid_init(const Strip &strip, StripModifierData &smd)
void strip_channel_set(Strip *strip, int channel)
bool transform_test_overlap(const Scene *scene, Strip *strip1, Strip *strip2)
Editing * editing_get(const Scene *scene)
Definition sequencer.cc:286
Strip * strip_from_strip_elem(ListBase *seqbase, StripElem *se)
ListBase * get_seqbase_by_strip(const Scene *scene, Strip *strip)
void meta_stack_set(const Scene *scene, Strip *dst)
Definition sequencer.cc:463
float time_strip_fps_get(Scene *scene, Strip *strip)
void edit_strip_name_set(Scene *scene, Strip *strip, const char *new_name)
void retiming_remove_key(Strip *strip, SeqRetimingKey *key)
void modifier_unique_name(Strip *strip, StripModifierData *smd)
int time_left_handle_frame_get(const Scene *, const Strip *strip)
void relations_invalidate_cache_raw(Scene *scene, Strip *strip)
float time_start_frame_get(const Strip *strip)
int sequence_supports_modifiers(Strip *strip)
Strip * lookup_strip_by_channel_owner(Editing *ed, const SeqTimelineChannel *channel)
int time_strip_length_get(const Scene *scene, const Strip *strip)
void proxy_set(Strip *strip, bool value)
Definition proxy.cc:613
void add_reload_new_file(Main *bmain, Scene *scene, Strip *strip, const bool lock_range)
Definition strip_add.cc:538
constexpr int MAX_CHANNELS
void sound_equalizermodifier_free(StripModifierData *smd)
EQCurveMappingData * sound_equalizermodifier_add_graph(SoundEqualizerModifierData *semd, float min_freq, float max_freq)
bool transform_seqbase_shuffle_ex(ListBase *seqbasep, Strip *test, Scene *evil_scene, int channel_delta)
void sound_update_bounds(Scene *scene, Strip *strip)
bool modifier_remove(Strip *strip, StripModifierData *smd)
void modifier_set_active(Strip *strip, StripModifierData *smd)
void select_active_set(Scene *scene, Strip *strip)
ListBase * get_channels_by_strip(Editing *ed, const Strip *strip)
Definition channels.cc:86
void cache_cleanup(Scene *scene)
void retiming_key_timeline_frame_set(const Scene *scene, Strip *strip, SeqRetimingKey *key, int timeline_frame, bool keep_retiming)
StripModifierData * modifier_new(Strip *strip, const char *name, int type)
bool transform_is_locked(ListBase *channels, const Strip *strip)
void strip_unique_name_set(Scene *scene, ListBase *seqbasep, Strip *strip)
void effect_text_font_unload(TextVars *data, const bool do_id_user)
void time_left_handle_frame_set(const Scene *scene, Strip *strip, int timeline_frame)
void time_right_handle_frame_set(const Scene *scene, Strip *strip, int timeline_frame)
size_t source_image_cache_calc_memory_size(const Scene *scene)
void relations_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render)
void strip_lookup_invalidate(const Editing *ed)
bool transform_seqbase_shuffle(ListBase *seqbasep, Strip *test, Scene *evil_scene)
bool exists_in_seqbase(const Strip *strip, const ListBase *seqbase)
StripModifierData * modifier_get_active(const Strip *strip)
bool edit_move_strip_to_seqbase(Scene *scene, ListBase *seqbase, Strip *strip, ListBase *dst_seqbase)
int effect_get_num_inputs(int strip_type)
Definition effects.cc:327
const char * name
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
const PointerRNA PointerRNA_NULL
bool RNA_pointer_is_null(const PointerRNA *ptr)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, size_t itemsize, int64_t length, bool free_ptr, IteratorSkipFunc skip)
void rna_pointer_create_with_ancestors(const PointerRNA &parent, StructRNA *type, void *data, PointerRNA &r_ptr)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
PointerRNA RNA_pointer_create_with_parent(const PointerRNA &parent, StructRNA *type, void *data)
static void rna_def_text(BlenderRNA *brna)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_struct_system_idprops_func(StructRNA *srna, const char *system_idproperties)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_enum_default(PropertyRNA *prop, int value)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable)
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_api_strip(StructRNA *srna)
void RNA_api_strip_retiming_keys(BlenderRNA *brna)
void RNA_api_strips(StructRNA *srna, bool metastrip)
void RNA_api_strip_elements(BlenderRNA *brna, PropertyRNA *cprop)
const EnumPropertyItem rna_enum_views_format_items[]
Definition rna_scene.cc:499
static void rna_def_effect_inputs(StructRNA *srna, int count)
#define RNA_ENUM_SEQUENCER_VIDEO_MODIFIER_TYPE_ITEMS
static void rna_def_filter_video(StructRNA *srna)
static void rna_def_movieclip(BlenderRNA *brna)
static void rna_def_input(StructRNA *srna)
static void rna_def_sound_equalizer_modifier(BlenderRNA *brna)
static void rna_def_color_balance(BlenderRNA *brna)
static void rna_def_modifiers(BlenderRNA *brna)
static void rna_def_gaussian_blur(StructRNA *srna)
static void rna_def_brightcontrast_modifier(BlenderRNA *brna)
void RNA_def_sequencer(BlenderRNA *brna)
static void rna_def_image(BlenderRNA *brna)
static void rna_def_editor(BlenderRNA *brna)
static void rna_def_effect(BlenderRNA *brna)
static void rna_def_channel(BlenderRNA *brna)
static void rna_def_whitebalance_modifier(BlenderRNA *brna)
static void rna_def_mask(BlenderRNA *brna)
static void rna_def_strip_element(BlenderRNA *brna)
static void rna_def_movie_types(StructRNA *srna)
static void rna_def_mask_modifier(BlenderRNA *brna)
static void rna_def_speed_control(StructRNA *srna)
static void rna_def_sound(BlenderRNA *brna)
static void rna_def_tonemap_modifier(BlenderRNA *brna)
static void rna_def_text(StructRNA *srna)
static void rna_def_colorbalance_modifier(BlenderRNA *brna)
#define RNA_ENUM_SEQUENCER_AUDIO_MODIFIER_TYPE_ITEMS
static void rna_def_strip_crop(BlenderRNA *brna)
static void rna_def_strips_top_level(BlenderRNA *brna)
static void rna_def_modifier_panel_open_prop(StructRNA *srna, const char *identifier, const int id)
static void rna_def_modifier(BlenderRNA *brna)
static void rna_def_color_mix(StructRNA *srna)
static void rna_def_compositor_modifier(BlenderRNA *brna)
static void rna_def_solid_color(StructRNA *srna)
static void rna_def_audio_options(StructRNA *srna)
static void rna_def_strip_transform(BlenderRNA *brna)
static void rna_def_movie(BlenderRNA *brna)
static void rna_def_wipe(StructRNA *srna)
static void rna_def_graphical_sound_equalizer(BlenderRNA *brna)
static void rna_def_multicam(StructRNA *srna)
static void rna_def_strip(BlenderRNA *brna)
static void rna_def_scene(BlenderRNA *brna)
const EnumPropertyItem rna_enum_strip_video_modifier_type_items[]
const EnumPropertyItem rna_enum_strip_color_items[]
static void rna_def_effects(BlenderRNA *brna)
static void rna_def_retiming_keys(StructRNA *srna)
static void rna_def_color_management(StructRNA *srna)
const EnumPropertyItem rna_enum_strip_modifier_type_items[]
static void rna_def_curves_modifier(BlenderRNA *brna)
static void rna_def_strip_color_balance(BlenderRNA *brna)
static EffectInfo def_effects[]
static const EnumPropertyItem transform_filter_items[]
const EnumPropertyItem rna_enum_strip_scale_method_items[]
static void rna_def_strip_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_hue_modifier(BlenderRNA *brna)
static void rna_def_strip_proxy(BlenderRNA *brna)
static void rna_def_proxy(StructRNA *srna)
static void rna_def_glow(StructRNA *srna)
static void rna_def_meta(BlenderRNA *brna)
static void rna_def_strips_meta(BlenderRNA *brna)
static void rna_def_retiming_key(BlenderRNA *brna)
static const EnumPropertyItem blend_mode_items[]
const EnumPropertyItem rna_enum_strip_sound_modifier_type_items[]
static void rna_def_sound_modifiers(BlenderRNA *brna)
#define min(a, b)
Definition sort.cc:36
#define FLT_MAX
Definition stdcycles.h:14
union CollectionPropertyIterator::@220100362304005352221007113371015217044252346141 internal
ListBaseIterator listbase
Definition RNA_types.hh:606
StripColorBalance color_balance
ListBase seqbase
ListBase channels
const char * ui_name
const char * struct_name
const char * ui_desc
void(* func)(StructRNA *)
Definition DNA_ID.h:414
void * first
T * data_as() const
Definition RNA_types.hh:124
void invalidate()
Definition RNA_types.hh:110
void * data
Definition RNA_types.hh:53
struct FFMpegCodecData ffcodecdata
struct Editing * ed
struct RenderData r
struct MovieReader * anim
StripProxy * proxy
StripCrop * crop
StripTransform * transform
StripElem * stripdata
char dirpath[768]
char filename[256]
struct StripModifierData * prev
struct StripModifierData * next
struct Strip * mask_strip
struct MovieReader * anim
struct Strip * input1
int8_t color_tag
StripData * data
struct IDProperty * prop
void * effectdata
ListBase seqbase
struct IDProperty * system_properties
float blend_opacity
char name[64]
ListBase modifiers
struct Strip * input2
ListBase channels
ListBase anims
max
Definition text_draw.cc:251
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4238