Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_sequencer/sequencer_add.c
| Show First 20 Lines • Show All 312 Lines • ▼ Show 20 Lines | |||||
| static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) | static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| Editing *ed = BKE_sequencer_editing_get(scene, true); | Editing *ed = BKE_sequencer_editing_get(scene, true); | ||||
| Scene *sce_seq; | Scene *sce_seq; | ||||
| Sequence *seq; /* generic strip vars */ | Sequence *seq; /* generic strip vars */ | ||||
| Strip *strip; | |||||
| int start_frame, channel; /* operator props */ | int start_frame, channel; /* operator props */ | ||||
| start_frame = RNA_int_get(op->ptr, "frame_start"); | start_frame = RNA_int_get(op->ptr, "frame_start"); | ||||
| channel = RNA_int_get(op->ptr, "channel"); | channel = RNA_int_get(op->ptr, "channel"); | ||||
| sce_seq = BLI_findlink(&CTX_data_main(C)->scenes, RNA_enum_get(op->ptr, "scene")); | sce_seq = BLI_findlink(&CTX_data_main(C)->scenes, RNA_enum_get(op->ptr, "scene")); | ||||
| if (sce_seq == NULL) { | if (sce_seq == NULL) { | ||||
| BKE_report(op->reports, RPT_ERROR, "Scene not found"); | BKE_report(op->reports, RPT_ERROR, "Scene not found"); | ||||
| return OPERATOR_CANCELLED; | return OPERATOR_CANCELLED; | ||||
| } | } | ||||
| seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel); | seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel, SEQ_TYPE_SCENE); | ||||
| seq->type = SEQ_TYPE_SCENE; | |||||
| seq->blend_mode = SEQ_TYPE_ALPHAOVER; | seq->blend_mode = SEQ_TYPE_ALPHAOVER; | ||||
| seq->scene = sce_seq; | seq->scene = sce_seq; | ||||
| /* basic defaults */ | /* basic defaults */ | ||||
| seq->strip = strip = MEM_callocN(sizeof(Strip), "strip"); | |||||
| seq->len = sce_seq->r.efra - sce_seq->r.sfra + 1; | seq->len = sce_seq->r.efra - sce_seq->r.sfra + 1; | ||||
| strip->us = 1; | |||||
| BLI_strncpy(seq->name + 2, sce_seq->id.name + 2, sizeof(seq->name) - 2); | BLI_strncpy(seq->name + 2, sce_seq->id.name + 2, sizeof(seq->name) - 2); | ||||
| BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | ||||
| seq->scene_sound = BKE_sound_scene_add_scene_sound( | seq->scene_sound = BKE_sound_scene_add_scene_sound( | ||||
| scene, seq, start_frame, start_frame + seq->len, 0); | scene, seq, start_frame, start_frame + seq->len, 0); | ||||
| BKE_sequence_calc_disp(scene, seq); | BKE_sequence_calc_disp(scene, seq); | ||||
| ▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | |||||
| static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op) | static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| Editing *ed = BKE_sequencer_editing_get(scene, true); | Editing *ed = BKE_sequencer_editing_get(scene, true); | ||||
| MovieClip *clip; | MovieClip *clip; | ||||
| Sequence *seq; /* generic strip vars */ | Sequence *seq; /* generic strip vars */ | ||||
| Strip *strip; | |||||
| int start_frame, channel; /* operator props */ | int start_frame, channel; /* operator props */ | ||||
| start_frame = RNA_int_get(op->ptr, "frame_start"); | start_frame = RNA_int_get(op->ptr, "frame_start"); | ||||
| channel = RNA_int_get(op->ptr, "channel"); | channel = RNA_int_get(op->ptr, "channel"); | ||||
| clip = BLI_findlink(&CTX_data_main(C)->movieclips, RNA_enum_get(op->ptr, "clip")); | clip = BLI_findlink(&CTX_data_main(C)->movieclips, RNA_enum_get(op->ptr, "clip")); | ||||
| if (clip == NULL) { | if (clip == NULL) { | ||||
| BKE_report(op->reports, RPT_ERROR, "Movie clip not found"); | BKE_report(op->reports, RPT_ERROR, "Movie clip not found"); | ||||
| return OPERATOR_CANCELLED; | return OPERATOR_CANCELLED; | ||||
| } | } | ||||
| seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel); | seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel, SEQ_TYPE_MOVIECLIP); | ||||
| seq->type = SEQ_TYPE_MOVIECLIP; | |||||
| seq->blend_mode = SEQ_TYPE_ALPHAOVER; | seq->blend_mode = SEQ_TYPE_ALPHAOVER; | ||||
| seq->clip = clip; | seq->clip = clip; | ||||
| id_us_ensure_real(&seq->clip->id); | id_us_ensure_real(&seq->clip->id); | ||||
| /* basic defaults */ | /* basic defaults */ | ||||
| seq->strip = strip = MEM_callocN(sizeof(Strip), "strip"); | |||||
| seq->len = BKE_movieclip_get_duration(clip); | seq->len = BKE_movieclip_get_duration(clip); | ||||
| strip->us = 1; | |||||
| BLI_strncpy(seq->name + 2, clip->id.name + 2, sizeof(seq->name) - 2); | BLI_strncpy(seq->name + 2, clip->id.name + 2, sizeof(seq->name) - 2); | ||||
| BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | ||||
| BKE_sequence_calc_disp(scene, seq); | BKE_sequence_calc_disp(scene, seq); | ||||
| BKE_sequencer_sort(scene); | BKE_sequencer_sort(scene); | ||||
| sequencer_add_apply_replace_sel(C, op, seq); | sequencer_add_apply_replace_sel(C, op, seq); | ||||
| ▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
| static int sequencer_add_mask_strip_exec(bContext *C, wmOperator *op) | static int sequencer_add_mask_strip_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| Editing *ed = BKE_sequencer_editing_get(scene, true); | Editing *ed = BKE_sequencer_editing_get(scene, true); | ||||
| Mask *mask; | Mask *mask; | ||||
| Sequence *seq; /* generic strip vars */ | Sequence *seq; /* generic strip vars */ | ||||
| Strip *strip; | |||||
| int start_frame, channel; /* operator props */ | int start_frame, channel; /* operator props */ | ||||
| start_frame = RNA_int_get(op->ptr, "frame_start"); | start_frame = RNA_int_get(op->ptr, "frame_start"); | ||||
| channel = RNA_int_get(op->ptr, "channel"); | channel = RNA_int_get(op->ptr, "channel"); | ||||
| mask = BLI_findlink(&CTX_data_main(C)->masks, RNA_enum_get(op->ptr, "mask")); | mask = BLI_findlink(&CTX_data_main(C)->masks, RNA_enum_get(op->ptr, "mask")); | ||||
| if (mask == NULL) { | if (mask == NULL) { | ||||
| BKE_report(op->reports, RPT_ERROR, "Mask not found"); | BKE_report(op->reports, RPT_ERROR, "Mask not found"); | ||||
| return OPERATOR_CANCELLED; | return OPERATOR_CANCELLED; | ||||
| } | } | ||||
| seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel); | seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel, SEQ_TYPE_MASK); | ||||
| seq->type = SEQ_TYPE_MASK; | |||||
| seq->blend_mode = SEQ_TYPE_ALPHAOVER; | seq->blend_mode = SEQ_TYPE_ALPHAOVER; | ||||
| seq->mask = mask; | seq->mask = mask; | ||||
| id_us_ensure_real(&seq->mask->id); | id_us_ensure_real(&seq->mask->id); | ||||
| /* basic defaults */ | /* basic defaults */ | ||||
| seq->strip = strip = MEM_callocN(sizeof(Strip), "strip"); | |||||
| seq->len = BKE_mask_get_duration(mask); | seq->len = BKE_mask_get_duration(mask); | ||||
| strip->us = 1; | |||||
| BLI_strncpy(seq->name + 2, mask->id.name + 2, sizeof(seq->name) - 2); | BLI_strncpy(seq->name + 2, mask->id.name + 2, sizeof(seq->name) - 2); | ||||
| BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | ||||
| BKE_sequence_calc_disp(scene, seq); | BKE_sequence_calc_disp(scene, seq); | ||||
| BKE_sequencer_sort(scene); | BKE_sequencer_sort(scene); | ||||
| sequencer_add_apply_replace_sel(C, op, seq); | sequencer_add_apply_replace_sel(C, op, seq); | ||||
| ▲ Show 20 Lines • Show All 508 Lines • ▼ Show 20 Lines | |||||
| /* add_effect_strip operator */ | /* add_effect_strip operator */ | ||||
| static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) | static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| Editing *ed = BKE_sequencer_editing_get(scene, true); | Editing *ed = BKE_sequencer_editing_get(scene, true); | ||||
| Sequence *seq; /* generic strip vars */ | Sequence *seq; /* generic strip vars */ | ||||
| Strip *strip; | |||||
| struct SeqEffectHandle sh; | struct SeqEffectHandle sh; | ||||
| int start_frame, end_frame, channel, type; /* operator props */ | int start_frame, end_frame, channel, type; /* operator props */ | ||||
| Sequence *seq1, *seq2, *seq3; | Sequence *seq1, *seq2, *seq3; | ||||
| const char *error_msg; | const char *error_msg; | ||||
| start_frame = RNA_int_get(op->ptr, "frame_start"); | start_frame = RNA_int_get(op->ptr, "frame_start"); | ||||
| Show All 10 Lines | static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) | ||||
| /* If seq1 is NULL and no error was raised it means the seq is standalone | /* If seq1 is NULL and no error was raised it means the seq is standalone | ||||
| * (like color strips) and we need to check its start and end frames are valid */ | * (like color strips) and we need to check its start and end frames are valid */ | ||||
| if (seq1 == NULL && end_frame <= start_frame) { | if (seq1 == NULL && end_frame <= start_frame) { | ||||
| BKE_report(op->reports, RPT_ERROR, "Start and end frame are not set"); | BKE_report(op->reports, RPT_ERROR, "Start and end frame are not set"); | ||||
| return OPERATOR_CANCELLED; | return OPERATOR_CANCELLED; | ||||
| } | } | ||||
| seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel); | seq = BKE_sequence_alloc(ed->seqbasep, start_frame, channel, type); | ||||
| seq->type = type; | |||||
| BLI_strncpy(seq->name + 2, BKE_sequence_give_name(seq), sizeof(seq->name) - 2); | BLI_strncpy(seq->name + 2, BKE_sequence_give_name(seq), sizeof(seq->name) - 2); | ||||
| BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | BKE_sequence_base_unique_name_recursive(&ed->seqbase, seq); | ||||
| sh = BKE_sequence_get_effect(seq); | sh = BKE_sequence_get_effect(seq); | ||||
| seq->seq1 = seq1; | seq->seq1 = seq1; | ||||
| seq->seq2 = seq2; | seq->seq2 = seq2; | ||||
| seq->seq3 = seq3; | seq->seq3 = seq3; | ||||
| sh.init(seq); | sh.init(seq); | ||||
| if (!seq1) { /* effect has no deps */ | if (!seq1) { /* effect has no deps */ | ||||
| seq->len = 1; | seq->len = 1; | ||||
| BKE_sequence_tx_set_final_right(seq, end_frame); | BKE_sequence_tx_set_final_right(seq, end_frame); | ||||
| } | } | ||||
| seq->flag |= SEQ_USE_EFFECT_DEFAULT_FADE; | seq->flag |= SEQ_USE_EFFECT_DEFAULT_FADE; | ||||
| BKE_sequence_calc(scene, seq); | BKE_sequence_calc(scene, seq); | ||||
| /* basic defaults */ | |||||
| seq->strip = strip = MEM_callocN(sizeof(Strip), "strip"); | |||||
| strip->us = 1; | |||||
| if (seq->type == SEQ_TYPE_COLOR) { | if (seq->type == SEQ_TYPE_COLOR) { | ||||
| SolidColorVars *colvars = (SolidColorVars *)seq->effectdata; | SolidColorVars *colvars = (SolidColorVars *)seq->effectdata; | ||||
| RNA_float_get_array(op->ptr, "color", colvars->col); | RNA_float_get_array(op->ptr, "color", colvars->col); | ||||
| } | } | ||||
| seq->blend_mode = SEQ_TYPE_ALPHAOVER; | seq->blend_mode = SEQ_TYPE_ALPHAOVER; | ||||
| /* an unset channel is a special case where we automatically go above | /* an unset channel is a special case where we automatically go above | ||||
| * the other strips. */ | * the other strips. */ | ||||
| ▲ Show 20 Lines • Show All 85 Lines • Show Last 20 Lines | |||||