Ejemplo n.º 1
0
/* 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;
}
Ejemplo n.º 2
0
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);
	}
}