Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_clip/clip_editor.c
| Show First 20 Lines • Show All 879 Lines • ▼ Show 20 Lines | if (IN_RANGE_INCL(current_frame, queue->start_frame, queue->end_frame)) { | ||||
| *queue->progress = (float)frames_processed / (queue->end_frame - queue->start_frame); | *queue->progress = (float)frames_processed / (queue->end_frame - queue->start_frame); | ||||
| } | } | ||||
| } | } | ||||
| BLI_spin_unlock(&queue->spin); | BLI_spin_unlock(&queue->spin); | ||||
| return mem; | return mem; | ||||
| } | } | ||||
| static void prefetch_task_func(TaskPool *__restrict pool, void *task_data, int UNUSED(threadid)) | static void prefetch_task_func(TaskPool *__restrict pool, void *task_data) | ||||
| { | { | ||||
| PrefetchQueue *queue = (PrefetchQueue *)BLI_task_pool_user_data(pool); | PrefetchQueue *queue = (PrefetchQueue *)BLI_task_pool_user_data(pool); | ||||
| MovieClip *clip = (MovieClip *)task_data; | MovieClip *clip = (MovieClip *)task_data; | ||||
| uchar *mem; | uchar *mem; | ||||
| size_t size; | size_t size; | ||||
| int current_frame; | int current_frame; | ||||
| while ((mem = prefetch_thread_next_frame(queue, clip, &size, ¤t_frame))) { | while ((mem = prefetch_thread_next_frame(queue, clip, &size, ¤t_frame))) { | ||||
| Show All 40 Lines | static void start_prefetch_threads(MovieClip *clip, | ||||
| int end_frame, | int end_frame, | ||||
| short render_size, | short render_size, | ||||
| short render_flag, | short render_flag, | ||||
| short *stop, | short *stop, | ||||
| short *do_update, | short *do_update, | ||||
| float *progress) | float *progress) | ||||
| { | { | ||||
| PrefetchQueue queue; | PrefetchQueue queue; | ||||
| TaskScheduler *task_scheduler = BLI_task_scheduler_get(); | |||||
| TaskPool *task_pool; | TaskPool *task_pool; | ||||
| int i, tot_thread = BLI_task_scheduler_num_threads(task_scheduler); | int i, tot_thread = BLI_task_scheduler_num_threads(); | ||||
| /* initialize queue */ | /* initialize queue */ | ||||
| BLI_spin_init(&queue.spin); | BLI_spin_init(&queue.spin); | ||||
| queue.current_frame = current_frame; | queue.current_frame = current_frame; | ||||
| queue.initial_frame = current_frame; | queue.initial_frame = current_frame; | ||||
| queue.start_frame = start_frame; | queue.start_frame = start_frame; | ||||
| queue.end_frame = end_frame; | queue.end_frame = end_frame; | ||||
| queue.render_size = render_size; | queue.render_size = render_size; | ||||
| queue.render_flag = render_flag; | queue.render_flag = render_flag; | ||||
| queue.forward = 1; | queue.forward = 1; | ||||
| queue.stop = stop; | queue.stop = stop; | ||||
| queue.do_update = do_update; | queue.do_update = do_update; | ||||
| queue.progress = progress; | queue.progress = progress; | ||||
| task_pool = BLI_task_pool_create(task_scheduler, &queue, TASK_PRIORITY_LOW); | task_pool = BLI_task_pool_create(&queue, TASK_PRIORITY_LOW); | ||||
| for (i = 0; i < tot_thread; i++) { | for (i = 0; i < tot_thread; i++) { | ||||
| BLI_task_pool_push(task_pool, prefetch_task_func, clip, false, NULL); | BLI_task_pool_push(task_pool, prefetch_task_func, clip, false, NULL); | ||||
| } | } | ||||
| BLI_task_pool_work_and_wait(task_pool); | BLI_task_pool_work_and_wait(task_pool); | ||||
| BLI_task_pool_free(task_pool); | BLI_task_pool_free(task_pool); | ||||
| BLI_spin_end(&queue.spin); | BLI_spin_end(&queue.spin); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 210 Lines • Show Last 20 Lines | |||||