diff options
Diffstat (limited to 'source/blender/sequencer')
-rw-r--r-- | source/blender/sequencer/SEQ_edit.h | 8 | ||||
-rw-r--r-- | source/blender/sequencer/SEQ_relations.h | 2 | ||||
-rw-r--r-- | source/blender/sequencer/SEQ_select.h | 6 | ||||
-rw-r--r-- | source/blender/sequencer/SEQ_transform.h | 2 | ||||
-rw-r--r-- | source/blender/sequencer/intern/modifier.c | 6 | ||||
-rw-r--r-- | source/blender/sequencer/intern/proxy.c | 4 | ||||
-rw-r--r-- | source/blender/sequencer/intern/render.c | 16 | ||||
-rw-r--r-- | source/blender/sequencer/intern/sequencer.c | 12 | ||||
-rw-r--r-- | source/blender/sequencer/intern/sound.c | 3 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_edit.c | 31 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_select.c | 6 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_time.c | 24 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_time.h | 1 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_transform.c | 14 |
14 files changed, 76 insertions, 59 deletions
diff --git a/source/blender/sequencer/SEQ_edit.h b/source/blender/sequencer/SEQ_edit.h index ff9c387e527..afe35d20c2b 100644 --- a/source/blender/sequencer/SEQ_edit.h +++ b/source/blender/sequencer/SEQ_edit.h @@ -16,10 +16,10 @@ struct Main; struct Scene; struct Sequence; -int SEQ_edit_sequence_swap(struct Scene *scene, - struct Sequence *seq_a, - struct Sequence *seq_b, - const char **error_str); +bool SEQ_edit_sequence_swap(struct Scene *scene, + struct Sequence *seq_a, + struct Sequence *seq_b, + const char **error_str); /** * Move sequence to seqbase. * diff --git a/source/blender/sequencer/SEQ_relations.h b/source/blender/sequencer/SEQ_relations.h index 9678ac1cc1c..1b8d9db347d 100644 --- a/source/blender/sequencer/SEQ_relations.h +++ b/source/blender/sequencer/SEQ_relations.h @@ -31,7 +31,7 @@ bool SEQ_relations_check_scene_recursion(struct Scene *scene, struct ReportList * Check if "seq_main" (indirectly) uses strip "seq". */ bool SEQ_relations_render_loop_check(struct Sequence *seq_main, struct Sequence *seq); -void SEQ_relations_free_imbuf(struct Scene *scene, struct ListBase *seqbasep, bool for_render); +void SEQ_relations_free_imbuf(struct Scene *scene, struct ListBase *seqbase, bool for_render); void SEQ_relations_invalidate_cache_raw(struct Scene *scene, struct Sequence *seq); void SEQ_relations_invalidate_cache_preprocessed(struct Scene *scene, struct Sequence *seq); void SEQ_relations_invalidate_cache_composite(struct Scene *scene, struct Sequence *seq); diff --git a/source/blender/sequencer/SEQ_select.h b/source/blender/sequencer/SEQ_select.h index 92fb508372e..52d0bcc120e 100644 --- a/source/blender/sequencer/SEQ_select.h +++ b/source/blender/sequencer/SEQ_select.h @@ -15,9 +15,9 @@ struct Scene; struct Sequence; struct Sequence *SEQ_select_active_get(struct Scene *scene); -int SEQ_select_active_get_pair(struct Scene *scene, - struct Sequence **r_seq_act, - struct Sequence **r_seq_other); +bool SEQ_select_active_get_pair(struct Scene *scene, + struct Sequence **r_seq_act, + struct Sequence **r_seq_other); void SEQ_select_active_set(struct Scene *scene, struct Sequence *seq); #ifdef __cplusplus diff --git a/source/blender/sequencer/SEQ_transform.h b/source/blender/sequencer/SEQ_transform.h index 8bc7733861c..c27a9dc4409 100644 --- a/source/blender/sequencer/SEQ_transform.h +++ b/source/blender/sequencer/SEQ_transform.h @@ -30,7 +30,7 @@ bool SEQ_transform_test_overlap(const struct Scene *scene, bool SEQ_transform_test_overlap_seq_seq(const struct Scene *scene, struct Sequence *seq1, struct Sequence *seq2); -void SEQ_transform_translate_sequence(struct Scene *scene, struct Sequence *seq, int delta); +void SEQ_transform_translate_sequence(struct Scene *evil_scene, struct Sequence *seq, int delta); /** * \return 0 if there weren't enough space. */ diff --git a/source/blender/sequencer/intern/modifier.c b/source/blender/sequencer/intern/modifier.c index b0f2f53396b..93bdcb59e88 100644 --- a/source/blender/sequencer/intern/modifier.c +++ b/source/blender/sequencer/intern/modifier.c @@ -598,7 +598,7 @@ static void modifier_color_balance_apply( ColorBalanceInitData init_data; if (!ibuf->rect_float && make_float) { - imb_addrectfloatImBuf(ibuf); + imb_addrectfloatImBuf(ibuf, 4); } init_data.cb = cb; @@ -1008,7 +1008,7 @@ static void brightcontrast_apply_threaded(int width, /* * The algorithm is by Werner D. Streidt * (http://visca.com/ffactory/archives/5-99/msg00021.html) - * Extracted of OpenCV demhist.c + * Extracted of OpenCV `demhist.c`. */ if (contrast > 0) { a = 1.0f - delta * 2.0f; @@ -1177,7 +1177,7 @@ typedef struct AvgLogLum { static void tonemapmodifier_init_data(SequenceModifierData *smd) { SequencerTonemapModifierData *tmmd = (SequencerTonemapModifierData *)smd; - /* Same as tonemap compositor node. */ + /* Same as tone-map compositor node. */ tmmd->type = SEQ_TONEMAP_RD_PHOTORECEPTOR; tmmd->key = 0.18f; tmmd->offset = 1.0f; diff --git a/source/blender/sequencer/intern/proxy.c b/source/blender/sequencer/intern/proxy.c index 374e18dd36a..4220efab8bf 100644 --- a/source/blender/sequencer/intern/proxy.c +++ b/source/blender/sequencer/intern/proxy.c @@ -177,14 +177,12 @@ static bool seq_proxy_get_fname(Scene *scene, BLI_snprintf(name, PROXY_MAXFILE, - "%s/images/%d/%s_proxy%s", + "%s/images/%d/%s_proxy%s.jpg", dir, proxy_size_number, SEQ_render_give_stripelem(scene, seq, timeline_frame)->name, suffix); BLI_path_abs(name, BKE_main_blendfile_path_from_global()); - strcat(name, ".jpg"); - return true; } diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c index b7dc0e7035d..eff0f0b17e9 100644 --- a/source/blender/sequencer/intern/render.c +++ b/source/blender/sequencer/intern/render.c @@ -134,7 +134,7 @@ void seq_imbuf_to_sequencer_space(Scene *scene, ImBuf *ibuf, bool make_float) /* We perform conversion to a float buffer so we don't worry about * precision loss. */ - imb_addrectfloatImBuf(ibuf); + imb_addrectfloatImBuf(ibuf, 4); IMB_colormanagement_transform_from_byte_threaded(ibuf->rect_float, (unsigned char *)ibuf->rect, ibuf->x, @@ -1352,7 +1352,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, * find render). * However, when called from within the UI (image preview in sequencer) * we do want to use scene Render, that way the render result is defined - * for display in render/imagewindow + * for display in render/image-window * * Hmm, don't see, why we can't do that all the time, * and since G.is_rendering is uhm, gone... (Peter) @@ -1506,8 +1506,16 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, re = RE_NewSceneRender(scene); } - RE_RenderFrame( - re, context->bmain, scene, have_comp ? NULL : view_layer, camera, frame, 0.0f, false); + const float subframe = frame - floorf(frame); + + RE_RenderFrame(re, + context->bmain, + scene, + have_comp ? NULL : view_layer, + camera, + floorf(frame), + subframe, + false); /* restore previous state after it was toggled on & off by RE_RenderFrame */ G.is_rendering = is_rendering; diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c index 53a969d7fea..4548975574d 100644 --- a/source/blender/sequencer/intern/sequencer.c +++ b/source/blender/sequencer/intern/sequencer.c @@ -426,22 +426,22 @@ MetaStack *SEQ_meta_stack_active_get(const Editing *ed) return ed->metastack.last; } -void SEQ_meta_stack_set(const Scene *scene, Sequence *seqm) +void SEQ_meta_stack_set(const Scene *scene, Sequence *dst_seq) { Editing *ed = SEQ_editing_get(scene); /* Clear metastack */ BLI_freelistN(&ed->metastack); - if (seqm != NULL) { + if (dst_seq != NULL) { /* Allocate meta stack in a way, that represents meta hierarchy in timeline. */ - seq_meta_stack_alloc(scene, seqm); - Sequence *meta_parent = seqm; + seq_meta_stack_alloc(scene, dst_seq); + Sequence *meta_parent = dst_seq; while ((meta_parent = seq_sequence_lookup_meta_by_seq(scene, meta_parent))) { seq_meta_stack_alloc(scene, meta_parent); } - SEQ_seqbase_active_set(ed, &seqm->seqbase); - SEQ_channels_displayed_set(ed, &seqm->channels); + SEQ_seqbase_active_set(ed, &dst_seq->seqbase); + SEQ_channels_displayed_set(ed, &dst_seq->channels); } else { /* Go to top level, exiting meta strip. */ diff --git a/source/blender/sequencer/intern/sound.c b/source/blender/sequencer/intern/sound.c index c4992848cb5..69ccbdcb54e 100644 --- a/source/blender/sequencer/intern/sound.c +++ b/source/blender/sequencer/intern/sound.c @@ -26,7 +26,8 @@ #include "sequencer.h" #include "strip_time.h" -/* Unlike _update_sound_ funcs, these ones take info from audaspace to update sequence length! */ +/* Unlike _update_sound_ functions, + * these ones take info from audaspace to update sequence length! */ #ifdef WITH_AUDASPACE static bool sequencer_refresh_sound_length_recursive(Main *bmain, Scene *scene, ListBase *seqbase) { diff --git a/source/blender/sequencer/intern/strip_edit.c b/source/blender/sequencer/intern/strip_edit.c index 15c472dd5a7..7358f5e74a0 100644 --- a/source/blender/sequencer/intern/strip_edit.c +++ b/source/blender/sequencer/intern/strip_edit.c @@ -37,32 +37,32 @@ #include "SEQ_transform.h" #include "SEQ_utils.h" -int SEQ_edit_sequence_swap(Scene *scene, Sequence *seq_a, Sequence *seq_b, const char **error_str) +bool SEQ_edit_sequence_swap(Scene *scene, Sequence *seq_a, Sequence *seq_b, const char **error_str) { char name[sizeof(seq_a->name)]; if (SEQ_time_strip_length_get(scene, seq_a) != SEQ_time_strip_length_get(scene, seq_b)) { *error_str = N_("Strips must be the same length"); - return 0; + return false; } /* type checking, could be more advanced but disallow sound vs non-sound copy */ if (seq_a->type != seq_b->type) { if (seq_a->type == SEQ_TYPE_SOUND_RAM || seq_b->type == SEQ_TYPE_SOUND_RAM) { *error_str = N_("Strips were not compatible"); - return 0; + return false; } /* disallow effects to swap with non-effects strips */ if ((seq_a->type & SEQ_TYPE_EFFECT) != (seq_b->type & SEQ_TYPE_EFFECT)) { *error_str = N_("Strips were not compatible"); - return 0; + return false; } if ((seq_a->type & SEQ_TYPE_EFFECT) && (seq_b->type & SEQ_TYPE_EFFECT)) { if (SEQ_effect_get_num_inputs(seq_a->type) != SEQ_effect_get_num_inputs(seq_b->type)) { *error_str = N_("Strips must have the same number of inputs"); - return 0; + return false; } } } @@ -87,27 +87,26 @@ int SEQ_edit_sequence_swap(Scene *scene, Sequence *seq_a, Sequence *seq_b, const seq_time_effect_range_set(scene, seq_a); seq_time_effect_range_set(scene, seq_b); - return 1; + return true; } static void seq_update_muting_recursive(ListBase *channels, ListBase *seqbasep, Sequence *metaseq, - int mute) + const bool mute) { Sequence *seq; - int seqmute; /* For sound we go over full meta tree to update muted state, * since sound is played outside of evaluating the imbufs. */ for (seq = seqbasep->first; seq; seq = seq->next) { - seqmute = (mute || SEQ_render_is_muted(channels, seq)); + bool seqmute = (mute || SEQ_render_is_muted(channels, seq)); if (seq->type == SEQ_TYPE_META) { /* if this is the current meta sequence, unmute because * all sequences above this were set to mute */ if (seq == metaseq) { - seqmute = 0; + seqmute = false; } seq_update_muting_recursive(&seq->channels, &seq->seqbase, metaseq, seqmute); @@ -127,10 +126,10 @@ void SEQ_edit_update_muting(Editing *ed) MetaStack *ms = ed->metastack.last; if (ms) { - seq_update_muting_recursive(&ed->channels, &ed->seqbase, ms->parseq, 1); + seq_update_muting_recursive(&ed->channels, &ed->seqbase, ms->parseq, true); } else { - seq_update_muting_recursive(&ed->channels, &ed->seqbase, NULL, 0); + seq_update_muting_recursive(&ed->channels, &ed->seqbase, NULL, false); } } } @@ -261,7 +260,7 @@ bool SEQ_edit_move_strip_to_meta(Scene *scene, static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int timeline_frame) { - /* Adjust within range of extended stillframes before strip. */ + /* Adjust within range of extended still-frames before strip. */ if (timeline_frame < seq->start) { seq->start = timeline_frame - 1; seq->anim_endofs += SEQ_time_strip_length_get(scene, seq) - 1; @@ -275,7 +274,7 @@ static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int time seq->endstill = 0; seq->anim_endofs += (seq->start + SEQ_time_strip_length_get(scene, seq)) - timeline_frame; } - /* Adjust within range of extended stillframes after strip. */ + /* Adjust within range of extended still-frames after strip. */ else if ((seq->start + SEQ_time_strip_length_get(scene, seq)) < timeline_frame) { seq->endstill = timeline_frame - seq->start - SEQ_time_strip_length_get(scene, seq); } @@ -283,7 +282,7 @@ static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int time static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int timeline_frame) { - /* Adjust within range of extended stillframes before strip. */ + /* Adjust within range of extended still-frames before strip. */ if (timeline_frame < seq->start) { seq->startstill = seq->start - timeline_frame; } @@ -295,7 +294,7 @@ static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int tim seq->startstill = 0; seq->startofs = 0; } - /* Adjust within range of extended stillframes after strip. */ + /* Adjust within range of extended still-frames after strip. */ else if ((seq->start + SEQ_time_strip_length_get(scene, seq)) < timeline_frame) { seq->start = timeline_frame; seq->startofs = 0; diff --git a/source/blender/sequencer/intern/strip_select.c b/source/blender/sequencer/intern/strip_select.c index 69b4ce1f7c7..1a4ad4d997e 100644 --- a/source/blender/sequencer/intern/strip_select.c +++ b/source/blender/sequencer/intern/strip_select.c @@ -37,14 +37,14 @@ void SEQ_select_active_set(Scene *scene, Sequence *seq) ed->act_seq = seq; } -int SEQ_select_active_get_pair(Scene *scene, Sequence **r_seq_act, Sequence **r_seq_other) +bool SEQ_select_active_get_pair(Scene *scene, Sequence **r_seq_act, Sequence **r_seq_other) { Editing *ed = SEQ_editing_get(scene); *r_seq_act = SEQ_select_active_get(scene); if (*r_seq_act == NULL) { - return 0; + return false; } Sequence *seq; @@ -54,7 +54,7 @@ int SEQ_select_active_get_pair(Scene *scene, Sequence **r_seq_act, Sequence **r_ for (seq = ed->seqbasep->first; seq; seq = seq->next) { if (seq->flag & SELECT && (seq != (*r_seq_act))) { if (*r_seq_other) { - return 0; + return false; } *r_seq_other = seq; diff --git a/source/blender/sequencer/intern/strip_time.c b/source/blender/sequencer/intern/strip_time.c index 5d8266dbc6e..6725e0a8394 100644 --- a/source/blender/sequencer/intern/strip_time.c +++ b/source/blender/sequencer/intern/strip_time.c @@ -169,11 +169,16 @@ void SEQ_time_update_meta_strip_range(const Scene *scene, Sequence *seq_meta) seq_meta->len -= seq_meta->anim_startofs; seq_meta->len -= seq_meta->anim_endofs; - seq_update_sound_bounds_recursive(scene, seq_meta); + /* Functions `SEQ_time_*_handle_frame_set()` can not be used here, because they are clamped, so + * change must be done at once. */ + seq_meta->startofs = strip_start - seq_meta->start; + seq_meta->startdisp = strip_start; /* Only to make files usable in older versions. */ + seq_meta->endofs = seq_meta->start + SEQ_time_strip_length_get(scene, seq_meta) - strip_end; + seq_meta->enddisp = strip_end; /* Only to make files usable in older versions. */ - /* Prevent meta-strip to move in timeline. */ - SEQ_time_left_handle_frame_set(scene, seq_meta, strip_start); - SEQ_time_right_handle_frame_set(scene, seq_meta, strip_end); + seq_update_sound_bounds_recursive(scene, seq_meta); + SEQ_time_update_meta_strip_range(scene, seq_sequence_lookup_meta_by_seq(scene, seq_meta)); + seq_time_update_effects_strip_range(scene, seq_sequence_lookup_effects_by_seq(scene, seq_meta)); } void seq_time_effect_range_set(const Scene *scene, Sequence *seq) @@ -546,3 +551,14 @@ void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int val) SEQ_time_update_meta_strip_range(scene, seq_sequence_lookup_meta_by_seq(scene, seq)); seq_time_update_effects_strip_range(scene, seq_sequence_lookup_effects_by_seq(scene, seq)); } + +void seq_time_translate_handles(const Scene *scene, Sequence *seq, const int offset) +{ + seq->startofs += offset; + seq->endofs -= offset; + seq->startdisp += offset; /* Only to make files usable in older versions. */ + seq->enddisp -= offset; /* Only to make files usable in older versions. */ + + SEQ_time_update_meta_strip_range(scene, seq_sequence_lookup_meta_by_seq(scene, seq)); + seq_time_update_effects_strip_range(scene, seq_sequence_lookup_effects_by_seq(scene, seq)); +} diff --git a/source/blender/sequencer/intern/strip_time.h b/source/blender/sequencer/intern/strip_time.h index db581649f8a..19f549924df 100644 --- a/source/blender/sequencer/intern/strip_time.h +++ b/source/blender/sequencer/intern/strip_time.h @@ -40,6 +40,7 @@ void seq_time_gap_info_get(const struct Scene *scene, struct GapInfo *r_gap_info); void seq_time_effect_range_set(const struct Scene *scene, Sequence *seq); void seq_time_update_effects_strip_range(const struct Scene *scene, struct SeqCollection *effects); +void seq_time_translate_handles(const struct Scene *scene, struct Sequence *seq, const int offset); #ifdef __cplusplus } diff --git a/source/blender/sequencer/intern/strip_transform.c b/source/blender/sequencer/intern/strip_transform.c index 68b30c9ce19..2c7bb69da66 100644 --- a/source/blender/sequencer/intern/strip_transform.c +++ b/source/blender/sequencer/intern/strip_transform.c @@ -84,7 +84,7 @@ bool SEQ_transform_seqbase_isolated_sel_check(ListBase *seqbase) void SEQ_transform_fix_single_image_seq_offsets(const Scene *scene, Sequence *seq) { - int left, start, offset; + int left, start; if (!SEQ_transform_single_image_check(seq)) { return; } @@ -94,11 +94,8 @@ void SEQ_transform_fix_single_image_seq_offsets(const Scene *scene, Sequence *se left = SEQ_time_left_handle_frame_get(scene, seq); start = seq->start; if (start != left) { - offset = left - start; - SEQ_time_left_handle_frame_set( - scene, seq, SEQ_time_left_handle_frame_get(scene, seq) - offset); - SEQ_time_right_handle_frame_set( - scene, seq, SEQ_time_right_handle_frame_get(scene, seq) - offset); + const int offset = left - start; + seq_time_translate_handles(scene, seq, -offset); seq->start += offset; } } @@ -146,10 +143,7 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, Sequence *seq, int delt SEQ_transform_translate_sequence(evil_scene, seq_child, delta); } /* Move meta start/end points. */ - SEQ_time_left_handle_frame_set( - evil_scene, seq, SEQ_time_left_handle_frame_get(evil_scene, seq) + delta); - SEQ_time_right_handle_frame_set( - evil_scene, seq, SEQ_time_right_handle_frame_get(evil_scene, seq) + delta); + seq_time_translate_handles(evil_scene, seq, delta); } else { /* All other strip types. */ seq->start += delta; |