[vlc-devel] [PATCH] avcodec encoder: get bytes per pixel from context if needed

Rafaël Carré funman at videolan.org
Wed Apr 2 09:18:00 CEST 2014


Hi,

On 04/02/14 08:25, Tristan Matthews wrote:
> Defaulting to 3 bytes broke the buffer allocation for BMP with ffmpeg, which
> defaults to RGBA.
> 
> Fixes #9687
> ---
>  modules/codec/avcodec/encoder.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c
> index df77340..9bfe238 100644
> --- a/modules/codec/avcodec/encoder.c
> +++ b/modules/codec/avcodec/encoder.c

OK

> @@ -1017,7 +1017,11 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict )

    /* Initialize the video output buffer the first time.
     * This is done here instead of OpenEncoder() because we need the actual

>       * bits_per_pixel value, without having to assume anything.
>       */

Can we use that value in OpenEncoder?

>      const int bytesPerPixel = p_enc->fmt_out.video.i_bits_per_pixel ?
> -                         p_enc->fmt_out.video.i_bits_per_pixel / 8 : 3;
> +                         p_enc->fmt_out.video.i_bits_per_pixel / 8 :
> +                         p_sys->p_context->bits_per_coded_sample ?
> +                         p_sys->p_context->bits_per_coded_sample / 8 :
> +                         3;
> +
>      const int blocksize = __MAX( FF_MIN_BUFFER_SIZE,bytesPerPixel * p_sys->p_context->height * p_sys->p_context->width + 200 );
>      block_t *p_block = block_Alloc( blocksize );
>      if( unlikely(p_block == NULL) )
> 



More information about the vlc-devel mailing list