Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_clip/tracking_ops_solve.c
| Show First 20 Lines • Show All 193 Lines • ▼ Show 20 Lines | static int solve_camera_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) | ||||
| ScrArea *sa = CTX_wm_area(C); | ScrArea *sa = CTX_wm_area(C); | ||||
| SpaceClip *sc = CTX_wm_space_clip(C); | SpaceClip *sc = CTX_wm_space_clip(C); | ||||
| MovieClip *clip = ED_space_clip_get_clip(sc); | MovieClip *clip = ED_space_clip_get_clip(sc); | ||||
| MovieTracking *tracking = &clip->tracking; | MovieTracking *tracking = &clip->tracking; | ||||
| MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking); | MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking); | ||||
| wmJob *wm_job; | wmJob *wm_job; | ||||
| char error_msg[256] = "\0"; | char error_msg[256] = "\0"; | ||||
| if (WM_jobs_test(CTX_wm_manager(C), sa, WM_JOB_TYPE_ANY)) { | if (WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C), WM_JOB_TYPE_CLIP_SOLVE_CAMERA)) { | ||||
| /* only one solve is allowed at a time */ | /* only one solve is allowed at a time */ | ||||
| return OPERATOR_CANCELLED; | return OPERATOR_CANCELLED; | ||||
| } | } | ||||
| scj = MEM_callocN(sizeof(SolveCameraJob), "SolveCameraJob data"); | scj = MEM_callocN(sizeof(SolveCameraJob), "SolveCameraJob data"); | ||||
| if (!solve_camera_initjob(C, scj, op, error_msg, sizeof(error_msg))) { | if (!solve_camera_initjob(C, scj, op, error_msg, sizeof(error_msg))) { | ||||
| if (error_msg[0]) { | if (error_msg[0]) { | ||||
| BKE_report(op->reports, RPT_ERROR, error_msg); | BKE_report(op->reports, RPT_ERROR, error_msg); | ||||
| } | } | ||||
| solve_camera_freejob(scj); | solve_camera_freejob(scj); | ||||
| return OPERATOR_CANCELLED; | return OPERATOR_CANCELLED; | ||||
| } | } | ||||
| BLI_strncpy(tracking->stats->message, | BLI_strncpy(tracking->stats->message, | ||||
| "Solving camera | Preparing solve", | "Solving camera | Preparing solve", | ||||
| sizeof(tracking->stats->message)); | sizeof(tracking->stats->message)); | ||||
| /* Hide reconstruction statistics from previous solve. */ | /* Hide reconstruction statistics from previous solve. */ | ||||
| reconstruction->flag &= ~TRACKING_RECONSTRUCTED; | reconstruction->flag &= ~TRACKING_RECONSTRUCTED; | ||||
| WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip); | WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip); | ||||
| /* Setup job. */ | /* Setup job. */ | ||||
| wm_job = WM_jobs_get(CTX_wm_manager(C), | wm_job = WM_jobs_get(CTX_wm_manager(C), | ||||
| CTX_wm_window(C), | CTX_wm_window(C), | ||||
| sa, | CTX_data_scene(C), | ||||
| "Solve Camera", | "Solve Camera", | ||||
| WM_JOB_PROGRESS, | WM_JOB_PROGRESS, | ||||
| WM_JOB_TYPE_CLIP_SOLVE_CAMERA); | WM_JOB_TYPE_CLIP_SOLVE_CAMERA); | ||||
| WM_jobs_customdata_set(wm_job, scj, solve_camera_freejob); | WM_jobs_customdata_set(wm_job, scj, solve_camera_freejob); | ||||
| WM_jobs_timer(wm_job, 0.1, NC_MOVIECLIP | NA_EVALUATED, 0); | WM_jobs_timer(wm_job, 0.1, NC_MOVIECLIP | NA_EVALUATED, 0); | ||||
| WM_jobs_callbacks(wm_job, solve_camera_startjob, NULL, solve_camera_updatejob, NULL); | WM_jobs_callbacks(wm_job, solve_camera_startjob, NULL, solve_camera_updatejob, NULL); | ||||
| G.is_break = false; | G.is_break = false; | ||||
| WM_jobs_start(CTX_wm_manager(C), wm_job); | WM_jobs_start(CTX_wm_manager(C), wm_job); | ||||
| WM_cursor_wait(0); | WM_cursor_wait(0); | ||||
| /* add modal handler for ESC */ | /* add modal handler for ESC */ | ||||
| WM_event_add_modal_handler(C, op); | WM_event_add_modal_handler(C, op); | ||||
| return OPERATOR_RUNNING_MODAL; | return OPERATOR_RUNNING_MODAL; | ||||
| } | } | ||||
| static int solve_camera_modal(bContext *C, wmOperator *UNUSED(op), const wmEvent *event) | static int solve_camera_modal(bContext *C, wmOperator *UNUSED(op), const wmEvent *event) | ||||
| { | { | ||||
| /* No running solver, remove handler and pass through. */ | /* No running solver, remove handler and pass through. */ | ||||
| if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_wm_area(C), WM_JOB_TYPE_ANY)) { | if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_wm_area(C), WM_JOB_TYPE_CLIP_SOLVE_CAMERA)) { | ||||
| return OPERATOR_FINISHED | OPERATOR_PASS_THROUGH; | return OPERATOR_FINISHED | OPERATOR_PASS_THROUGH; | ||||
| } | } | ||||
| /* Running solver. */ | /* Running solver. */ | ||||
| switch (event->type) { | switch (event->type) { | ||||
| case ESCKEY: | case ESCKEY: | ||||
| return OPERATOR_RUNNING_MODAL; | return OPERATOR_RUNNING_MODAL; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 65 Lines • Show Last 20 Lines | |||||