[vlc-devel] [PATCH] oldmovie: fix integer usage

Jean-Baptiste Kempf jb at videolan.org
Wed Apr 8 16:37:52 CEST 2020


OK for me

On Wed, Apr 8, 2020, at 10:21, Alexandre Janniaux wrote:
> Use size_t when indexing and long long for values depending on time.
> Warnings on abs with long int are fixed and comparison between signed
> and unsigned integer are avoided at the same time.
> 
> It also has the benefit of easing the reading a bit by using shorter
> names or splitting some operations.
> ---
>  modules/video_filter/oldmovie.c | 45 ++++++++++++++++++++-------------
>  1 file changed, 28 insertions(+), 17 deletions(-)
> 
> diff --git a/modules/video_filter/oldmovie.c b/modules/video_filter/oldmovie.c
> index c287beede1..f7c6a710fc 100644
> --- a/modules/video_filter/oldmovie.c
> +++ b/modules/video_filter/oldmovie.c
> @@ -113,7 +113,7 @@ typedef struct
>  
>      /* general data */
>      bool b_init;
> -    int32_t  i_planes;
> +    size_t   i_planes;
>      int32_t *i_height;
>      int32_t *i_width;
>      int32_t *i_visible_pitch;
> @@ -320,7 +320,7 @@ static int oldmovie_allocate_data( filter_t 
> *p_filter, picture_t *p_pic_in ) {
>          return VLC_ENOMEM;
>      }
>  
> -    for (int32_t i_p=0; i_p < p_sys->i_planes; i_p++) {
> +    for (size_t i_p=0; i_p < p_sys->i_planes; i_p++) {
>          p_sys->i_visible_pitch [i_p] = (int) 
> p_pic_in->p[i_p].i_visible_pitch;
>          p_sys->i_height[i_p]         = (int) 
> p_pic_in->p[i_p].i_visible_lines;
>          p_sys->i_width [i_p]         = (int) 
> p_pic_in->p[i_p].i_visible_pitch
> @@ -335,13 +335,13 @@ static int oldmovie_allocate_data( filter_t 
> *p_filter, picture_t *p_pic_in ) {
>  static void oldmovie_free_allocated_data( filter_t *p_filter ) {
>      filter_sys_t *p_sys = p_filter->p_sys;
>  
> -    for ( uint32_t i_s = 0; i_s < MAX_SCRATCH; i_s++ )
> +    for ( size_t i_s = 0; i_s < MAX_SCRATCH; i_s++ )
>          FREENULL(p_sys->p_scratch[i_s]);
>  
> -    for ( uint32_t i_h = 0; i_h < MAX_HAIR; i_h++ )
> +    for ( size_t i_h = 0; i_h < MAX_HAIR; i_h++ )
>          FREENULL(p_sys->p_hair[i_h]);
>  
> -    for ( uint32_t i_d = 0; i_d < MAX_DUST; i_d++ )
> +    for ( size_t i_d = 0; i_d < MAX_DUST; i_d++ )
>          FREENULL(p_sys->p_dust[i_d]);
>  
>      p_sys->i_planes = 0;
> @@ -455,10 +455,12 @@ static int oldmovie_sliding_offset_effect( 
> filter_t *p_filter, picture_t *p_pic_
>          if ( abs(p_sys->i_sliding_speed) < 50 )
>              p_sys->i_sliding_speed += 5;
>  
> -        /* check if offset is close to 0 and then ready to stop */
> -        if ( abs( p_sys->i_sliding_ofs ) < abs( p_sys->i_sliding_speed
> +        long long i_position = p_sys->i_sliding_speed
>               * p_sys->i_height[Y_PLANE]
> -             * SEC_FROM_VLC_TICK( p_sys->i_cur_time - 
> p_sys->i_last_time ) )
> +             * SEC_FROM_VLC_TICK( p_sys->i_cur_time - 
> p_sys->i_last_time );
> +
> +        /* check if offset is close to 0 and then ready to stop */
> +        if ( abs( p_sys->i_sliding_ofs ) < llabs( i_position )
>               ||  abs( p_sys->i_sliding_ofs ) < 
> p_sys->i_height[Y_PLANE] * 100 / 20 ) {
>  
>              /* reset sliding parameters */
> @@ -485,7 +487,10 @@ static int oldmovie_sliding_offset_apply( filter_t 
> *p_filter, picture_t *p_pic_o
>  {
>      filter_sys_t *p_sys = p_filter->p_sys;
>  
> -    for ( uint8_t i_p = 0; i_p < p_pic_out->i_planes; i_p++ ) {
> +    assert(p_pic_out->i_planes > 0);
> +    size_t i_planes = p_pic_out->i_planes;
> +
> +    for ( size_t i_p = 0; i_p < i_planes; i_p++ ) {
>          /* first allocate temporary buffer for swap operation */
>          uint8_t *p_temp_buf = calloc( p_pic_out->p[i_p].i_lines * 
> p_pic_out->p[i_p].i_pitch,
>                                        sizeof(uint8_t) );
> @@ -495,15 +500,17 @@ static int oldmovie_sliding_offset_apply( 
> filter_t *p_filter, picture_t *p_pic_o
>                  p_pic_out->p[i_p].i_lines * p_pic_out->p[i_p].i_pitch 
> );
>  
>          /* copy lines to output_pic */
> -        for ( int32_t i_y = 0; i_y < 
> p_pic_out->p[i_p].i_visible_lines; i_y++ ) {
> -            int32_t i_ofs = MOD( ( p_sys->i_offset_ofs + 
> p_sys->i_sliding_ofs )
> +        assert(p_pic_out->p[i_p].i_visible_lines > 0);
> +        size_t i_visible_lines = p_pic_out->p[i_p].i_visible_lines;
> +        for ( size_t i_y = 0; i_y < i_visible_lines; i_y++ ) {
> +            size_t i_ofs = MOD( ( p_sys->i_offset_ofs + 
> p_sys->i_sliding_ofs )
>                                   /100,
>                                   p_sys->i_height[Y_PLANE] );
> -            i_ofs *= p_pic_out->p[i_p].i_visible_lines;
> +            i_ofs *= i_visible_lines;
>              i_ofs /= p_sys->i_height[Y_PLANE];
>  
>              memcpy( &p_pic_out->p[i_p].p_pixels[ i_y * 
> p_pic_out->p[i_p].i_pitch ],
> -                    &p_temp_buf[ ( ( i_y + i_ofs ) % 
> p_pic_out->p[i_p].i_visible_lines ) * p_pic_out->p[i_p].i_pitch ],
> +                    &p_temp_buf[ ( ( i_y + i_ofs ) % i_visible_lines ) 
> * p_pic_out->p[i_p].i_pitch ],
>                      p_pic_out->p[i_p].i_visible_pitch);
>          }
>          free( p_temp_buf );
> @@ -517,11 +524,15 @@ static int oldmovie_sliding_offset_apply( 
> filter_t *p_filter, picture_t *p_pic_o
>   */
>  static void oldmovie_black_n_white_effect( picture_t *p_pic_out )
>  {
> -    for ( int32_t i_y = 0; i_y < 
> p_pic_out->p[Y_PLANE].i_visible_lines; i_y++ )
> -        for ( int32_t i_x = 0; i_x < 
> p_pic_out->p[Y_PLANE].i_visible_pitch;
> -              i_x += p_pic_out->p[Y_PLANE].i_pixel_pitch ) {
> +    assert(p_pic_out->p[Y_PLANE].i_visible_lines > 0);
> +    assert(p_pic_out->p[Y_PLANE].i_visible_pitch > 0);
> +    size_t i_visible_lines = p_pic_out->p[Y_PLANE].i_visible_lines;
> +    size_t i_visible_pitch = p_pic_out->p[Y_PLANE].i_visible_pitch;
> +    size_t i_pixel_pitch   = p_pic_out->p[Y_PLANE].i_pixel_pitch;
>  
> -            uint32_t i_pix_ofs = i_x+i_y*p_pic_out->p[Y_PLANE].i_pitch;
> +    for ( size_t i_y = 0; i_y < i_visible_lines; i_y++ )
> +        for ( size_t i_x = 0; i_x < i_visible_pitch; i_x += 
> i_pixel_pitch ) {
> +            size_t i_pix_ofs = i_x + i_y * 
> p_pic_out->p[Y_PLANE].i_pitch;
>              p_pic_out->p[Y_PLANE].p_pixels[i_pix_ofs] -= 
> p_pic_out->p[Y_PLANE].p_pixels[i_pix_ofs] >> 2;
>              p_pic_out->p[Y_PLANE].p_pixels[i_pix_ofs] += 30;
>          }
> -- 
> 2.26.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel

-- 
Jean-Baptiste Kempf -  President
+33 672 704 734


More information about the vlc-devel mailing list