* vpar_blocks.c : blocks parsing
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vpar_blocks.c,v 1.1 2001/07/16 16:39:00 massiot Exp $
+ * $Id: vpar_blocks.c,v 1.4 2001/07/18 17:05:39 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Jean-Marc Dressler <polux@via.ecp.fr>
#include "video.h"
#include "video_output.h"
-#include "video_decoder.h"
-#include "vdec_motion.h"
-
-#include "vpar_blocks.h"
-#include "vpar_headers.h"
-#include "vpar_synchro.h"
+#include "vdec_ext-plugins.h"
+#include "vpar_pool.h"
#include "video_parser.h"
-#include "video_fifo.h"
/*
* Welcome to vpar_blocks.c ! Here's where the heavy processor-critical parsing
}
/* Dual Prime Arithmetic (ISO/IEC 13818-2 section 7.6.3.6). */
+ /* FIXME */
+ intf_Msg( "Your stream uses Dual Prime Arithmetic. Please send a mail"
+ "to massiot@via.ecp.fr for debugging purposes. Thank you." );
#define i_mv_x p_mb->pppi_motion_vectors[0][0][0]
if( i_structure == FRAME_STRUCTURE )
return;
}
- if( (p_mb = vpar_NewMacroblock( &p_vpar->vfifo )) == NULL )
- {
- /* b_die == 1 */
- return;
- }
-#ifdef VDEC_SMP
- p_vpar->picture.pp_mb[i_mb_base + i_mb] = p_mb;
-#endif
+ p_mb = p_vpar->pool.pf_new_mb( &p_vpar->pool );
InitMacroblock( p_vpar, p_mb, i_coding_type, i_structure );
UpdateContext( p_vpar, i_structure );
-#ifndef VDEC_SMP
/* Decode the macroblock NOW ! */
- vpar_DecodeMacroblock ( &p_vpar->vfifo, p_mb );
-#endif
+ p_vpar->pool.pf_decode_mb( &p_vpar->pool, p_mb );
}
/*****************************************************************************
if( p_vpar->picture.b_error ) \
{ \
/* Go to the next slice. */ \
- vpar_FreeMacroblock( &p_vpar->vfifo, p_mb ); \
+ p_vpar->pool.pf_free_mb( &p_vpar->pool, p_mb ); \
return; \
}
}
/* Get a macroblock structure. */
- if( (p_mb = vpar_NewMacroblock( &p_vpar->vfifo )) == NULL )
- {
- /* b_die == 1 */
- return;
- }
-#ifdef VDEC_SMP
- p_vpar->picture.pp_mb[i_mb_base + *pi_mb_address] = p_mb;
-#endif
+ p_mb = p_vpar->pool.pf_new_mb( &p_vpar->pool );
InitMacroblock( p_vpar, p_mb, i_coding_type, i_structure );
* Effectively decode blocks.
*/
if( b_mpeg2 )
+ {
DecodeMPEG2IntraMB( p_vpar, p_mb );
+ }
else
+ {
DecodeMPEG1IntraMB( p_vpar, p_mb );
+ }
PARSEERROR
}
if( !p_vpar->picture.b_error )
{
UpdateContext( p_vpar, i_structure );
-#ifndef VDEC_SMP
+
/* Decode the macroblock NOW ! */
- vpar_DecodeMacroblock ( &p_vpar->vfifo, p_mb );
-#endif
+ p_vpar->pool.pf_decode_mb( &p_vpar->pool, p_mb );
}
else
{
/* Go to the next slice. */
- vpar_FreeMacroblock( &p_vpar->vfifo, p_mb );
+ p_vpar->pool.pf_free_mb( &p_vpar->pool, p_mb );
}
}
}
#if 0
- /* Buggy */
+ /* BUGGY */
/* Try to recover from error. If we missed less than half the
* number of macroblocks of the picture, mark the missed ones
* as skipped. */