Changeset View
Changeset View
Standalone View
Standalone View
source/blender/sequencer/intern/render.c
| Show First 20 Lines • Show All 1,027 Lines • ▼ Show 20 Lines | if (proxy->anim == NULL) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| } | } | ||||
| int frameno = (int)seq_give_frame_index(seq, timeline_frame) + seq->anim_startofs; | int frameno = (int)seq_give_frame_index(seq, timeline_frame) + seq->anim_startofs; | ||||
| return IMB_anim_absolute(proxy->anim, frameno, IMB_TC_NONE, IMB_PROXY_NONE); | return IMB_anim_absolute(proxy->anim, frameno, IMB_TC_NONE, IMB_PROXY_NONE); | ||||
| } | } | ||||
| /* Add `seq` to list of strips where seeking failed. */ | |||||
| static void seq_render_movie_register_seek_failed(const SeqRenderData *context, | |||||
| Sequence *seq, | |||||
| struct anim *anim) | |||||
| { | |||||
| if (!IMB_anim_seek_failed_check(anim)) { | |||||
| return; | |||||
| } | |||||
| Scene *scene = context->scene; | |||||
| if (context->is_prefetch_render) { | |||||
| context = seq_prefetch_get_original_context(context); | |||||
| scene = context->scene; | |||||
| seq = seq_prefetch_get_original_sequence(seq, scene); | |||||
| } | |||||
| Editing *ed = SEQ_editing_get(scene); | |||||
| GSet *error_log, *acknowledged; | |||||
| SEQ_editing_seek_error_log_ensure(ed); | |||||
| SEQ_editing_seek_error_log_acquire(ed, &error_log, &acknowledged); | |||||
| if (!BLI_gset_haskey(ed->runtime.seek_failed_strips, seq)) { | |||||
| BLI_gset_add(ed->runtime.seek_failed_strips, seq); | |||||
| } | |||||
| SEQ_editing_seek_error_log_release(ed); | |||||
| } | |||||
| /** | /** | ||||
| * Render individual view for multi-view or single (default view) for mono-view. | * Render individual view for multi-view or single (default view) for mono-view. | ||||
| */ | */ | ||||
| static ImBuf *seq_render_movie_strip_view(const SeqRenderData *context, | static ImBuf *seq_render_movie_strip_view(const SeqRenderData *context, | ||||
| Sequence *seq, | Sequence *seq, | ||||
| float frame_index, | float frame_index, | ||||
| float timeline_frame, | float timeline_frame, | ||||
| StripAnim *sanim, | StripAnim *sanim, | ||||
| Show All 23 Lines | static ImBuf *seq_render_movie_strip_view(const SeqRenderData *context, | ||||
| /* Fetching for requested proxy size failed, try fetching the original instead. */ | /* Fetching for requested proxy size failed, try fetching the original instead. */ | ||||
| if (ibuf == NULL) { | if (ibuf == NULL) { | ||||
| ibuf = IMB_anim_absolute(sanim->anim, | ibuf = IMB_anim_absolute(sanim->anim, | ||||
| frame_index + seq->anim_startofs, | frame_index + seq->anim_startofs, | ||||
| seq->strip->proxy ? seq->strip->proxy->tc : IMB_TC_RECORD_RUN, | seq->strip->proxy ? seq->strip->proxy->tc : IMB_TC_RECORD_RUN, | ||||
| IMB_PROXY_NONE); | IMB_PROXY_NONE); | ||||
| } | } | ||||
| seq_render_movie_register_seek_failed(context, seq, sanim->anim); | |||||
| if (ibuf == NULL) { | if (ibuf == NULL) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| seq_imbuf_to_sequencer_space(context->scene, ibuf, false); | seq_imbuf_to_sequencer_space(context->scene, ibuf, false); | ||||
| /* We don't need both (speed reasons)! */ | /* We don't need both (speed reasons)! */ | ||||
| if (ibuf->rect_float != NULL && ibuf->rect != NULL) { | if (ibuf->rect_float != NULL && ibuf->rect != NULL) { | ||||
| ▲ Show 20 Lines • Show All 1,065 Lines • Show Last 20 Lines | |||||