/* returns true if early out is possible */ static bool prefetch_check_early_out(const bContext *C) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip_get_clip(sc); int first_uncached_frame, end_frame; int clip_len; clip_len = BKE_movieclip_get_duration(clip); /* check whether all the frames from prefetch range are cached */ end_frame = prefetch_get_final_frame(C); first_uncached_frame = prefetch_find_uncached_frame(clip, sc->user.framenr, end_frame, sc->user.render_size, sc->user.render_flag, 1); if (first_uncached_frame > end_frame || first_uncached_frame == clip_len) { int start_frame = prefetch_get_start_frame(C); first_uncached_frame = prefetch_find_uncached_frame(clip, sc->user.framenr, start_frame, sc->user.render_size, sc->user.render_flag, -1); if (first_uncached_frame < start_frame) return true; } return false; }
static Sequence *rna_Sequences_new_clip(ID *id, Editing *ed, const char *name, MovieClip *clip, int channel, int frame_start) { Scene *scene = (Scene *)id; Sequence *seq; seq = alloc_generic_sequence(ed, name, frame_start, channel, SEQ_TYPE_MOVIECLIP, clip->name); seq->clip = clip; seq->len = BKE_movieclip_get_duration(clip); id_us_plus((ID *)clip); BKE_sequence_calc_disp(scene, seq); WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene); return seq; }
static int clip_set_scene_frames_exec(bContext *C, wmOperator *UNUSED(op)) { MovieClip *clip = CTX_data_edit_movieclip(C); Scene *scene = CTX_data_scene(C); int clip_length; if (ELEM(NULL, scene, clip)) return OPERATOR_CANCELLED; clip_length = BKE_movieclip_get_duration(clip); scene->r.sfra = clip->start_frame; scene->r.efra = scene->r.sfra + clip_length - 1; scene->r.efra = max_ii(scene->r.sfra, scene->r.efra); WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene); return OPERATOR_FINISHED; }