/* only this runs inside thread */ static void proxy_startjob(void *pjv, short *stop, short *do_update, float *progress) { ProxyJob *pj = pjv; Scene *scene = pj->scene; MovieClip *clip = pj->clip; struct MovieDistortion *distortion = NULL; short size_flag; int cfra, sfra = SFRA, efra = EFRA; int build_sizes[4], build_count = 0; int build_undistort_sizes[4], build_undistort_count = 0; size_flag = clip->proxy.build_size_flag; build_count = proxy_bitflag_to_array(size_flag, build_sizes, 0); build_undistort_count = proxy_bitflag_to_array(size_flag, build_undistort_sizes, 1); if (clip->source == MCLIP_SRC_MOVIE) { if (pj->index_context) IMB_anim_index_rebuild(pj->index_context, stop, do_update, progress); if (!build_undistort_count) { if (*stop) pj->stop = 1; return; } else { sfra = 1; efra = IMB_anim_get_duration(clip->anim, IMB_TC_NONE); } } if (build_undistort_count) distortion = BKE_tracking_distortion_new(); for (cfra = sfra; cfra <= efra; cfra++) { if (clip->source != MCLIP_SRC_MOVIE) BKE_movieclip_build_proxy_frame(clip, pj->clip_flag, NULL, cfra, build_sizes, build_count, 0); BKE_movieclip_build_proxy_frame(clip, pj->clip_flag, distortion, cfra, build_undistort_sizes, build_undistort_count, 1); if (*stop || G.afbreek) break; *do_update = TRUE; *progress = ((float) cfra - sfra) / (efra - sfra); } if (distortion) BKE_tracking_distortion_free(distortion); if (*stop) pj->stop = 1; }
static void proxy_startjob(void *pjv, short *stop, short *do_update, float *progress) { ProxyJob *pj = pjv; MovieClip *clip = pj->clip; short size_flag; int build_sizes[4], build_count = 0; int build_undistort_sizes[4], build_undistort_count = 0; size_flag = clip->proxy.build_size_flag; build_count = proxy_bitflag_to_array(size_flag, build_sizes, 0); build_undistort_count = proxy_bitflag_to_array(size_flag, build_undistort_sizes, 1); if (clip->source == MCLIP_SRC_MOVIE) { do_movie_proxy(pjv, build_sizes, build_count, build_undistort_sizes, build_undistort_count, stop, do_update, progress); } else { do_sequence_proxy(pjv, build_sizes, build_count, build_undistort_sizes, build_undistort_count, stop, do_update, progress); } }