@@ -1581,9 +1581,15 @@ adjust_pixel_format(struct gpujpeg_parameters * param, struct gpujpeg_image_para
15811581 return param_image -> pixel_format == GPUJPEG_PIXFMT_NO_ALPHA ? GPUJPEG_444_U8_P012 : GPUJPEG_4444_U8_P0123 ;
15821582}
15831583
1584+ /**
1585+ * Adjust the unbound/unset parameters to match JPEG image properties.
1586+ *
1587+ * The main reason is to adnust the @ref gpujpeg_parameters and @ref gpujpeg_image_parameters
1588+ * to be consistend and/or match user requirements.
1589+ */
15841590static void
1585- adjust_format (struct gpujpeg_parameters * param , struct gpujpeg_image_parameters * param_image ,
1586- enum gpujpeg_color_space color_space_internal )
1591+ adjust_params (struct gpujpeg_parameters * param , struct gpujpeg_image_parameters * param_image ,
1592+ enum gpujpeg_color_space color_space_internal , unsigned req_alignment_b )
15871593{
15881594 static_assert (GPUJPEG_PIXFMT_AUTODETECT < 0 , "enum gpujpeg_pixel_format type should be signed" );
15891595 if ( param_image -> color_space == GPUJPEG_NONE ) {
@@ -1602,6 +1608,11 @@ adjust_format(struct gpujpeg_parameters* param, struct gpujpeg_image_parameters*
16021608 if ( param_image -> pixel_format <= GPUJPEG_PIXFMT_AUTODETECT ) {
16031609 param_image -> pixel_format = adjust_pixel_format (param , param_image );
16041610 }
1611+ if (req_alignment_b != 0 ) {
1612+ const unsigned linesize_b = gpujpeg_pixel_format_get_unit_size (param_image -> pixel_format ) * param_image -> width ;
1613+ const unsigned aligned_linesize_b = (linesize_b + req_alignment_b - 1 ) / req_alignment_b * req_alignment_b ;
1614+ param_image -> width_padding = (int ) (aligned_linesize_b - linesize_b );
1615+ }
16051616}
16061617
16071618/* Documented at declaration */
@@ -1669,7 +1680,8 @@ gpujpeg_reader_read_image(struct gpujpeg_decoder* decoder, uint8_t* image, size_
16691680 reader .image_end ) != 0 ) {
16701681 return -1 ;
16711682 }
1672- adjust_format (& reader .param , & reader .param_image , reader .param .color_space_internal );
1683+ adjust_params (& reader .param , & reader .param_image , reader .param .color_space_internal ,
1684+ decoder -> req_alignment );
16731685 break ;
16741686
16751687 case GPUJPEG_MARKER_DHT :
@@ -1774,7 +1786,7 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
17741786 reader .image_end ) != 0 ) {
17751787 return -1 ;
17761788 }
1777- adjust_format (& reader .param , & reader .param_image , reader .param .color_space_internal );
1789+ adjust_params (& reader .param , & reader .param_image , reader .param .color_space_internal , 0 );
17781790 break ;
17791791 }
17801792 case GPUJPEG_MARKER_RST0 :
0 commit comments