[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