[vlc-devel] [PATCH] ugly resampler, handle that output data isn't longer than input data

Rémi Denis-Courmont remi at remlab.net
Mon Apr 21 11:46:26 CEST 2014


Le dimanche 20 avril 2014, 12:24:49 ileoo at videolan.org a écrit :
> +    msg_Info( p_filter, "input samples %d length %d",
> p_in_buf->i_nb_samples, p_in_buf->i_length );

Too verbose. Also, wrong format string.

> 
> -    unsigned char *p_out = p_out_buf->p_buffer;
> -    unsigned char *p_in = p_in_buf->p_buffer;
> +    uint8_t *p_out = p_out_buf->p_buffer;
> +    uint8_t *p_in = p_in_buf->p_buffer;
>      unsigned int i_remainder = 0;
> 
> -    p_out_buf->i_nb_samples = i_out_nb;
> -    p_out_buf->i_buffer = i_out_nb * framesize;
> +    p_out_buf->i_nb_samples = 0;
>      p_out_buf->i_pts = p_in_buf->i_pts;
> -    p_out_buf->i_length = p_out_buf->i_nb_samples *
> -        1000000 / p_filter->fmt_out.audio.i_rate;
> 
> -    while( i_out_nb )
> +    while( i_out_nb >= p_filter->fmt_in.audio.i_rate )
>      {
>          if( p_out != p_in )
>              memcpy( p_out, p_in, framesize );
>          p_out += framesize;
> -        i_out_nb--;
> +        i_out_nb -= p_filter->fmt_in.audio.i_rate;
> +        p_out_buf->i_nb_samples++;
> 
>          i_remainder += p_filter->fmt_in.audio.i_rate;
>          while( i_remainder >= p_filter->fmt_out.audio.i_rate )
> @@ -131,6 +130,10 @@ static block_t *DoWork( filter_t * p_filter, block_t *
> p_in_buf ) i_remainder -= p_filter->fmt_out.audio.i_rate;
>          }
>      }
> +    p_out_buf->i_buffer = p_out_buf->i_nb_samples * framesize;
> +    p_out_buf->i_length = p_out_buf->i_nb_samples *
> +        CLOCK_FREQ / p_filter->fmt_out.audio.i_rate;

I think this is pretty much as wrong as the previous code. We should account 
for rounding errors, e.g. using date_*(). This would require a special case 
for discontinuities though.

> +    msg_Info( p_filter, "output samples %d length %d",
> p_out_buf->i_nb_samples, p_out_buf->i_length );

Same as above.

> 
>      if( p_in_buf != p_out_buf )
>  out:

-- 
Rémi Denis-Courmont
http://www.remlab.net/




More information about the vlc-devel mailing list