* vpar_headers.c : headers parsing
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: headers.c,v 1.5 2002/11/20 13:37:35 sam Exp $
+ * $Id: headers.c,v 1.9 2003/01/30 02:16:09 gbazin Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Stéphane Borel <stef@via.ecp.fr>
int i_aspect;
- vout_thread_t *p_vout;
-
p_vpar->sequence.i_width = GetBits( &p_vpar->bit_stream, 12 );
p_vpar->sequence.i_height = GetBits( &p_vpar->bit_stream, 12 );
i_aspect = GetBits( &p_vpar->bit_stream, 4 );
/* Spawn a video output if there is none. First we look for our children,
* then we look for any other vout that might be available. */
- p_vout = vlc_object_find( p_vpar->p_fifo, VLC_OBJECT_VOUT, FIND_CHILD );
- if( p_vout == NULL )
- {
- p_vout = vlc_object_find( p_vpar->p_fifo, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- }
-
- if( p_vout )
- {
- if( p_vout->render.i_width != p_vpar->sequence.i_width
- || p_vout->render.i_height != p_vpar->sequence.i_height
- || p_vout->render.i_chroma != ChromaToFourCC( p_vpar->sequence.i_chroma_format )
- || p_vout->render.i_aspect != p_vpar->sequence.i_aspect )
- {
- /* We are not interested in this format, close this vout */
- vlc_object_detach( p_vout );
- vlc_object_release( p_vout );
- vout_DestroyThread( p_vout );
- p_vout = NULL;
- }
- else
- {
- /* This video output is cool! Hijack it. */
- if( p_vout != p_vpar->p_vout )
- {
- vlc_object_detach( p_vout );
- vlc_object_attach( p_vout, p_vpar->p_fifo );
- }
- vlc_object_release( p_vout );
- }
- }
-
- p_vpar->p_vout = p_vout;
+ p_vpar->p_vout =
+ vout_Request( p_vpar->p_fifo, p_vpar->p_vout,
+ p_vpar->sequence.i_width, p_vpar->sequence.i_height,
+ ChromaToFourCC( p_vpar->sequence.i_chroma_format ),
+ p_vpar->sequence.i_aspect );
if( p_vpar->p_fifo->b_die || p_vpar->p_fifo->b_error )
{
if( p_vpar->p_vout == NULL )
{
- msg_Dbg( p_vpar->p_fifo, "no vout present, spawning one" );
-
- p_vpar->p_vout = vout_CreateThread( p_vpar->p_fifo,
- p_vpar->sequence.i_width,
- p_vpar->sequence.i_height,
- ChromaToFourCC( p_vpar->sequence.i_chroma_format ),
- p_vpar->sequence.i_aspect );
-
- /* Everything failed */
- if( p_vpar->p_vout == NULL )
- {
- msg_Err( p_vpar->p_fifo, "cannot open vout, aborting" );
- p_vpar->p_fifo->b_error = 1;
- return;
- }
+ msg_Err( p_vpar->p_fifo, "cannot open vout, aborting" );
+ p_vpar->p_fifo->b_error = 1;
+ return;
}
}
p_vpar->picture.b_progressive = 1;
}
+ p_vpar->picture.b_frame_structure = (i_structure == FRAME_STRUCTURE);
+
/* Extension and User data. */
ExtensionAndUserData( p_vpar );
#define P_picture p_vpar->picture.p_picture
p_vpar->picture.b_error = 0;
- p_vpar->picture.b_frame_structure = (i_structure == FRAME_STRUCTURE);
if( !p_vpar->picture.i_current_structure )
{
int i_nb, i_dummy;
/* I am not sure it works but it should
(fewer tests than shown in §6.3.12) */
+ /* FIXME: is VLC_TRUE always 1 ? */
i_nb = p_vpar->sequence.b_progressive ? p_vpar->sequence.b_progressive +
p_vpar->picture.b_repeat_first_field +
p_vpar->picture.b_top_field_first
: ( p_vpar->picture.b_frame_structure + 1 ) +
p_vpar->picture.b_repeat_first_field;
- for( i_dummy = 0; i_dummy < i_nb; i_dummy++ )
+ for( i_dummy = 0; i_dummy < i_nb && !p_vpar->p_fifo->b_die
+ && !p_vpar->p_fifo->b_error; i_dummy++ )
{
RemoveBits( &p_vpar->bit_stream, 17 );
RemoveBits( &p_vpar->bit_stream, 17 );