* video_parser.h : video parser thread
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
+ * $Id: video_parser.h,v 1.35 2001/05/30 17:03:11 sam Exp $
*
- * Authors:
+ * Authors: Christophe Massiot <massiot@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
*****************************************************************************/
typedef struct vpar_thread_s
{
+ bit_stream_t bit_stream;
+
/* Thread properties and locks */
- boolean_t b_die; /* `die' flag */
- boolean_t b_run; /* `run' flag */
- boolean_t b_error; /* `error' flag */
- boolean_t b_active; /* `active' flag */
vlc_thread_t thread_id; /* id for thread functions */
/* Thread configuration */
/* Input properties */
- decoder_fifo_t fifo; /* PES input fifo */
-
- /* The bit stream structure handles the PES stream at the bit level */
- bit_stream_t bit_stream;
+ decoder_fifo_t * p_fifo; /* PES input fifo */
+ vdec_config_t * p_config;
/* Output properties */
vout_thread_t * p_vout; /* video output thread */
video_synchro_t synchro;
/* Lookup tables */
-#ifdef MPEG2_COMPLIANT
- s16 pi_crop_buf[8192];
- s16 * pi_crop;
-#endif
lookup_t pl_mb_addr_inc[2048]; /* for macroblock
address increment */
/* tables for macroblock types 0=P 1=B */
lookup_t * pl_coded_pattern;
/* variable length codes for the structure dct_dc_size for intra blocks */
lookup_t * pppl_dct_dc_size[2][2];
- /* Structure to store the tables B14 & B15 (ISO/CEI 13818-2 B.4) */
- dct_lookup_t ppl_dct_coef[2][16384];
-
-
+ /* Structure to store the tables B14 & B15 (ISO/IEC 13818-2 B.4) */
+ dct_lookup_t ppl_dct_coef[2][16384];
+ /* Scan table */
+ u8 ppi_scan[2][64];
+ /* Default quantization matrices */
+ u8 pi_default_intra_quant[64];
+ u8 pi_default_nonintra_quant[64];
+
+ /* Motion compensation plugin used and shortcuts */
+ struct module_s * p_motion_module;
+ void ( * pppf_motion[4][2][4] ) ( struct macroblock_s * );
+ void ( * ppf_motion_skipped[4][4] ) ( struct macroblock_s * );
+
+ /* IDCT plugin used and shortcuts to access its capabilities */
+ struct module_s * p_idct_module;
+ void ( * pf_idct_init ) ( struct vdec_thread_s * );
+ void ( * pf_sparse_idct ) ( struct vdec_thread_s *, dctelem_t*, int );
+ void ( * pf_idct ) ( struct vdec_thread_s *, dctelem_t*, int );
+ void ( * pf_norm_scan ) ( u8 ppi_scan[2][64] );
+ void ( * pf_decode_init ) ( struct vdec_thread_s * );
+ void ( * pf_decode_mb_c ) ( struct vdec_thread_s *, struct macroblock_s * );
+ void ( * pf_decode_mb_bw )( struct vdec_thread_s *, struct macroblock_s * );
#ifdef STATS
/* Statistics */
count_t c_loops; /* number of loops */
- count_t c_idle_loops; /* number of idle loops */
count_t c_sequences; /* number of sequences */
- count_t c_pictures; /* number of pictures read */
- count_t c_i_pictures; /* number of I pictures read */
- count_t c_p_pictures; /* number of P pictures read */
- count_t c_b_pictures; /* number of B pictures read */
- count_t c_decoded_pictures; /* number of pictures decoded */
- count_t c_decoded_i_pictures; /* number of I pictures decoded */
- count_t c_decoded_p_pictures; /* number of P pictures decoded */
- count_t c_decoded_b_pictures; /* number of B pictures decoded */
+ count_t pc_pictures[4]; /* number of (coding_type) pictures read */
+ count_t pc_decoded_pictures[4]; /* number of (coding_type)
+ * pictures decoded */
+ count_t pc_malformed_pictures[4]; /* number of pictures trashed
+ * during parsing */
#endif
} vpar_thread_t;
*****************************************************************************/
/* Thread management functions */
-vpar_thread_t * vpar_CreateThread ( /* video_cfg_t *p_cfg, */ input_thread_t *p_input /*,
- vout_thread_t *p_vout, int *pi_status */ );
-void vpar_DestroyThread ( vpar_thread_t *p_vpar /*, int *pi_status */ );
-
-/* Time management functions */
-/* XXX?? */
-
-/* Dynamic thread settings */
-/* XXX?? */
-
+vlc_thread_t vpar_CreateThread ( vdec_config_t * );
/*****************************************************************************
* NextStartCode : Find the next start code
*****************************************************************************/
-static __inline__ void NextStartCode( vpar_thread_t * p_vpar )
+static __inline__ void NextStartCode( bit_stream_t * p_bit_stream )
{
/* Re-align the buffer on an 8-bit boundary */
- RealignBits( &p_vpar->bit_stream );
+ RealignBits( p_bit_stream );
- while( ShowBits( &p_vpar->bit_stream, 24 ) != 0x01L && !p_vpar->b_die )
+ while( ShowBits( p_bit_stream, 24 ) != 0x01L
+ && !p_bit_stream->p_decoder_fifo->b_die )
{
- RemoveBits( &p_vpar->bit_stream, 8 );
+ RemoveBits( p_bit_stream, 8 );
}
}