Sure :)

We're passing width and height as int pointers to obtain the image dimensions and then try to find a matching video mode. While lodepng uses unsigned ints, that would always give us warnings. This is a simple way of addressing that issue. We can expect fairly small numbers, so the sign shouldn't matter here.

I also wrote patches to allow images smaller than the screen resolution to center them and fill the paddings with black. I believe that makes more sense these days, avoiding mode switches entirely if possible. I'll send those some other time. :)

On Mon, Nov 4, 2019, 3:28 PM Philippe Mathieu-Daudé <philmd@redhat.com> wrote:
Hi Daniel,

On 10/29/19 6:42 PM, cyrevolt@googlemail.com wrote:
> From: Daniel Maslowski <info@orangecms.org>

Can you explain the rational of this patch?
In particular why use signed vs unsigned.

Thanks,

Phil.

> Signed-off-by: Daniel Maslowski <info@orangecms.org>
> ---
>   src/lodepng.c | 12 ++++++------
>   1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/src/lodepng.c b/src/lodepng.c
> index d9c8443..490fc8e 100644
> --- a/src/lodepng.c
> +++ b/src/lodepng.c
> @@ -1925,7 +1925,7 @@ static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t fil
>   /* ////////////////////////////////////////////////////////////////////////// */
>   
>   /*read the information from the header and store it in the LodePNGInfo. return value is error*/
> -unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
> +unsigned lodepng_inspect(int* w, int* h, LodePNGState* state,
>                            const unsigned char* in, size_t insize) {
>     unsigned width, height;
>     LodePNGInfo* info = &state->info_png;
> @@ -2275,7 +2275,7 @@ unsigned lodepng_inspect_chunk(LodePNGState* state, size_t pos,
>   }
>   
>   /*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/
> -static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
> +static void decodeGeneric(unsigned char** out, int* w, int* h,
>                             LodePNGState* state,
>                             const unsigned char* in, size_t insize) {
>     unsigned char IEND = 0;
> @@ -2403,7 +2403,7 @@ static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
>     ucvector_cleanup(&scanlines);
>   }
>   
> -unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
> +unsigned lodepng_decode(unsigned char** out, int* w, int* h,
>                           LodePNGState* state,
>                           const unsigned char* in, size_t insize) {
>     *out = 0;
> @@ -2441,7 +2441,7 @@ unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
>     return state->error;
>   }
>   
> -unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in,
> +unsigned lodepng_decode_memory(unsigned char** out, int* w, int* h, const unsigned char* in,
>                                  size_t insize, LodePNGColorType colortype, unsigned bitdepth) {
>     unsigned error;
>     LodePNGState state;
> @@ -2453,11 +2453,11 @@ unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, co
>     return error;
>   }
>   
> -unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) {
> +unsigned lodepng_decode32(unsigned char** out, int* w, int* h, const unsigned char* in, size_t insize) {
>     return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8);
>   }
>   
> -unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) {
> +unsigned lodepng_decode24(unsigned char** out, int* w, int* h, const unsigned char* in, size_t insize) {
>     return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8);
>   }
>   
>