Blender V4.3
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
11#include "MEM_guardedalloc.h"
12
13#include "DNA_scene_types.h"
14#include "DNA_sequence_types.h"
15
16#include "BKE_context.hh"
17
18#include "SEQ_proxy.hh"
19#include "SEQ_relations.hh"
20#include "SEQ_sequencer.hh"
21
22#include "WM_api.hh"
23#include "WM_types.hh"
24
25static void proxy_freejob(void *pjv)
26{
27 ProxyJob *pj = static_cast<ProxyJob *>(pjv);
28
29 BLI_freelistN(&pj->queue);
30
31 MEM_freeN(pj);
32}
33
34/* Only this runs inside thread. */
35static void proxy_startjob(void *pjv, wmJobWorkerStatus *worker_status)
36{
37 ProxyJob *pj = static_cast<ProxyJob *>(pjv);
38
39 LISTBASE_FOREACH (LinkData *, link, &pj->queue) {
40 SeqIndexBuildContext *context = static_cast<SeqIndexBuildContext *>(link->data);
41
42 SEQ_proxy_rebuild(context, worker_status);
43
44 if (worker_status->stop) {
45 pj->stop = true;
46 fprintf(stderr, "Canceling proxy rebuild on users request...\n");
47 break;
48 }
49 }
50}
51
52static void proxy_endjob(void *pjv)
53{
54 ProxyJob *pj = static_cast<ProxyJob *>(pjv);
55 Editing *ed = SEQ_editing_get(pj->scene);
56
57 LISTBASE_FOREACH (LinkData *, link, &pj->queue) {
58 SEQ_proxy_rebuild_finish(static_cast<SeqIndexBuildContext *>(link->data), pj->stop);
59 }
60
61 SEQ_relations_free_imbuf(pj->scene, &ed->seqbase, false);
62
64}
65
67{
68 Scene *scene = CTX_data_scene(C);
70 ProxyJob *pj = static_cast<ProxyJob *>(WM_jobs_customdata_get(wm_job));
71 if (!pj) {
72 pj = static_cast<ProxyJob *>(MEM_callocN(sizeof(ProxyJob), "proxy rebuild job"));
73 pj->depsgraph = depsgraph;
74 pj->scene = scene;
75 pj->main = CTX_data_main(C);
78 WM_jobs_callbacks(wm_job, proxy_startjob, nullptr, nullptr, proxy_endjob);
79 }
80 return pj;
81}
82
84{
85 Scene *scene = CTX_data_scene(C);
86 wmJob *wm_job = WM_jobs_get(CTX_wm_manager(C),
88 scene,
89 "Building Proxies",
92 return wm_job;
93}
wmWindow * CTX_wm_window(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
Definition listbase.cc:496
Read Guarded memory(de)allocation.
@ WM_JOB_TYPE_SEQ_BUILD_PROXY
Definition WM_api.hh:1592
@ WM_JOB_PROGRESS
Definition WM_api.hh:1566
#define ND_SEQUENCER
Definition WM_types.hh:404
#define NC_SCENE
Definition WM_types.hh:345
const Depsgraph * depsgraph
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
void SEQ_proxy_rebuild_finish(SeqIndexBuildContext *context, bool stop)
Definition proxy.cc:576
void SEQ_proxy_rebuild(SeqIndexBuildContext *context, wmJobWorkerStatus *worker_status)
Definition proxy.cc:506
static void proxy_freejob(void *pjv)
Definition proxy_job.cc:25
static void proxy_startjob(void *pjv, wmJobWorkerStatus *worker_status)
Definition proxy_job.cc:35
static void proxy_endjob(void *pjv)
Definition proxy_job.cc:52
ProxyJob * ED_seq_proxy_job_get(const bContext *C, wmJob *wm_job)
Definition proxy_job.cc:66
wmJob * ED_seq_proxy_wm_job_get(const bContext *C)
Definition proxy_job.cc:83
Editing * SEQ_editing_get(const Scene *scene)
Definition sequencer.cc:262
void SEQ_relations_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render)
ListBase seqbase
Main * main
Definition clip_ops.cc:1177
Depsgraph * depsgraph
Definition SEQ_proxy.hh:38
Scene * scene
Definition clip_ops.cc:1176
bool stop
Definition clip_ops.cc:1180
ListBase queue
Definition SEQ_proxy.hh:40
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:352
void * WM_jobs_customdata_get(wmJob *wm_job)
Definition wm_jobs.cc:328
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:189
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:364
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))
Definition wm_jobs.cc:336