Grok 20.3.2
plugin_gpup_bridge.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2026 Grok Image Compression Inc.
3 *
4 * This source code is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License, version 3,
6 * as published by the Free Software Foundation.
7 *
8 * Translation helpers between grok's grk_* types and the GPU plugin's
9 * gpup_* types. Called once per encode/decode invocation — no pixel data
10 * is copied; images and tiles are always shared via pointer.
11 */
12
13#pragma once
14
15#include "grok.h"
16#define GPUP_TYPES_ONLY
18#undef GPUP_TYPES_ONLY
19#include <cstring>
20
21namespace grk
22{
23
24/* ── grk_cparameters → gpup_compress_params ─────────────────── */
26{
27 memset(dst, 0, sizeof(*dst));
28 dst->tile_size_on = src->tile_size_on;
29 dst->tx0 = src->tx0;
30 dst->ty0 = src->ty0;
31 dst->t_width = src->t_width;
32 dst->t_height = src->t_height;
33 dst->numlayers = src->numlayers;
34 dst->allocationByRateDistoration = src->allocation_by_rate_distortion;
35 for(uint16_t i = 0; i < src->numlayers && i < GPUP_MAX_LAYERS; ++i)
36 {
37 dst->layer_rate[i] = src->layer_rate[i];
38 dst->layer_distortion[i] = src->layer_distortion[i];
39 }
40 dst->allocationByQuality = src->allocation_by_quality;
41 dst->csty = src->csty;
42 dst->numgbits = src->numgbits;
43 dst->prog_order = (gpup_prog_order)src->prog_order;
44 dst->numpocs = src->numpocs;
45 dst->numresolution = src->numresolution;
46 dst->cblockw_init = src->cblockw_init;
47 dst->cblockh_init = src->cblockh_init;
48 dst->cblk_sty = src->cblk_sty;
49 dst->irreversible = src->irreversible;
50 dst->roi_compno = src->roi_compno;
51 dst->roi_shift = src->roi_shift;
52 dst->res_spec = src->res_spec;
53 for(uint32_t i = 0; i < GPUP_MAXRLVLS; ++i)
54 {
55 dst->prcw_init[i] = src->prcw_init[i];
56 dst->prch_init[i] = src->prch_init[i];
57 }
58 memcpy(dst->infile, src->infile, GPUP_PATH_LEN);
59 memcpy(dst->outfile, src->outfile, GPUP_PATH_LEN);
60 dst->image_offset_x0 = src->image_offset_x0;
61 dst->image_offset_y0 = src->image_offset_y0;
62 dst->subsampling_dx = src->subsampling_dx;
63 dst->subsampling_dy = src->subsampling_dy;
64 dst->decod_format = (gpup_file_fmt)src->decod_format;
65 dst->cod_format = (gpup_file_fmt)src->cod_format;
66 dst->enableTilePartGeneration = src->enable_tile_part_generation;
67 dst->newTilePartProgressionDivider = src->new_tile_part_progression_divider;
68 dst->mct = src->mct;
69 dst->max_cs_size = src->max_cs_size;
70 dst->max_comp_size = src->max_comp_size;
71 dst->rsiz = src->rsiz;
72 dst->framerate = src->framerate;
73 dst->rateControlAlgorithm = (gpup_rate_control)src->rate_control_algorithm;
74 dst->numThreads = src->num_threads;
75 dst->deviceId = src->device_id;
76 dst->duration = src->duration;
77 dst->kernelBuildOptions = src->kernel_build_options;
78 dst->repeats = src->repeats;
79 dst->verbose = false;
80 dst->sharedMemoryInterface = src->shared_memory_interface;
81}
82
83/* ── grk_decompress_parameters → gpup_decompress_params ─────── */
86{
87 memset(dst, 0, sizeof(*dst));
88 dst->core.reduce = src->core.reduce;
89 dst->core.layers_to_decompress_ = src->core.layers_to_decompress;
90 memcpy(dst->infile, src->infile, GPUP_PATH_LEN);
91 memcpy(dst->outfile, src->outfile, GPUP_PATH_LEN);
92 dst->decod_format = (gpup_codec_fmt)src->decod_format;
93 dst->cod_format = (gpup_file_fmt)src->cod_format;
94 dst->dw_x0 = src->dw_x0;
95 dst->dw_y0 = src->dw_y0;
96 dst->dw_x1 = src->dw_x1;
97 dst->dw_y1 = src->dw_y1;
98 dst->tileIndex = src->tile_index;
99 dst->deviceId = src->device_id;
100 dst->kernelBuildOptions = src->kernel_build_options;
101 dst->repeats = src->repeats;
102 dst->numThreads = src->num_threads;
103 dst->verbose_ = false;
104 dst->user_data = src->user_data;
105}
106
107/* ── gpup_header_info → grk_header_info (fields the plugin fills in) ── */
109{
110 dst->cblockw_init = src->cblockw_init;
111 dst->cblockh_init = src->cblockh_init;
112 dst->irreversible = src->irreversible;
113 dst->mct = src->mct;
114 dst->rsiz = src->rsiz;
115 dst->numresolutions = src->numresolutions;
116 dst->csty = src->csty;
117 dst->cblk_sty = src->cblk_sty;
118 for(uint32_t i = 0; i < GPUP_MAXRLVLS; ++i)
119 {
120 dst->prcw_init[i] = src->prcw_init[i];
121 dst->prch_init[i] = src->prch_init[i];
122 }
123 dst->tx0 = src->tx0;
124 dst->ty0 = src->ty0;
125 dst->t_width = src->t_width;
126 dst->t_height = src->t_height;
127 dst->t_grid_width = src->t_grid_width;
128 dst->t_grid_height = src->t_grid_height;
129 dst->num_layers = src->max_layers_;
130}
131
132/* ── grk_header_info → gpup_header_info ───────────────────────── */
134{
135 memset(dst, 0, sizeof(*dst));
136 dst->cblockw_init = src->cblockw_init;
137 dst->cblockh_init = src->cblockh_init;
138 dst->irreversible = src->irreversible;
139 dst->mct = src->mct;
140 dst->rsiz = src->rsiz;
141 dst->numresolutions = src->numresolutions;
142 dst->csty = src->csty;
143 dst->cblk_sty = src->cblk_sty;
144 for(uint32_t i = 0; i < GPUP_MAXRLVLS; ++i)
145 {
146 dst->prcw_init[i] = src->prcw_init[i];
147 dst->prch_init[i] = src->prch_init[i];
148 }
149 dst->tx0 = src->tx0;
150 dst->ty0 = src->ty0;
151 dst->t_width = src->t_width;
152 dst->t_height = src->t_height;
153 dst->t_grid_width = src->t_grid_width;
154 dst->t_grid_height = src->t_grid_height;
155 dst->max_layers_ = src->num_layers;
156}
157
158/* ── grk_image → gpup_image (shallow: shares component data pointers) ── */
160{
161 if(!src)
162 return nullptr;
163 uint16_t n = src->numcomps > 16 ? 16 : src->numcomps;
164 auto* img = new gpup_image();
165 memset(img, 0, sizeof(gpup_image));
166 img->x0 = src->x0;
167 img->y0 = src->y0;
168 img->x1 = src->x1;
169 img->y1 = src->y1;
170 img->numcomps = n;
171 img->color_space = (gpup_color_space)src->color_space;
172 img->comps = new gpup_image_comp[n]();
173 for(uint16_t c = 0; c < n; ++c)
174 {
175 img->comps[c].x0 = src->comps[c].x0;
176 img->comps[c].y0 = src->comps[c].y0;
177 img->comps[c].w = src->comps[c].w;
178 img->comps[c].stride = src->comps[c].stride;
179 img->comps[c].h = src->comps[c].h;
180 img->comps[c].dx = src->comps[c].dx;
181 img->comps[c].dy = src->comps[c].dy;
182 img->comps[c].prec = src->comps[c].prec;
183 img->comps[c].sgnd = src->comps[c].sgnd;
184 img->comps[c].data = (int32_t*)src->comps[c].data;
185 img->comps[c].owns_data = false; // host owns the data
186 }
187 return img;
188}
189
190/* Free a gpup_image created by grk_to_gpup_image (does NOT free component data) */
192{
193 if(!img)
194 return;
195 delete[] img->comps;
196 delete img;
197}
198
199/* ── gpup_image → grk_image (shallow: shares component data pointers) ── */
200/* NOTE: the returned image has a zeroed grk_object; only data pointers are valid. */
201inline void gpup_to_grk_image_shallow(const gpup_image* src, grk_image* dst)
202{
203 if(!src)
204 return;
205 memset(dst, 0, sizeof(*dst));
206 dst->x0 = src->x0;
207 dst->y0 = src->y0;
208 dst->x1 = src->x1;
209 dst->y1 = src->y1;
210 dst->numcomps = src->numcomps;
211 dst->color_space = (GRK_COLOR_SPACE)src->color_space;
212 // comps must be allocated by caller
213}
214
215/* ── gpup_tile → grk_plugin_tile (deep wrapper — shares data pointers) ── */
216/*
217 * Creates a grk_plugin_tile tree that mirrors a gpup_tile tree.
218 * All data buffers (compressedData, passes, contextStream) are SHARED —
219 * only the tree scaffolding is newly allocated.
220 * Caller must free with grk_plugin_tile_free_wrapper().
221 */
223{
224 if(!src)
225 return nullptr;
226 auto* dst = new grk_plugin_tile();
227 dst->decompress_flags = src->decompress_flags;
228 dst->num_components = (uint16_t)src->numComponents;
229 dst->tile_components = new grk_plugin_tile_component*[src->numComponents]();
230 for(size_t c = 0; c < src->numComponents; ++c)
231 {
232 auto* sc = src->tileComponents[c];
233 auto* dc = new grk_plugin_tile_component();
234 dc->numresolutions = (uint8_t)sc->numResolutions;
235 dc->resolutions = new grk_plugin_resolution*[sc->numResolutions]();
236 for(size_t r = 0; r < sc->numResolutions; ++r)
237 {
238 auto* sr = sc->resolutions[r];
239 auto* dr = new grk_plugin_resolution();
240 dr->level = (uint8_t)sr->level;
241 dr->num_bands = (uint8_t)sr->numBands;
242 dr->band = new grk_plugin_band*[sr->numBands]();
243 for(size_t b = 0; b < sr->numBands; ++b)
244 {
245 auto* sb = sr->band[b];
246 auto* db = new grk_plugin_band();
247 db->orientation = sb->orientation;
248 db->num_precincts = sb->numPrecincts;
249 db->precincts = new grk_plugin_precinct*[sb->numPrecincts]();
250 db->stepsize = sb->stepsize;
251 for(uint64_t p = 0; p < sb->numPrecincts; ++p)
252 {
253 auto* sp = sb->precincts[p];
254 auto* dp = new grk_plugin_precinct();
255 dp->num_blocks = sp->numBlocks;
256 dp->blocks = new grk_plugin_code_block*[sp->numBlocks]();
257 for(uint64_t k = 0; k < sp->numBlocks; ++k)
258 {
259 auto* skb = sp->blocks[k];
260 auto* dkb = new grk_plugin_code_block();
261 dkb->x0 = skb->x0;
262 dkb->y0 = skb->y0;
263 dkb->x1 = skb->x1;
264 dkb->y1 = skb->y1;
265 dkb->context_stream = skb->contextStream; // shared
266 dkb->num_pix = skb->numPix;
267 dkb->compressed_data = skb->compressedData; // shared
268 dkb->compressed_data_length = skb->compressedDataLength;
269 dkb->num_bit_planes = skb->numBitPlanes;
270 dkb->num_passes = (uint8_t)skb->numPasses;
271 for(size_t ps = 0; ps < skb->numPasses && ps < GRK_MAX_PASSES; ++ps)
272 {
273 dkb->passes[ps].distortion_decrease = skb->passes[ps].distortionDecrease;
274 dkb->passes[ps].rate = skb->passes[ps].rate;
275 dkb->passes[ps].length = skb->passes[ps].length;
276 }
277 dkb->sorted_index = skb->sortedIndex;
278 dp->blocks[k] = dkb;
279 }
280 db->precincts[p] = dp;
281 }
282 dr->band[b] = db;
283 }
284 dc->resolutions[r] = dr;
285 }
286 dst->tile_components[c] = dc;
287 }
288 return dst;
289}
290
291/* ── Fast update: reuse existing wrapper tree, just update shared data pointers ──
292 * All tiles in a batch have identical structure (same image dimensions).
293 * Instead of allocating a new wrapper tree for each tile, we reuse the
294 * existing one and update only the data pointers that change per tile.
295 */
297{
298 if(!dst || !src)
299 return;
300 dst->decompress_flags = src->decompress_flags;
301 uint16_t nc = std::min(dst->num_components, (uint16_t)src->numComponents);
302 for(uint16_t c = 0; c < nc; ++c)
303 {
304 auto* dc = dst->tile_components[c];
305 auto* sc = src->tileComponents[c];
306 if(!dc || !sc)
307 continue;
308 uint8_t nr = std::min(dc->numresolutions, (uint8_t)sc->numResolutions);
309 for(uint8_t r = 0; r < nr; ++r)
310 {
311 auto* dr = dc->resolutions[r];
312 auto* sr = sc->resolutions[r];
313 if(!dr || !sr)
314 continue;
315 uint8_t nb = std::min(dr->num_bands, (uint8_t)sr->numBands);
316 for(uint8_t b = 0; b < nb; ++b)
317 {
318 auto* db = dr->band[b];
319 auto* sb = sr->band[b];
320 if(!db || !sb)
321 continue;
322 db->stepsize = sb->stepsize;
323 uint64_t np = std::min(db->num_precincts, sb->numPrecincts);
324 for(uint64_t p = 0; p < np; ++p)
325 {
326 auto* dp = db->precincts[p];
327 auto* sp = sb->precincts[p];
328 if(!dp || !sp)
329 continue;
330 uint64_t nk = std::min(dp->num_blocks, sp->numBlocks);
331 for(uint64_t k = 0; k < nk; ++k)
332 {
333 auto* dkb = dp->blocks[k];
334 auto* skb = sp->blocks[k];
335 if(!dkb || !skb)
336 continue;
337 dkb->context_stream = skb->contextStream;
338 dkb->compressed_data = skb->compressedData;
339 dkb->compressed_data_length = skb->compressedDataLength;
340 dkb->num_bit_planes = skb->numBitPlanes;
341 dkb->num_passes = (uint8_t)skb->numPasses;
342 }
343 }
344 }
345 }
346 }
347}
348
349/* ── Sync codeblock metadata from grk_plugin_tile wrapper back to original gpup_tile ──
350 * After T2 decompress, the host fills wrapper codeblock metadata (num_passes,
351 * num_bit_planes, compressed_data_length). The compressed data buffer is shared,
352 * but the metadata fields are separate copies. This function syncs them back so
353 * the GPU plugin's transferDecodeInfo() sees the updated values.
354 */
356{
357 if(!wrapper || !original)
358 return;
359 uint16_t nc = std::min(wrapper->num_components, (uint16_t)original->numComponents);
360 for(uint16_t c = 0; c < nc; ++c)
361 {
362 auto* wc = wrapper->tile_components[c];
363 auto* oc = original->tileComponents[c];
364 if(!wc || !oc)
365 continue;
366 uint8_t nr = std::min(wc->numresolutions, (uint8_t)oc->numResolutions);
367 for(uint8_t r = 0; r < nr; ++r)
368 {
369 auto* wr = wc->resolutions[r];
370 auto* or_ = oc->resolutions[r];
371 if(!wr || !or_)
372 continue;
373 uint8_t nb = std::min(wr->num_bands, (uint8_t)or_->numBands);
374 for(uint8_t b = 0; b < nb; ++b)
375 {
376 auto* wb = wr->band[b];
377 auto* ob = or_->band[b];
378 if(!wb || !ob)
379 continue;
380 // sync band-level stepsize (host sets it in decompress_synch_plugin_with_host)
381 ob->stepsize = wb->stepsize;
382 uint64_t np = std::min(wb->num_precincts, ob->numPrecincts);
383 for(uint64_t p = 0; p < np; ++p)
384 {
385 auto* wp = wb->precincts[p];
386 auto* op = ob->precincts[p];
387 if(!wp || !op)
388 continue;
389 uint64_t nk = std::min(wp->num_blocks, op->numBlocks);
390 for(uint64_t k = 0; k < nk; ++k)
391 {
392 auto* wkb = wp->blocks[k];
393 auto* okb = op->blocks[k];
394 if(!wkb || !okb)
395 continue;
396 okb->compressedDataLength = wkb->compressed_data_length;
397 okb->numBitPlanes = wkb->num_bit_planes;
398 okb->numPasses = wkb->num_passes;
399 }
400 }
401 }
402 }
403 }
404}
405
406/* Free the wrapper tree created by gpup_tile_to_grk (does NOT free shared data) */
408{
409 if(!t)
410 return;
411 for(uint16_t c = 0; c < t->num_components; ++c)
412 {
413 auto* tc = t->tile_components[c];
414 if(!tc)
415 continue;
416 for(uint8_t r = 0; r < tc->numresolutions; ++r)
417 {
418 auto* res = tc->resolutions[r];
419 if(!res)
420 continue;
421 for(uint8_t b = 0; b < res->num_bands; ++b)
422 {
423 auto* band = res->band[b];
424 if(!band)
425 continue;
426 for(uint64_t p = 0; p < band->num_precincts; ++p)
427 {
428 auto* prc = band->precincts[p];
429 if(!prc)
430 continue;
431 for(uint64_t k = 0; k < prc->num_blocks; ++k)
432 delete prc->blocks[k];
433 delete[] prc->blocks;
434 delete prc;
435 }
436 delete[] band->precincts;
437 delete band;
438 }
439 delete[] res->band;
440 delete res;
441 }
442 delete[] tc->resolutions;
443 delete tc;
444 }
445 delete[] t->tile_components;
446 delete t;
447}
448
449/* ── grk_plugin_tile → gpup_tile (for encode: sync data back to plugin) ── */
451{
452 if(!src)
453 return nullptr;
454 auto* dst = new gpup_tile();
455 dst->decompress_flags = src->decompress_flags;
456 dst->numComponents = src->num_components;
457 dst->tileComponents = new gpup_tile_component*[src->num_components]();
458 for(uint16_t c = 0; c < src->num_components; ++c)
459 {
460 auto* sc = src->tile_components[c];
461 auto* dc = new gpup_tile_component();
462 dc->numResolutions = sc->numresolutions;
463 dc->resolutions = new gpup_resolution*[sc->numresolutions]();
464 for(uint8_t r = 0; r < sc->numresolutions; ++r)
465 {
466 auto* sr = sc->resolutions[r];
467 auto* dr = new gpup_resolution();
468 dr->level = sr->level;
469 dr->numBands = sr->num_bands;
470 dr->band = new gpup_band*[sr->num_bands]();
471 for(uint8_t b = 0; b < sr->num_bands; ++b)
472 {
473 auto* sb = sr->band[b];
474 auto* db = new gpup_band();
475 db->orientation = sb->orientation;
476 db->numPrecincts = sb->num_precincts;
477 db->precincts = new gpup_precinct*[sb->num_precincts]();
478 db->stepsize = sb->stepsize;
479 for(uint64_t p = 0; p < sb->num_precincts; ++p)
480 {
481 auto* sp = sb->precincts[p];
482 auto* dp = new gpup_precinct();
483 dp->numBlocks = sp->num_blocks;
484 dp->blocks = new gpup_code_block*[sp->num_blocks]();
485 for(uint64_t k = 0; k < sp->num_blocks; ++k)
486 {
487 auto* skb = sp->blocks[k];
488 auto* dkb = new gpup_code_block();
489 dkb->x0 = skb->x0;
490 dkb->y0 = skb->y0;
491 dkb->x1 = skb->x1;
492 dkb->y1 = skb->y1;
493 dkb->contextStream = skb->context_stream;
494 dkb->numPix = skb->num_pix;
495 dkb->compressedData = skb->compressed_data;
496 dkb->compressedDataLength = skb->compressed_data_length;
497 dkb->numBitPlanes = skb->num_bit_planes;
498 dkb->numPasses = skb->num_passes;
499 for(uint8_t ps = 0; ps < skb->num_passes && ps < GRK_MAX_PASSES; ++ps)
500 {
501 dkb->passes[ps].distortionDecrease = skb->passes[ps].distortion_decrease;
502 dkb->passes[ps].rate = skb->passes[ps].rate;
503 dkb->passes[ps].length = skb->passes[ps].length;
504 }
505 dkb->sortedIndex = skb->sorted_index;
506 dp->blocks[k] = dkb;
507 }
508 db->precincts[p] = dp;
509 }
510 dr->band[b] = db;
511 }
512 dc->resolutions[r] = dr;
513 }
514 dst->tileComponents[c] = dc;
515 }
516 return dst;
517}
518
519/* Free a gpup_tile wrapper created by grk_tile_to_gpup (does NOT free shared data) */
521{
522 if(!t)
523 return;
524 for(size_t c = 0; c < t->numComponents; ++c)
525 {
526 auto* tc = t->tileComponents[c];
527 if(!tc)
528 continue;
529 for(size_t r = 0; r < tc->numResolutions; ++r)
530 {
531 auto* res = tc->resolutions[r];
532 if(!res)
533 continue;
534 for(size_t b = 0; b < res->numBands; ++b)
535 {
536 auto* band = res->band[b];
537 if(!band)
538 continue;
539 for(uint64_t p = 0; p < band->numPrecincts; ++p)
540 {
541 auto* prc = band->precincts[p];
542 if(!prc)
543 continue;
544 for(uint64_t k = 0; k < prc->numBlocks; ++k)
545 delete prc->blocks[k];
546 delete[] prc->blocks;
547 delete prc;
548 }
549 delete[] band->precincts;
550 delete band;
551 }
552 delete[] res->band;
553 delete res;
554 }
555 delete[] tc->resolutions;
556 delete tc;
557 }
558 delete[] t->tileComponents;
559 delete t;
560}
561
562/* ── grk_stream_params → gpup_stream_params ───────────────────── */
564{
565 memset(dst, 0, sizeof(*dst));
566 dst->file = src->file;
567 dst->buf = src->buf;
568 dst->buf_len = src->buf_len;
569 dst->buf_compressed_len = src->buf_compressed_len;
570}
572{
573 memset(dst, 0, sizeof(*dst));
574 if(src->file)
575 strncpy(dst->file, src->file, GRK_PATH_LEN - 1);
576 dst->buf = src->buf;
577 dst->buf_len = src->buf_len;
578 dst->buf_compressed_len = src->buf_compressed_len;
579}
580
581} // namespace grk
#define GPUP_MAXRLVLS
Definition gpu_plugin_shared.h:52
struct _gpup_tile_component gpup_tile_component
gpup_prog_order
Definition gpu_plugin_shared.h:71
struct _gpup_resolution gpup_resolution
struct _gpup_tile gpup_tile
struct _gpup_compress_params gpup_compress_params
struct _gpup_decompress_params gpup_decompress_params
struct _gpup_image gpup_image
struct _gpup_code_block gpup_code_block
struct _gpup_precinct gpup_precinct
struct _gpup_band gpup_band
struct _gpup_stream_params gpup_stream_params
struct _gpup_header_info gpup_header_info
gpup_file_fmt
Definition gpu_plugin_shared.h:95
gpup_codec_fmt
Definition gpu_plugin_shared.h:112
gpup_rate_control
Definition gpu_plugin_shared.h:120
#define GPUP_MAX_LAYERS
Definition gpu_plugin_shared.h:50
#define GPUP_PATH_LEN
Definition gpu_plugin_shared.h:49
gpup_color_space
Definition gpu_plugin_shared.h:82
struct _gpup_image_comp gpup_image_comp
#define GRK_MAX_PASSES
Grok maximum number of passes.
Definition grok.h:171
struct grk_plugin_tile_component grk_plugin_tile_component
struct _grk_plugin_precinct grk_plugin_precinct
grk_plugin_precinct
enum _GRK_COLOR_SPACE GRK_COLOR_SPACE
Grok supported color spaces.
#define GRK_PATH_LEN
Definition grok.h:327
struct _grk_plugin_band grk_plugin_band
struct _grk_plugin_tile grk_plugin_tile
struct _grk_plugin_resolution grk_plugin_resolution
struct _grk_plugin_code_block grk_plugin_code_block
ResWindow.
Definition CompressedChunkCache.h:36
gpup_tile * grk_tile_to_gpup(grk_plugin_tile *src)
Definition plugin_gpup_bridge.h:450
void grk_to_gpup_header_info(const grk_header_info *src, gpup_header_info *dst)
Definition plugin_gpup_bridge.h:133
void grk_plugin_tile_free_wrapper(grk_plugin_tile *t)
Definition plugin_gpup_bridge.h:407
void gpup_to_grk_header_info(const gpup_header_info *src, grk_header_info *dst)
Definition plugin_gpup_bridge.h:108
void grk_to_gpup_compress_params(const grk_cparameters *src, gpup_compress_params *dst)
Definition plugin_gpup_bridge.h:25
void grk_tile_sync_metadata_to_gpup(grk_plugin_tile *wrapper, gpup_tile *original)
Definition plugin_gpup_bridge.h:355
void gpup_image_free_shell(gpup_image *img)
Definition plugin_gpup_bridge.h:191
void gpup_to_grk_stream_params(const gpup_stream_params *src, grk_stream_params *dst)
Definition plugin_gpup_bridge.h:571
void gpup_tile_free_wrapper(gpup_tile *t)
Definition plugin_gpup_bridge.h:520
void grk_to_gpup_stream_params(const grk_stream_params *src, gpup_stream_params *dst)
Definition plugin_gpup_bridge.h:563
void gpup_to_grk_image_shallow(const gpup_image *src, grk_image *dst)
Definition plugin_gpup_bridge.h:201
void grk_to_gpup_decompress_params(const grk_decompress_parameters *src, gpup_decompress_params *dst)
Definition plugin_gpup_bridge.h:84
void gpup_tile_update_grk(grk_plugin_tile *dst, gpup_tile *src)
Definition plugin_gpup_bridge.h:296
grk_plugin_tile * gpup_tile_to_grk(gpup_tile *src)
Definition plugin_gpup_bridge.h:222
gpup_image * grk_to_gpup_image(const grk_image *src)
Definition plugin_gpup_bridge.h:159
uint8_t csty
Definition gpu_plugin_shared.h:312
gpup_file_fmt decod_format
Definition gpu_plugin_shared.h:332
uint64_t max_comp_size
Definition gpu_plugin_shared.h:338
uint8_t newTilePartProgressionDivider
Definition gpu_plugin_shared.h:335
bool irreversible
Definition gpu_plugin_shared.h:320
uint8_t numgbits
Definition gpu_plugin_shared.h:313
bool allocationByQuality
Definition gpu_plugin_shared.h:310
uint32_t prch_init[GPUP_MAXRLVLS]
Definition gpu_plugin_shared.h:325
bool verbose
Definition gpu_plugin_shared.h:347
uint8_t mct
Definition gpu_plugin_shared.h:336
uint8_t subsampling_dx
Definition gpu_plugin_shared.h:330
uint32_t repeats
Definition gpu_plugin_shared.h:346
bool allocationByRateDistoration
Definition gpu_plugin_shared.h:308
uint16_t rsiz
Definition gpu_plugin_shared.h:339
uint32_t kernelBuildOptions
Definition gpu_plugin_shared.h:345
uint32_t res_spec
Definition gpu_plugin_shared.h:323
uint16_t numlayers
Definition gpu_plugin_shared.h:307
uint8_t numresolution
Definition gpu_plugin_shared.h:316
gpup_file_fmt cod_format
Definition gpu_plugin_shared.h:333
gpup_prog_order prog_order
Definition gpu_plugin_shared.h:314
char outfile[GPUP_PATH_LEN]
Definition gpu_plugin_shared.h:327
uint32_t numpocs
Definition gpu_plugin_shared.h:315
uint64_t max_cs_size
Definition gpu_plugin_shared.h:337
uint32_t image_offset_y0
Definition gpu_plugin_shared.h:329
bool sharedMemoryInterface
Definition gpu_plugin_shared.h:348
int32_t roi_compno
Definition gpu_plugin_shared.h:321
bool enableTilePartGeneration
Definition gpu_plugin_shared.h:334
uint32_t image_offset_x0
Definition gpu_plugin_shared.h:328
char infile[GPUP_PATH_LEN]
Definition gpu_plugin_shared.h:326
uint8_t subsampling_dy
Definition gpu_plugin_shared.h:331
uint32_t prcw_init[GPUP_MAXRLVLS]
Definition gpu_plugin_shared.h:324
uint32_t duration
Definition gpu_plugin_shared.h:344
uint8_t cblk_sty
Definition gpu_plugin_shared.h:319
double layer_distortion[GPUP_MAX_LAYERS]
Definition gpu_plugin_shared.h:311
uint32_t roi_shift
Definition gpu_plugin_shared.h:322
uint32_t ty0
Definition gpu_plugin_shared.h:306
uint32_t t_width
Definition gpu_plugin_shared.h:306
uint32_t cblockh_init
Definition gpu_plugin_shared.h:318
uint32_t cblockw_init
Definition gpu_plugin_shared.h:317
uint16_t framerate
Definition gpu_plugin_shared.h:340
uint32_t numThreads
Definition gpu_plugin_shared.h:342
double layer_rate[GPUP_MAX_LAYERS]
Definition gpu_plugin_shared.h:309
gpup_rate_control rateControlAlgorithm
Definition gpu_plugin_shared.h:341
uint32_t t_height
Definition gpu_plugin_shared.h:306
int32_t deviceId
Definition gpu_plugin_shared.h:343
uint32_t tx0
Definition gpu_plugin_shared.h:306
bool tile_size_on
Definition gpu_plugin_shared.h:305
uint8_t reduce
Definition gpu_plugin_shared.h:357
uint16_t layers_to_decompress_
Definition gpu_plugin_shared.h:358
char infile[GPUP_PATH_LEN]
Definition gpu_plugin_shared.h:364
void * user_data
Definition gpu_plugin_shared.h:375
gpup_codec_fmt decod_format
Definition gpu_plugin_shared.h:366
double dw_x0
Definition gpu_plugin_shared.h:368
double dw_y0
Definition gpu_plugin_shared.h:368
uint32_t numThreads
Definition gpu_plugin_shared.h:373
char outfile[GPUP_PATH_LEN]
Definition gpu_plugin_shared.h:365
double dw_y1
Definition gpu_plugin_shared.h:368
bool verbose_
Definition gpu_plugin_shared.h:374
gpup_decompress_core_params core
Definition gpu_plugin_shared.h:363
uint32_t kernelBuildOptions
Definition gpu_plugin_shared.h:371
int32_t deviceId
Definition gpu_plugin_shared.h:370
gpup_file_fmt cod_format
Definition gpu_plugin_shared.h:367
uint32_t repeats
Definition gpu_plugin_shared.h:372
double dw_x1
Definition gpu_plugin_shared.h:368
uint16_t tileIndex
Definition gpu_plugin_shared.h:369
uint16_t t_grid_height
Definition gpu_plugin_shared.h:295
bool irreversible
Definition gpu_plugin_shared.h:284
uint8_t numresolutions
Definition gpu_plugin_shared.h:287
uint32_t ty0
Definition gpu_plugin_shared.h:293
uint32_t t_height
Definition gpu_plugin_shared.h:294
uint32_t cblockh_init
Definition gpu_plugin_shared.h:283
uint32_t t_width
Definition gpu_plugin_shared.h:294
uint32_t prcw_init[GPUP_MAXRLVLS]
Definition gpu_plugin_shared.h:291
uint16_t rsiz
Definition gpu_plugin_shared.h:286
uint16_t max_layers_
Definition gpu_plugin_shared.h:296
uint8_t csty
Definition gpu_plugin_shared.h:289
uint8_t cblk_sty
Definition gpu_plugin_shared.h:290
uint32_t prch_init[GPUP_MAXRLVLS]
Definition gpu_plugin_shared.h:292
uint8_t mct
Definition gpu_plugin_shared.h:285
uint16_t t_grid_width
Definition gpu_plugin_shared.h:295
uint32_t tx0
Definition gpu_plugin_shared.h:293
uint32_t cblockw_init
Definition gpu_plugin_shared.h:282
gpup_color_space color_space
Definition gpu_plugin_shared.h:212
uint32_t y0
Definition gpu_plugin_shared.h:210
uint32_t y1
Definition gpu_plugin_shared.h:210
gpup_image_comp * comps
Definition gpu_plugin_shared.h:213
uint16_t numcomps
Definition gpu_plugin_shared.h:211
uint32_t x0
Definition gpu_plugin_shared.h:210
uint32_t x1
Definition gpu_plugin_shared.h:210
size_t buf_len
Definition gpu_plugin_shared.h:398
const char * file
Definition gpu_plugin_shared.h:396
size_t buf_compressed_len
Definition gpu_plugin_shared.h:399
uint8_t * buf
Definition gpu_plugin_shared.h:397
gpup_resolution ** resolutions
Definition gpu_plugin_shared.h:266
gpup_tile_component ** tileComponents
Definition gpu_plugin_shared.h:273
uint32_t decompress_flags
Definition gpu_plugin_shared.h:271
size_t numComponents
Definition gpu_plugin_shared.h:272
Compression parameters.
Decompression parameters.
JPEG 2000 header info.
Grok image Note: do not directly create a grk_image object.
Plugin band.
Plugin code block.
Plugin resolution.
Plugin tile component.
Definition grok.h:1086
Plugin tile.
JPEG 2000 stream parameters There are three methods of streaming: by file, buffer or callback Client ...