From ade362b53d721bc2e2c7a62a30c4345014e5f5ce Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Sat, 23 Nov 2019 16:08:07 -0800 Subject: rototiller: pass num_cpus to .create_context() Back in the day, there was no {create,destroy}_context(), so passing num_cpus to just prepare_frame made sense. Modules then would implicitly initialize themselves on the first prepare_frame() call using a static initialized variable. Since then things have been decomposed a bit for more sophisticated (and cleaner) modules. It can be necessary to allocate per-cpu data structures and the natural place to do that is @ create_context(). So this commit wires that up. A later commit will probably have to plumb a "current cpu" identifier into the render_fragment() function. Because a per-cpu data structure isn't particularly useful if you can't easily address it from within your execution context. --- src/modules/rtv/rtv.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/modules/rtv') diff --git a/src/modules/rtv/rtv.c b/src/modules/rtv/rtv.c index c4c6dd2..dd9ece8 100644 --- a/src/modules/rtv/rtv.c +++ b/src/modules/rtv/rtv.c @@ -31,6 +31,7 @@ typedef struct rtv_context_t { const rototiller_module_t **modules; size_t n_modules; + unsigned n_cpus; time_t next_switch, next_hide_caption; const rototiller_module_t *module, *last_module; @@ -41,7 +42,7 @@ typedef struct rtv_context_t { } rtv_context_t; static void setup_next_module(rtv_context_t *ctxt); -static void * rtv_create_context(void); +static void * rtv_create_context(unsigned num_cpus); static void rtv_destroy_context(void *context); static void rtv_prepare_frame(void *context, unsigned n_cpus, fb_fragment_t *fragment, rototiller_fragmenter_t *res_fragmenter); static void rtv_finish_frame(void *context, fb_fragment_t *fragment); @@ -152,14 +153,15 @@ static void setup_next_module(rtv_context_t *ctxt) } if (ctxt->module->create_context) - ctxt->module_ctxt = ctxt->module->create_context(); + ctxt->module_ctxt = ctxt->module->create_context(ctxt->n_cpus); } -static void * rtv_create_context(void) +static void * rtv_create_context(unsigned num_cpus) { rtv_context_t *ctxt = calloc(1, sizeof(rtv_context_t)); + ctxt->n_cpus = num_cpus; ctxt->snow_module = rototiller_lookup_module("snow"); rototiller_get_modules(&ctxt->modules, &ctxt->n_modules); setup_next_module(ctxt); -- cgit v1.2.1