diff options
Diffstat (limited to 'source/blender/sequencer/intern')
-rw-r--r-- | source/blender/sequencer/intern/disk_cache.c | 38 | ||||
-rw-r--r-- | source/blender/sequencer/intern/proxy.c | 7 | ||||
-rw-r--r-- | source/blender/sequencer/intern/render.c | 7 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_add.c | 6 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_edit.c | 62 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_time.c | 51 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_transform.c | 63 |
7 files changed, 110 insertions, 124 deletions
diff --git a/source/blender/sequencer/intern/disk_cache.c b/source/blender/sequencer/intern/disk_cache.c index 0fdaef61b65..f8e8fc32a5d 100644 --- a/source/blender/sequencer/intern/disk_cache.c +++ b/source/blender/sequencer/intern/disk_cache.c @@ -344,15 +344,15 @@ static void seq_disk_cache_create_version_file(char *path) static void seq_disk_cache_handle_versioning(SeqDiskCache *disk_cache) { - char path[FILE_MAX]; + char filepath[FILE_MAX]; char path_version_file[FILE_MAX]; int version = 0; - seq_disk_cache_get_project_dir(disk_cache, path, sizeof(path)); - BLI_strncpy(path_version_file, path, sizeof(path_version_file)); + seq_disk_cache_get_project_dir(disk_cache, filepath, sizeof(filepath)); + BLI_strncpy(path_version_file, filepath, sizeof(path_version_file)); BLI_path_append(path_version_file, sizeof(path_version_file), "cache_version"); - if (BLI_exists(path) && BLI_is_dir(path)) { + if (BLI_exists(filepath) && BLI_is_dir(filepath)) { FILE *file = BLI_fopen(path_version_file, "r"); if (file) { @@ -364,7 +364,7 @@ static void seq_disk_cache_handle_versioning(SeqDiskCache *disk_cache) } if (version != DCACHE_CURRENT_VERSION) { - BLI_delete(path, false, true); + BLI_delete(filepath, false, true); seq_disk_cache_create_version_file(path_version_file); } } @@ -548,22 +548,22 @@ bool seq_disk_cache_write_file(SeqDiskCache *disk_cache, SeqCacheKey *key, ImBuf { BLI_mutex_lock(&disk_cache->read_write_mutex); - char path[FILE_MAX]; + char filepath[FILE_MAX]; - seq_disk_cache_get_file_path(disk_cache, key, path, sizeof(path)); - BLI_make_existing_file(path); + seq_disk_cache_get_file_path(disk_cache, key, filepath, sizeof(filepath)); + BLI_make_existing_file(filepath); - FILE *file = BLI_fopen(path, "rb+"); + FILE *file = BLI_fopen(filepath, "rb+"); if (!file) { - file = BLI_fopen(path, "wb+"); + file = BLI_fopen(filepath, "wb+"); if (!file) { BLI_mutex_unlock(&disk_cache->read_write_mutex); return false; } - seq_disk_cache_add_file_to_list(disk_cache, path); + seq_disk_cache_add_file_to_list(disk_cache, filepath); } - DiskCacheFile *cache_file = seq_disk_cache_get_file_entry_by_path(disk_cache, path); + DiskCacheFile *cache_file = seq_disk_cache_get_file_entry_by_path(disk_cache, filepath); DiskCacheHeader header; memset(&header, 0, sizeof(header)); /* #BLI_make_existing_file() above may create an empty file. This is fine, don't attempt reading @@ -585,7 +585,7 @@ bool seq_disk_cache_write_file(SeqDiskCache *disk_cache, SeqCacheKey *key, ImBuf */ header.entry[entry_index].size_compressed = bytes_written; seq_disk_cache_write_header(file, &header); - seq_disk_cache_update_file(disk_cache, path); + seq_disk_cache_update_file(disk_cache, filepath); fclose(file); BLI_mutex_unlock(&disk_cache->read_write_mutex); @@ -600,13 +600,13 @@ ImBuf *seq_disk_cache_read_file(SeqDiskCache *disk_cache, SeqCacheKey *key) { BLI_mutex_lock(&disk_cache->read_write_mutex); - char path[FILE_MAX]; + char filepath[FILE_MAX]; DiskCacheHeader header; - seq_disk_cache_get_file_path(disk_cache, key, path, sizeof(path)); - BLI_make_existing_file(path); + seq_disk_cache_get_file_path(disk_cache, key, filepath, sizeof(filepath)); + BLI_make_existing_file(filepath); - FILE *file = BLI_fopen(path, "rb"); + FILE *file = BLI_fopen(filepath, "rb"); if (!file) { BLI_mutex_unlock(&disk_cache->read_write_mutex); return NULL; @@ -656,8 +656,8 @@ ImBuf *seq_disk_cache_read_file(SeqDiskCache *disk_cache, SeqCacheKey *key) BLI_mutex_unlock(&disk_cache->read_write_mutex); return NULL; } - BLI_file_touch(path); - seq_disk_cache_update_file(disk_cache, path); + BLI_file_touch(filepath); + seq_disk_cache_update_file(disk_cache, filepath); fclose(file); BLI_mutex_unlock(&disk_cache->read_write_mutex); diff --git a/source/blender/sequencer/intern/proxy.c b/source/blender/sequencer/intern/proxy.c index 91b69bfe01f..59b4c6de1ef 100644 --- a/source/blender/sequencer/intern/proxy.c +++ b/source/blender/sequencer/intern/proxy.c @@ -523,9 +523,7 @@ void SEQ_proxy_rebuild(SeqIndexBuildContext *context, SeqRenderState state; seq_render_state_init(&state); - for (timeline_frame = seq->startdisp + seq->startstill; - timeline_frame < seq->enddisp - seq->endstill; - timeline_frame++) { + for (timeline_frame = seq->startdisp; timeline_frame < seq->enddisp; timeline_frame++) { if (context->size_flags & IMB_PROXY_25) { seq_proxy_build_frame(&render_context, &state, seq, timeline_frame, 25, overwrite); } @@ -539,8 +537,7 @@ void SEQ_proxy_rebuild(SeqIndexBuildContext *context, seq_proxy_build_frame(&render_context, &state, seq, timeline_frame, 100, overwrite); } - *progress = (float)(timeline_frame - seq->startdisp - seq->startstill) / - (seq->enddisp - seq->endstill - seq->startdisp - seq->startstill); + *progress = (float)(timeline_frame - seq->startdisp) / (seq->enddisp - seq->startdisp); *do_update = true; if (*stop || G.is_break) { diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c index 1b9e89a35d5..b0898be3765 100644 --- a/source/blender/sequencer/intern/render.c +++ b/source/blender/sequencer/intern/render.c @@ -2088,7 +2088,8 @@ void SEQ_render_thumbnails(const SeqRenderData *context, /* Adding the hold offset value (seq->anim_startofs) to the start frame. Position of image not * affected, but frame loaded affected. */ - float upper_thumb_bound = (seq->endstill) ? (seq->start + seq->len) : seq->enddisp; + float upper_thumb_bound = SEQ_time_has_right_still_frames(seq) ? (seq->start + seq->len) : + seq->enddisp; upper_thumb_bound = (upper_thumb_bound > view_area->xmax) ? view_area->xmax + frame_step : upper_thumb_bound; @@ -2121,7 +2122,9 @@ void SEQ_render_thumbnails(const SeqRenderData *context, int SEQ_render_thumbnails_guaranteed_set_frame_step_get(const Sequence *seq) { - const int content_len = (seq->enddisp - seq->startdisp - seq->startstill - seq->endstill); + const int content_start = max_ii(seq->startdisp, seq->start); + const int content_end = min_ii(seq->enddisp, seq->start + seq->len); + const int content_len = content_end - content_start; /* Arbitrary, but due to performance reasons should be as low as possible. */ const int thumbnails_base_set_count = min_ii(content_len / 100, 30); diff --git a/source/blender/sequencer/intern/strip_add.c b/source/blender/sequencer/intern/strip_add.c index f8e26a56692..77b0fc946d9 100644 --- a/source/blender/sequencer/intern/strip_add.c +++ b/source/blender/sequencer/intern/strip_add.c @@ -174,7 +174,7 @@ Sequence *SEQ_add_effect_strip(Scene *scene, ListBase *seqbase, struct SeqLoadDa if (!load_data->effect.seq1) { seq->len = 1; /* Effect is generator, set non zero length. */ - SEQ_transform_set_right_handle_frame(seq, load_data->effect.end_frame); + SEQ_time_right_handle_frame_set(seq, load_data->effect.end_frame); } seq_add_set_name(scene, seq, load_data); @@ -656,8 +656,8 @@ void SEQ_add_reload_new_file(Main *bmain, Scene *scene, Sequence *seq, const boo free_proxy_seq(seq); if (lock_range) { - SEQ_transform_set_left_handle_frame(seq, prev_startdisp); - SEQ_transform_set_right_handle_frame(seq, prev_enddisp); + SEQ_time_left_handle_frame_set(seq, prev_startdisp); + SEQ_time_right_handle_frame_set(seq, prev_enddisp); SEQ_transform_fix_single_image_seq_offsets(seq); } diff --git a/source/blender/sequencer/intern/strip_edit.c b/source/blender/sequencer/intern/strip_edit.c index 6c7bb71cb75..96bfce8f740 100644 --- a/source/blender/sequencer/intern/strip_edit.c +++ b/source/blender/sequencer/intern/strip_edit.c @@ -83,8 +83,6 @@ int SEQ_edit_sequence_swap(Sequence *seq_a, Sequence *seq_b, const char **error_ SWAP(int, seq_a->start, seq_b->start); SWAP(int, seq_a->startofs, seq_b->startofs); SWAP(int, seq_a->endofs, seq_b->endofs); - SWAP(int, seq_a->startstill, seq_b->startstill); - SWAP(int, seq_a->endstill, seq_b->endstill); SWAP(int, seq_a->machine, seq_b->machine); SWAP(int, seq_a->startdisp, seq_b->startdisp); SWAP(int, seq_a->enddisp, seq_b->enddisp); @@ -278,20 +276,22 @@ static void seq_split_set_left_hold_offset(Sequence *seq, int timeline_frame) { /* Adjust within range of extended stillframes before strip. */ if (timeline_frame < seq->start) { - seq->start = timeline_frame - 1; - seq->anim_endofs += seq->len - 1; - seq->startstill = timeline_frame - seq->startdisp - 1; - seq->endstill = 0; + SEQ_time_left_handle_frame_set(seq, timeline_frame); } /* Adjust within range of strip contents. */ else if ((timeline_frame >= seq->start) && (timeline_frame <= (seq->start + seq->len))) { - seq->endofs = 0; - seq->endstill = 0; - seq->anim_endofs += (seq->start + seq->len) - timeline_frame; + seq->anim_startofs += timeline_frame - seq->start; + seq->start = timeline_frame; + seq->startofs = 0; } /* Adjust within range of extended stillframes after strip. */ else if ((seq->start + seq->len) < timeline_frame) { - seq->endstill = timeline_frame - seq->start - seq->len; + const int right_handle_backup = SEQ_time_right_handle_frame_get(seq); + seq->start += timeline_frame - seq->start; + seq->anim_startofs += seq->len - 1; + seq->len = 1; + SEQ_time_left_handle_frame_set(seq, timeline_frame); + SEQ_time_right_handle_frame_set(seq, right_handle_backup); } } @@ -299,22 +299,19 @@ static void seq_split_set_right_hold_offset(Sequence *seq, int timeline_frame) { /* Adjust within range of extended stillframes before strip. */ if (timeline_frame < seq->start) { - seq->startstill = seq->start - timeline_frame; + const int left_handle_backup = SEQ_time_left_handle_frame_get(seq); + seq->start = timeline_frame - 1; + SEQ_time_left_handle_frame_set(seq, left_handle_backup); + SEQ_time_right_handle_frame_set(seq, timeline_frame); } /* Adjust within range of strip contents. */ else if ((timeline_frame >= seq->start) && (timeline_frame <= (seq->start + seq->len))) { - seq->anim_startofs += timeline_frame - seq->start; - seq->start = timeline_frame; - seq->startstill = 0; - seq->startofs = 0; + seq->anim_endofs += seq->start + seq->len - timeline_frame; + seq->endofs = 0; } /* Adjust within range of extended stillframes after strip. */ else if ((seq->start + seq->len) < timeline_frame) { - seq->start = timeline_frame; - seq->startofs = 0; - seq->anim_startofs += seq->len - 1; - seq->endstill = seq->enddisp - timeline_frame - 1; - seq->startstill = 0; + SEQ_time_right_handle_frame_set(seq, timeline_frame); } } @@ -322,29 +319,24 @@ static void seq_split_set_right_offset(Sequence *seq, int timeline_frame) { /* Adjust within range of extended stillframes before strip. */ if (timeline_frame < seq->start) { + const int content_offset = seq->start - timeline_frame + 1; seq->start = timeline_frame - 1; - seq->startstill = timeline_frame - seq->startdisp - 1; - seq->endofs = seq->len - 1; - } - /* Adjust within range of extended stillframes after strip. */ - else if ((seq->start + seq->len) < timeline_frame) { - seq->endstill -= seq->enddisp - timeline_frame; + seq->startofs += content_offset; } - SEQ_transform_set_right_handle_frame(seq, timeline_frame); + + SEQ_time_right_handle_frame_set(seq, timeline_frame); } static void seq_split_set_left_offset(Sequence *seq, int timeline_frame) { - /* Adjust within range of extended stillframes before strip. */ - if (timeline_frame < seq->start) { - seq->startstill = seq->start - timeline_frame; - } /* Adjust within range of extended stillframes after strip. */ - if ((seq->start + seq->len) < timeline_frame) { - seq->start = timeline_frame - seq->len + 1; - seq->endstill = seq->enddisp - timeline_frame - 1; + if (timeline_frame > seq->start + seq->len) { + const int content_offset = timeline_frame - (seq->start + seq->len) + 1; + seq->start += content_offset; + seq->endofs += content_offset; } - SEQ_transform_set_left_handle_frame(seq, timeline_frame); + + SEQ_time_left_handle_frame_set(seq, timeline_frame); } static bool seq_edit_split_effect_intersect_check(const Sequence *seq, const int timeline_frame) diff --git a/source/blender/sequencer/intern/strip_time.c b/source/blender/sequencer/intern/strip_time.c index a5341dbc528..e4f7a5e87e8 100644 --- a/source/blender/sequencer/intern/strip_time.c +++ b/source/blender/sequencer/intern/strip_time.c @@ -139,15 +139,8 @@ void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq) static void seq_time_update_sequence_bounds(Scene *scene, Sequence *seq) { - if (seq->startofs && seq->startstill) { - seq->startstill = 0; - } - if (seq->endofs && seq->endstill) { - seq->endstill = 0; - } - - seq->startdisp = seq->start + seq->startofs - seq->startstill; - seq->enddisp = seq->start + seq->len - seq->endofs + seq->endstill; + seq->startdisp = seq->start + seq->startofs; + seq->enddisp = seq->start + seq->len - seq->endofs; if (seq->type == SEQ_TYPE_META) { seq_update_sound_bounds_recursive(scene, seq); @@ -184,8 +177,8 @@ void SEQ_time_update_meta_strip_range(Scene *scene, Sequence *seq_meta) seq_time_update_meta_strip(scene, seq_meta); /* Prevent meta-strip to move in timeline. */ - SEQ_transform_set_left_handle_frame(seq_meta, seq_meta->startdisp); - SEQ_transform_set_right_handle_frame(seq_meta, seq_meta->enddisp); + SEQ_time_left_handle_frame_set(seq_meta, seq_meta->startdisp); + SEQ_time_right_handle_frame_set(seq_meta, seq_meta->enddisp); } void SEQ_time_update_sequence(Scene *scene, ListBase *seqbase, Sequence *seq) @@ -204,7 +197,7 @@ void SEQ_time_update_sequence(Scene *scene, ListBase *seqbase, Sequence *seq) /* effects and meta: automatic start and end */ if (seq->type & SEQ_TYPE_EFFECT) { if (seq->seq1) { - seq->startofs = seq->endofs = seq->startstill = seq->endstill = 0; + seq->startofs = seq->endofs = 0; if (seq->seq3) { seq->start = seq->startdisp = max_iii( seq->seq1->startdisp, seq->seq2->startdisp, seq->seq3->startdisp); @@ -516,3 +509,37 @@ bool SEQ_time_strip_intersects_frame(const Sequence *seq, const int timeline_fra { return (seq->startdisp <= timeline_frame) && (seq->enddisp > timeline_frame); } + +bool SEQ_time_has_left_still_frames(const Sequence *seq) +{ + return seq->startofs < 0; +} + +bool SEQ_time_has_right_still_frames(const Sequence *seq) +{ + return seq->endofs < 0; +} + +bool SEQ_time_has_still_frames(const Sequence *seq) +{ + return SEQ_time_has_right_still_frames(seq) || SEQ_time_has_left_still_frames(seq); +} + +int SEQ_time_left_handle_frame_get(Sequence *seq) +{ + return seq->start + seq->startofs; +} +int SEQ_time_right_handle_frame_get(Sequence *seq) +{ + return seq->start + seq->len - seq->endofs; +} + +void SEQ_time_left_handle_frame_set(Sequence *seq, int val) +{ + seq->startofs = val - seq->start; +} + +void SEQ_time_right_handle_frame_set(Sequence *seq, int val) +{ + seq->endofs = seq->start + seq->len - val; +} diff --git a/source/blender/sequencer/intern/strip_transform.c b/source/blender/sequencer/intern/strip_transform.c index 2c9ab0a3335..8ff577240d6 100644 --- a/source/blender/sequencer/intern/strip_transform.c +++ b/source/blender/sequencer/intern/strip_transform.c @@ -38,39 +38,6 @@ static int seq_tx_get_end(Sequence *seq) return seq->start + seq->len; } -int SEQ_transform_get_left_handle_frame(Sequence *seq) -{ - return (seq->start - seq->startstill) + seq->startofs; -} -int SEQ_transform_get_right_handle_frame(Sequence *seq) -{ - return ((seq->start + seq->len) + seq->endstill) - seq->endofs; -} - -void SEQ_transform_set_left_handle_frame(Sequence *seq, int val) -{ - if (val < (seq)->start) { - seq->startstill = abs(val - (seq)->start); - seq->startofs = 0; - } - else { - seq->startofs = abs(val - (seq)->start); - seq->startstill = 0; - } -} - -void SEQ_transform_set_right_handle_frame(Sequence *seq, int val) -{ - if (val > (seq)->start + (seq)->len) { - seq->endstill = abs(val - (seq->start + (seq)->len)); - seq->endofs = 0; - } - else { - seq->endofs = abs(val - ((seq)->start + (seq)->len)); - seq->endstill = 0; - } -} - bool SEQ_transform_single_image_check(Sequence *seq) { return ((seq->len == 1) && @@ -122,13 +89,13 @@ bool SEQ_transform_seqbase_isolated_sel_check(ListBase *seqbase) void SEQ_transform_handle_xlimits(Sequence *seq, int leftflag, int rightflag) { if (leftflag) { - if (SEQ_transform_get_left_handle_frame(seq) >= SEQ_transform_get_right_handle_frame(seq)) { - SEQ_transform_set_left_handle_frame(seq, SEQ_transform_get_right_handle_frame(seq) - 1); + if (SEQ_time_left_handle_frame_get(seq) >= SEQ_time_right_handle_frame_get(seq)) { + SEQ_time_left_handle_frame_set(seq, SEQ_time_right_handle_frame_get(seq) - 1); } if (SEQ_transform_single_image_check(seq) == 0) { - if (SEQ_transform_get_left_handle_frame(seq) >= seq_tx_get_end(seq)) { - SEQ_transform_set_left_handle_frame(seq, seq_tx_get_end(seq) - 1); + if (SEQ_time_left_handle_frame_get(seq) >= seq_tx_get_end(seq)) { + SEQ_time_left_handle_frame_set(seq, seq_tx_get_end(seq) - 1); } /* TODO: This doesn't work at the moment. */ @@ -144,21 +111,21 @@ void SEQ_transform_handle_xlimits(Sequence *seq, int leftflag, int rightflag) } if (rightflag) { - if (SEQ_transform_get_right_handle_frame(seq) <= SEQ_transform_get_left_handle_frame(seq)) { - SEQ_transform_set_right_handle_frame(seq, SEQ_transform_get_left_handle_frame(seq) + 1); + if (SEQ_time_right_handle_frame_get(seq) <= SEQ_time_left_handle_frame_get(seq)) { + SEQ_time_right_handle_frame_set(seq, SEQ_time_left_handle_frame_get(seq) + 1); } if (SEQ_transform_single_image_check(seq) == 0) { - if (SEQ_transform_get_right_handle_frame(seq) <= seq_tx_get_start(seq)) { - SEQ_transform_set_right_handle_frame(seq, seq_tx_get_start(seq) + 1); + if (SEQ_time_right_handle_frame_get(seq) <= seq_tx_get_start(seq)) { + SEQ_time_right_handle_frame_set(seq, seq_tx_get_start(seq) + 1); } } } /* sounds cannot be extended past their endpoints */ if (seq->type == SEQ_TYPE_SOUND_RAM) { - seq->startstill = 0; - seq->endstill = 0; + CLAMP(seq->startofs, 0, MAXFRAME); + CLAMP(seq->endofs, 0, MAXFRAME); } } @@ -171,12 +138,12 @@ void SEQ_transform_fix_single_image_seq_offsets(Sequence *seq) /* make sure the image is always at the start since there is only one, * adjusting its start should be ok */ - left = SEQ_transform_get_left_handle_frame(seq); + left = SEQ_time_left_handle_frame_get(seq); start = seq->start; if (start != left) { offset = left - start; - SEQ_transform_set_left_handle_frame(seq, SEQ_transform_get_left_handle_frame(seq) - offset); - SEQ_transform_set_right_handle_frame(seq, SEQ_transform_get_right_handle_frame(seq) - offset); + SEQ_time_left_handle_frame_set(seq, SEQ_time_left_handle_frame_get(seq) - offset); + SEQ_time_right_handle_frame_set(seq, SEQ_time_right_handle_frame_get(seq) - offset); seq->start += offset; } } @@ -227,8 +194,8 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, Sequence *seq, int delt * start/end point in timeline. */ SEQ_time_update_meta_strip_range(evil_scene, seq); /* Move meta start/end points. */ - SEQ_transform_set_left_handle_frame(seq, seq->startdisp + delta); - SEQ_transform_set_right_handle_frame(seq, seq->enddisp + delta); + SEQ_time_left_handle_frame_set(seq, seq->startdisp + delta); + SEQ_time_right_handle_frame_set(seq, seq->enddisp + delta); } ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(evil_scene)); |