Commit 5032c2da authored by Hugo Beauzée-Luyssen's avatar Hugo Beauzée-Luyssen Committed by Jean-Baptiste Kempf

avcodec: encoder: Don't assume a maximum BPP of 24

Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
(cherry picked from commit e4b51d8d)
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent a33d8caa
...@@ -436,13 +436,7 @@ int OpenEncoder( vlc_object_t *p_this ) ...@@ -436,13 +436,7 @@ int OpenEncoder( vlc_object_t *p_this )
p_enc->fmt_in.video.i_sar_num, p_enc->fmt_in.video.i_sar_num,
p_enc->fmt_in.video.i_sar_den, 1 << 30 ); p_enc->fmt_in.video.i_sar_den, 1 << 30 );
p_sys->i_buffer_out = p_context->height * p_context->width p_sys->p_buffer_out = NULL;
* 3 /* Assume 24bpp maximum */
+ 200; /* some room for potential headers (such as BMP) */
if( p_sys->i_buffer_out < FF_MIN_BUFFER_SIZE )
p_sys->i_buffer_out = FF_MIN_BUFFER_SIZE;
p_sys->p_buffer_out = malloc( p_sys->i_buffer_out );
p_enc->fmt_in.i_codec = VLC_CODEC_I420; p_enc->fmt_in.i_codec = VLC_CODEC_I420;
p_enc->fmt_in.video.i_chroma = p_enc->fmt_in.i_codec; p_enc->fmt_in.video.i_chroma = p_enc->fmt_in.i_codec;
...@@ -789,6 +783,22 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict ) ...@@ -789,6 +783,22 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict )
AVFrame frame; AVFrame frame;
int i_out, i_plane; int i_out, i_plane;
/* 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.
*/
if ( p_sys->p_buffer_out == NULL )
{
int bytesPerPixel = p_enc->fmt_out.video.i_bits_per_pixel ?
p_enc->fmt_out.video.i_bits_per_pixel / 8 : 3;
p_sys->i_buffer_out = p_sys->p_context->height * p_sys->p_context->width
* bytesPerPixel + 200; /* some room for potential headers (such as BMP) */
if( p_sys->i_buffer_out < FF_MIN_BUFFER_SIZE )
p_sys->i_buffer_out = FF_MIN_BUFFER_SIZE;
p_sys->p_buffer_out = malloc( p_sys->i_buffer_out );
}
memset( &frame, 0, sizeof( AVFrame ) ); memset( &frame, 0, sizeof( AVFrame ) );
for( i_plane = 0; i_plane < p_pict->i_planes; i_plane++ ) for( i_plane = 0; i_plane < p_pict->i_planes; i_plane++ )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment