Commit dcc1d93d authored by Laurent Aimar's avatar Laurent Aimar

Fixed theora encoder.

parent fdd6eed1
...@@ -550,9 +550,7 @@ static int OpenEncoder( vlc_object_t *p_this ) ...@@ -550,9 +550,7 @@ static int OpenEncoder( vlc_object_t *p_this )
{ {
encoder_t *p_enc = (encoder_t *)p_this; encoder_t *p_enc = (encoder_t *)p_this;
encoder_sys_t *p_sys; encoder_sys_t *p_sys;
ogg_packet header; int i_quality;
uint8_t *p_extra;
int i_quality, i;
if( p_enc->fmt_out.i_codec != VLC_CODEC_THEORA && if( p_enc->fmt_out.i_codec != VLC_CODEC_THEORA &&
!p_enc->b_force ) !p_enc->b_force )
...@@ -644,25 +642,24 @@ static int OpenEncoder( vlc_object_t *p_this ) ...@@ -644,25 +642,24 @@ static int OpenEncoder( vlc_object_t *p_this )
theora_comment_init( &p_sys->tc ); theora_comment_init( &p_sys->tc );
/* Create and store headers */ /* Create and store headers */
p_enc->fmt_out.i_extra = 3 * 2; for( int i = 0; i < 3; i++ )
for( i = 0; i < 3; i++ )
{ {
if( i == 0 ) theora_encode_header( &p_sys->td, &header ); ogg_packet header;
else if( i == 1 ) theora_encode_comment( &p_sys->tc, &header );
else if( i == 2 ) theora_encode_tables( &p_sys->td, &header );
p_enc->fmt_out.p_extra = xrealloc( p_enc->fmt_out.p_extra, if( i == 0 )
p_enc->fmt_out.i_extra + header.bytes ); theora_encode_header( &p_sys->td, &header );
p_extra = p_enc->fmt_out.p_extra; else if( i == 1 )
p_extra += p_enc->fmt_out.i_extra + (i-3)*2; theora_encode_comment( &p_sys->tc, &header );
p_enc->fmt_out.i_extra += header.bytes; else
theora_encode_tables( &p_sys->td, &header );
*(p_extra++) = header.bytes >> 8; if( xiph_AppendHeaders( &p_enc->fmt_out.i_extra, &p_enc->fmt_out.p_extra,
*(p_extra++) = header.bytes & 0xFF; header.bytes, header.packet ) )
{
memcpy( p_extra, header.packet, header.bytes ); p_enc->fmt_out.i_extra = 0;
p_enc->fmt_out.p_extra = NULL;
}
} }
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
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