* $Id$
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
- * Gildas Bazin <gbazin@netcourrier.com>
+ * Gildas Bazin <gbazin@videolan.org>
* Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
}
else
{
- if( p_dec->b_error || p_block->i_buffer <= 0 )
+ if( p_dec->b_error || (p_block && p_block->i_buffer <= 0) )
{
- block_Release( p_block );
+ if( p_block ) block_Release( p_block );
}
else
{
*/
static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
{
- if( p_block->i_buffer <= 0 )
+ int i_rate = p_block ? p_block->i_rate : 1000;
+
+ if( p_block && p_block->i_buffer <= 0 )
{
block_Release( p_block );
return VLC_SUCCESS;
{
block_t *p_sout_block;
- while( (p_sout_block = p_dec->pf_packetize( p_dec, &p_block )) )
+ while( ( p_sout_block =
+ p_dec->pf_packetize( p_dec, p_block ? &p_block : 0 ) ) )
{
if( !p_dec->p_owner->p_sout_input )
{
es_format_Copy( &p_dec->p_owner->sout, &p_dec->fmt_out );
- p_dec->p_owner->sout.i_group =p_dec->fmt_in.i_group;
+ p_dec->p_owner->sout.i_group = p_dec->fmt_in.i_group;
p_dec->p_owner->sout.i_id = p_dec->fmt_in.i_id;
if( p_dec->fmt_in.psz_language )
{
while( p_sout_block )
{
- block_t *p_next = p_sout_block->p_next;
+ block_t *p_next = p_sout_block->p_next;
p_sout_block->p_next = NULL;
+ p_sout_block->i_rate = i_rate;
sout_InputSendBuffer( p_dec->p_owner->p_sout_input,
p_sout_block );
{
block_t *p_next = p_packetized_block->p_next;
p_packetized_block->p_next = NULL;
+ p_packetized_block->i_rate = i_rate;
while( (p_aout_buf = p_dec->pf_decode_audio( p_dec,
&p_packetized_block )) )
{
block_t *p_next = p_packetized_block->p_next;
p_packetized_block->p_next = NULL;
+ p_packetized_block->i_rate = i_rate;
while( (p_pic = p_dec->pf_decode_video( p_dec,
&p_packetized_block )) )
*/
static void DeleteDecoder( decoder_t * p_dec )
{
- vlc_object_detach( p_dec );
-
msg_Dbg( p_dec, "killing decoder fourcc `%4.4s', %d PES in FIFO",
(char*)&p_dec->fmt_in.i_codec,
p_dec->p_owner->p_fifo->i_depth );
block_FifoEmpty( p_dec->p_owner->p_fifo );
block_FifoRelease( p_dec->p_owner->p_fifo );
- /* Cleanup */
+ /* Cleanup */
if( p_dec->p_owner->p_aout_input )
aout_DecDelete( p_dec->p_owner->p_aout, p_dec->p_owner->p_aout_input );
vlc_object_destroy( p_dec->p_owner->p_packetizer );
}
+ vlc_object_detach( p_dec );
+
free( p_dec->p_owner );
}
p_dec->b_error = VLC_TRUE;
return NULL;
}
+
+ if( p_sys->video.i_rmask )
+ p_sys->p_vout->render.i_rmask = p_sys->video.i_rmask;
+ if( p_sys->video.i_gmask )
+ p_sys->p_vout->render.i_gmask = p_sys->video.i_gmask;
+ if( p_sys->video.i_bmask )
+ p_sys->p_vout->render.i_bmask = p_sys->video.i_bmask;
}
/* Get a new picture */