Skip to content

Commit 5308628

Browse files
committed
postprocessor: disallow GPUJPEG_NONE internal CS
If param_image->color_space == GPUJPEG_NONE (which has been semi-officially used for native decode keeping CS) set the color_space to color_space_internal (never GPUJPEG_NONE) by gpujpeg_reader. Now run the null CS conversion only when direct memcpy still cannot be used and color_space_internal == param_image.color_space (still using GPUJPEG_NONE as template param - if GPUJPEG_NONE is in either src or dst specialization, null conversion is used).
1 parent f358426 commit 5308628

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

src/gpujpeg_postprocessor.cu

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -343,12 +343,8 @@ gpujpeg_preprocessor_select_decode_kernel(struct gpujpeg_coder* coder)
343343
RETURN_KERNEL_SWITCH(PIXEL_FORMAT, COLOR, GPUJPEG_DYNAMIC, GPUJPEG_DYNAMIC, GPUJPEG_DYNAMIC, GPUJPEG_DYNAMIC, GPUJPEG_DYNAMIC, GPUJPEG_DYNAMIC, GPUJPEG_DYNAMIC, GPUJPEG_DYNAMIC) \
344344
} \
345345

346-
// None color space
347-
if ( coder->param_image.color_space == GPUJPEG_NONE ) {
348-
RETURN_KERNEL(coder->param_image.pixel_format, GPUJPEG_NONE)
349-
}
350346
// RGB color space
351-
else if ( coder->param_image.color_space == GPUJPEG_RGB ) {
347+
if ( coder->param_image.color_space == GPUJPEG_RGB ) {
352348
RETURN_KERNEL(coder->param_image.pixel_format, GPUJPEG_RGB)
353349
}
354350
// YCbCr color space
@@ -422,7 +418,7 @@ gpujpeg_preprocessor_decoder_init(struct gpujpeg_coder* coder)
422418

423419
// assert(coder->param.comp_count == 3 || coder->param.comp_count == 4);
424420

425-
if (coder->param.color_space_internal == GPUJPEG_NONE) {
421+
if (coder->param.color_space_internal == coder->param_image.color_space) {
426422
coder->preprocessor = (void*)gpujpeg_preprocessor_select_decode_kernel<GPUJPEG_NONE>(coder);
427423
}
428424
else if (coder->param.color_space_internal == GPUJPEG_RGB) {

src/gpujpeg_reader.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,9 +1480,14 @@ adjust_pixel_format(struct gpujpeg_parameters * param, struct gpujpeg_image_para
14801480
}
14811481

14821482
static void
1483-
adjust_format(struct gpujpeg_parameters* param, struct gpujpeg_image_parameters* param_image)
1483+
adjust_format(struct gpujpeg_parameters* param, struct gpujpeg_image_parameters* param_image,
1484+
enum gpujpeg_color_space color_space_internal)
14841485
{
14851486
static_assert(GPUJPEG_PIXFMT_AUTODETECT < 0, "enum gpujpeg_pixel_format type should be signed");
1487+
if ( param_image->color_space == GPUJPEG_NONE) {
1488+
param_image->color_space = color_space_internal;
1489+
}
1490+
14861491
if ( param_image->color_space == GPUJPEG_CS_DEFAULT ) {
14871492
if ( param_image->pixel_format == GPUJPEG_U8 ||
14881493
(param_image->pixel_format <= GPUJPEG_PIXFMT_AUTODETECT && param->comp_count == 1) ) {
@@ -1569,7 +1574,7 @@ gpujpeg_reader_read_image(struct gpujpeg_decoder* decoder, uint8_t* image, size_
15691574
image_end) != 0 ) {
15701575
return -1;
15711576
}
1572-
adjust_format(&reader.param, &reader.param_image);
1577+
adjust_format(&reader.param, &reader.param_image, reader.param.color_space_internal);
15731578
break;
15741579

15751580
case GPUJPEG_MARKER_DHT:

0 commit comments

Comments
 (0)