Blender V5.0
proxy_job.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 * SPDX-FileCopyrightText: 2003-2009 Blender Authors
3 * SPDX-FileCopyrightText: 2005-2006 Peter Schlaile <peter [at] schlaile [dot] de>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later */
6
10
11#include "MEM_guardedalloc.h"
12
13#include "DNA_scene_types.h"
14#include "DNA_sequence_types.h"
15
16#include "BLI_listbase.h"
17
18#include "BKE_context.hh"
19
20#include "SEQ_proxy.hh"
21#include "SEQ_relations.hh"
22#include "SEQ_sequencer.hh"
23
24#include "WM_api.hh"
25#include "WM_types.hh"
26
27namespace blender::seq {
28
29static void proxy_freejob(void *pjv)
30{
31 ProxyJob *pj = static_cast<ProxyJob *>(pjv);
32
33 BLI_freelistN(&pj->queue);
34
35 MEM_freeN(pj);
36}
37
38/* Only this runs inside thread. */
39static void proxy_startjob(void *pjv, wmJobWorkerStatus *worker_status)
40{
41 ProxyJob *pj = static_cast<ProxyJob *>(pjv);
42
43 LISTBASE_FOREACH (LinkData *, link, &pj->queue) {
44 IndexBuildContext *context = static_cast<IndexBuildContext *>(link->data);
45
46 proxy_rebuild(context, worker_status);
47
48 if (worker_status->stop) {
49 pj->stop = true;
50 fprintf(stderr, "Canceling proxy rebuild on users request...\n");
51 break;
52 }
53 }
54}
55
56static void proxy_endjob(void *pjv)
57{
58 ProxyJob *pj = static_cast<ProxyJob *>(pjv);
60
61 LISTBASE_FOREACH (LinkData *, link, &pj->queue) {
62 proxy_rebuild_finish(static_cast<IndexBuildContext *>(link->data), pj->stop);
63 }
64
65 relations_free_imbuf(pj->scene, &ed->seqbase, false);
66
68}
69
71{
74 ProxyJob *pj = static_cast<ProxyJob *>(WM_jobs_customdata_get(wm_job));
75 if (!pj) {
76 pj = MEM_callocN<ProxyJob>("proxy rebuild job");
77 pj->depsgraph = depsgraph;
78 pj->scene = scene;
79 pj->main = CTX_data_main(C);
82 WM_jobs_callbacks(wm_job, proxy_startjob, nullptr, nullptr, proxy_endjob);
83 }
84 return pj;
85}
86
88{
92 scene,
93 "Building proxies...",
96 return wm_job;
97}
98
99} // namespace blender::seq
wmWindow * CTX_wm_window(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
Scene * CTX_data_sequencer_scene(const bContext *C)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
Definition listbase.cc:497
Read Guarded memory(de)allocation.
#define C
Definition RandGen.cpp:29
@ WM_JOB_TYPE_SEQ_BUILD_PROXY
Definition WM_api.hh:1792
@ WM_JOB_PROGRESS
Definition WM_api.hh:1766
#define ND_SEQUENCER
Definition WM_types.hh:437
#define NC_SCENE
Definition WM_types.hh:378
BPy_StructRNA * depsgraph
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
void proxy_rebuild(IndexBuildContext *context, wmJobWorkerStatus *worker_status)
Definition proxy.cc:516
static void proxy_endjob(void *pjv)
Definition proxy_job.cc:56
static void proxy_freejob(void *pjv)
Definition proxy_job.cc:29
Editing * editing_get(const Scene *scene)
Definition sequencer.cc:286
ProxyJob * ED_seq_proxy_job_get(const bContext *C, wmJob *wm_job)
Definition proxy_job.cc:70
static void proxy_startjob(void *pjv, wmJobWorkerStatus *worker_status)
Definition proxy_job.cc:39
void proxy_rebuild_finish(IndexBuildContext *context, bool stop)
Definition proxy.cc:598
void relations_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render)
wmJob * ED_seq_proxy_wm_job_get(const bContext *C)
Definition proxy_job.cc:87
Depsgraph * depsgraph
Definition SEQ_proxy.hh:48
void WM_main_add_notifier(uint type, void *reference)
void WM_jobs_timer(wmJob *wm_job, double time_step, uint note, uint endnote)
Definition wm_jobs.cc:376
void * WM_jobs_customdata_get(wmJob *wm_job)
Definition wm_jobs.cc:352
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, const eWM_JobFlag flag, const eWM_JobType job_type)
Definition wm_jobs.cc:211
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
Definition wm_jobs.cc:388
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))
Definition wm_jobs.cc:360