From 667b4eb4b0f356d7ea3ac9dfce14635ab9f411d0 Mon Sep 17 00:00:00 2001 From: Christophe Massiot Date: Tue, 4 Jan 2000 15:07:23 +0000 Subject: [PATCH] Correction de 1242 fautes de frappe et includes foireux. Presque tout compile presque. --- include/vdec_idct.h | 3 ++ include/vdec_motion.h | 2 ++ include/video_decoder.h.new | 11 +++---- include/vpar_blocks.h | 6 ++-- src/video_decoder/vdec_idct.c | 10 +++++-- src/video_decoder/vdec_motion.c | 12 +++++--- src/video_decoder/video_decoder.c | 28 ++++++++++-------- src/video_parser/vpar_blocks.c | 49 ++++++++++++++++++------------- src/video_parser/vpar_headers.c | 1 + src/video_parser/vpar_motion.c | 9 ++++-- 10 files changed, 80 insertions(+), 51 deletions(-) diff --git a/include/vdec_idct.h b/include/vdec_idct.h index 97309a122c..68d10a2b70 100644 --- a/include/vdec_idct.h +++ b/include/vdec_idct.h @@ -23,3 +23,6 @@ typedef void (*f_idct_t)( elem_t*, int ); /***************************************************************************** * Prototypes *****************************************************************************/ +void vdec_DummyIDCT( elem_t*, int ); +void vdec_SparseIDCT( elem_t*, int ); +void vdec_IDCT( elem_t*, int ); diff --git a/include/vdec_motion.h b/include/vdec_motion.h index 2f1e7fc033..06ae4dcc71 100644 --- a/include/vdec_motion.h +++ b/include/vdec_motion.h @@ -23,3 +23,5 @@ typedef void (*f_chroma_motion_t)( struct macroblock_s* ); /***************************************************************************** * Prototypes *****************************************************************************/ +void vdec_MotionField( struct macroblock_s* ); +void vdec_MotionFrame( struct macroblock_s* ); diff --git a/include/video_decoder.h.new b/include/video_decoder.h.new index b4ef7b8bf8..849c7f1326 100644 --- a/include/video_decoder.h.new +++ b/include/video_decoder.h.new @@ -35,7 +35,7 @@ typedef struct vdec_thread_s /* Input properties */ - struct video_parser_s * p_vpar; /* video_parser thread */ + struct vpar_thread_s * p_vpar; /* video_parser thread */ #ifdef STATS /* Statistics */ @@ -64,9 +64,6 @@ struct vpar_thread_s; /* Thread management functions */ vdec_thread_t * vdec_CreateThread ( struct vpar_thread_s *p_vpar /*, int *pi_status */ ); void vdec_DestroyThread ( vdec_thread_t *p_vdec /*, int *pi_status */ ); - -/* Time management functions */ -/* ?? */ - -/* Dynamic thread settings */ -/* ?? */ +void vdec_AddBlock( elem_t*, data_t*, int ); +void vdec_CopyBlock( elem_t*, data_t*, int ); +void vdec_DummyBlock( elem_t*, data_t*, int ); diff --git a/include/vpar_blocks.h b/include/vpar_blocks.h index 470503312d..43f3f91861 100644 --- a/include/vpar_blocks.h +++ b/include/vpar_blocks.h @@ -81,9 +81,9 @@ typedef struct /***************************************************************************** * Prototypes *****************************************************************************/ -void vpar_CodedPattern420( struct vpar_thread_s* p_vpar ); -void vpar_CodedPattern422( struct vpar_thread_s* p_vpar ); -void vpar_CodedPattern444( struct vpar_thread_s* p_vpar ); +int vpar_CodedPattern420( struct vpar_thread_s* p_vpar ); +int vpar_CodedPattern422( struct vpar_thread_s* p_vpar ); +int vpar_CodedPattern444( struct vpar_thread_s* p_vpar ); int vpar_IMBType( struct vpar_thread_s* p_vpar ); int vpar_PMBType( struct vpar_thread_s* p_vpar ); int vpar_BMBType( struct vpar_thread_s* p_vpar ); diff --git a/src/video_decoder/vdec_idct.c b/src/video_decoder/vdec_idct.c index 7128eb6c1f..5dbdd9ac06 100644 --- a/src/video_decoder/vdec_idct.c +++ b/src/video_decoder/vdec_idct.c @@ -28,11 +28,15 @@ #include "decoder_fifo.h" #include "video.h" #include "video_output.h" -#include "video_parser.h" -#include "undec_picture.h" -#include "video_fifo.h" +#include "vdec_idct.h" #include "video_decoder.h" +#include "vdec_motion.h" + +#include "vpar_blocks.h" +#include "vpar_headers.h" +#include "video_fifo.h" +#include "video_parser.h" /* * Local prototypes diff --git a/src/video_decoder/vdec_motion.c b/src/video_decoder/vdec_motion.c index 87f7dad82e..b549169cbb 100644 --- a/src/video_decoder/vdec_motion.c +++ b/src/video_decoder/vdec_motion.c @@ -28,17 +28,21 @@ #include "decoder_fifo.h" #include "video.h" #include "video_output.h" -#include "video_parser.h" -#include "undec_picture.h" -#include "video_fifo.h" +#include "vdec_idct.h" #include "video_decoder.h" +#include "vdec_motion.h" + +#include "vpar_blocks.h" +#include "vpar_headers.h" +#include "video_fifo.h" +#include "video_parser.h" /* * Local prototypes */ -typedef (void *) f_motion_c_t( coeff_t *, pel_lookup_table_t *, +typedef void (*f_motion_c_t)( coeff_t *, pel_lookup_table_t *, int, coeff_t *, int, int, int, int, int, int, int ); diff --git a/src/video_decoder/video_decoder.c b/src/video_decoder/video_decoder.c index ff0328e0ad..7babd09484 100644 --- a/src/video_decoder/video_decoder.c +++ b/src/video_decoder/video_decoder.c @@ -30,11 +30,15 @@ #include "decoder_fifo.h" #include "video.h" #include "video_output.h" -#include "video_parser.h" -#include "undec_picture.h" -#include "video_fifo.h" +#include "vdec_idct.h" #include "video_decoder.h" +#include "vdec_motion.h" + +#include "vpar_blocks.h" +#include "vpar_headers.h" +#include "video_fifo.h" +#include "video_parser.h" /* * Local prototypes @@ -167,7 +171,7 @@ static void RunThread( vdec_thread_t *p_vdec ) { macroblock_t * p_mb; - if( (p_mb = GetMacroblock( &p_vdec->p_vpar.vfifo )) != NULL ) + if( (p_mb = vpar_GetMacroblock( &p_vdec->p_vpar->vfifo )) != NULL ) { DecodeMacroblock( p_vdec, p_mb ); } @@ -195,13 +199,13 @@ static void RunThread( vdec_thread_t *p_vdec ) *******************************************************************************/ static void ErrorThread( vdec_thread_t *p_vdec ) { - undec_picture_t * p_undec_p; + macroblock_t * p_mb; /* Wait until a `die' order */ while( !p_vdec->b_die ) { - p_undec_p = GetPicture( p_vdec->p_vpar.vfifo ); - DestroyPicture( p_vdec->p_vpar.vfifo, p_undec_p ); + p_mb = vpar_GetMacroblock( &p_vdec->p_vpar->vfifo ); + vpar_DestroyMacroblock( &p_vdec->p_vpar->vfifo, p_mb ); /* Sleep a while */ msleep( VDEC_IDLE_SLEEP ); @@ -237,12 +241,12 @@ static void DecodeMacroblock( vdec_thread_t *p_vdec, macroblock_t * p_mb ) /* * Inverse DCT (ISO/IEC 13818-2 section Annex A) */ - (*p_mb->pf_idct[i_b])( p_mb, p_mb->ppi_blocks[i_b], p_mb->pi_sparse_pos[i_b] ); + (p_mb->pf_idct[i_b])( p_mb->ppi_blocks[i_b], p_mb->pi_sparse_pos[i_b] ); /* * Adding prediction and coefficient data (ISO/IEC 13818-2 section 7.6.8) */ - (*p_mb->pf_addb[i_b])( p_mb->ppi_blocks[i_b], + (p_mb->pf_addb[i_b])( p_mb->ppi_blocks[i_b], p_mb->p_data[i_b], p_mb->i_lum_incr ); } @@ -252,12 +256,12 @@ static void DecodeMacroblock( vdec_thread_t *p_vdec, macroblock_t * p_mb ) /* * Inverse DCT (ISO/IEC 13818-2 section Annex A) */ - (*p_mb->pf_idct[i_b])( p_mb, p_mb->ppi_blocks[i_b], p_mb->pi_sparse_pos[i_b] ); + (p_mb->pf_idct[i_b])( p_mb->ppi_blocks[i_b], p_mb->pi_sparse_pos[i_b] ); /* * Adding prediction and coefficient data (ISO/IEC 13818-2 section 7.6.8) */ - (*p_mb->pf_addb[i_b])( p_mb->ppi_blocks[i_b], + (p_mb->pf_addb[i_b])( p_mb->ppi_blocks[i_b], p_mb->p_data[i_b], p_mb->i_chroma_incr ); } @@ -265,7 +269,7 @@ static void DecodeMacroblock( vdec_thread_t *p_vdec, macroblock_t * p_mb ) * Decoding is finished, release the macroblock and free * unneeded memory. */ - vpar_ReleaseMacroblock( &p_vdec->p_vpar.vfifo, p_mb ); + vpar_ReleaseMacroblock( &p_vdec->p_vpar->vfifo, p_mb ); } /******************************************************************************* diff --git a/src/video_parser/vpar_blocks.c b/src/video_parser/vpar_blocks.c index 1a2ebbd437..f1b89d7488 100644 --- a/src/video_parser/vpar_blocks.c +++ b/src/video_parser/vpar_blocks.c @@ -28,10 +28,15 @@ #include "decoder_fifo.h" #include "video.h" #include "video_output.h" -#include "video_parser.h" -#include "video_fifo.h" +#include "vdec_idct.h" #include "video_decoder.h" +#include "vdec_motion.h" + +#include "vpar_blocks.h" +#include "vpar_headers.h" +#include "video_fifo.h" +#include "video_parser.h" /* * Local prototypes @@ -41,8 +46,12 @@ static __inline__ void InitMacroblock( vpar_thread_t * p_vpar, static __inline__ int MacroblockAddressIncrement( vpar_thread_t * p_vpar ); static __inline__ void MacroblockModes( vpar_thread_t * p_vpar, macroblock_t * p_mb ); +static void vpar_DecodeMPEG1Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ); +static void vpar_DecodeMPEG1Intra( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ); +static void vpar_DecodeMPEG2Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ); +static void vpar_DecodeMPEG2Intra( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ); -typedef (void *) f_decode_block_t( vpar_thread_t *, macroblock_t *, int ); +typedef void (*f_decode_block_t)( vpar_thread_t *, macroblock_t *, int ); /***************************************************************************** * vpar_ParseMacroblock : Parse the next macroblock @@ -66,8 +75,8 @@ void vpar_ParseMacroblock( vpar_thread_t * p_vpar, int * pi_mb_address, vdec_MotionField, vdec_MotionFrame}; /* Reset DC predictors (7.2.1). */ - p_vpar->slice.pi_dct_pred[0] = p_vpar->slice.pi_dct_pred[1] - = p_vpar->slice.pi_dct_pred[2] + p_vpar->slice.pi_dc_dct_pred[0] = p_vpar->slice.pi_dc_dct_pred[1] + = p_vpar->slice.pi_dc_dct_pred[2] = pi_dc_dct_reinit[p_vpar->picture.i_intra_dc_precision]; if( p_vpar->picture.i_coding_type == P_CODING_TYPE ) @@ -79,7 +88,7 @@ void vpar_ParseMacroblock( vpar_thread_t * p_vpar, int * pi_mb_address, if( (p_mb = p_vpar->picture.pp_mb[i_mb_base + i_mb] = vpar_NewMacroblock( &p_vpar->vfifo )) == NULL ) { - p_vpar->picture.b_error = TRUE; + p_vpar->picture.b_error = 1; intf_ErrMsg("vpar error: macroblock list is empty !"); return; } @@ -104,7 +113,7 @@ void vpar_ParseMacroblock( vpar_thread_t * p_vpar, int * pi_mb_address, if( (p_mb = p_vpar->picture.pp_mb[i_mb_base + *pi_mb_address] = vpar_NewMacroblock( &p_vpar->vfifo )) == NULL ) { - p_vpar->picture.b_error = TRUE; + p_vpar->picture.b_error = 1; intf_ErrMsg("vpar error: macroblock list is empty !"); return; } @@ -196,7 +205,7 @@ void vpar_ParseMacroblock( vpar_thread_t * p_vpar, int * pi_mb_address, /* Calculate block coordinates. */ p_mb->p_data[i_b] = pi_data[i_b] + pi_pos[i_b >> 2] + pi_y[i_b]*pi_width[i_b >> 2] - + (p_vpar->mb.b_dct_type & ((i_b & 2) >> 1)) + + (p_vpar->mb.b_dct_type & ((i_b & 2) >> 1)); /* INACHEVÉ parce que trop pourri ! */ } else @@ -212,8 +221,8 @@ void vpar_ParseMacroblock( vpar_thread_t * p_vpar, int * pi_mb_address, static int pi_dc_dct_reinit[4] = {128,256,512,1024}; /* Reset DC predictors (7.2.1). */ - p_vpar->slice.pi_dct_pred[0] = p_vpar->slice.pi_dct_pred[1] - = p_vpar->slice.pi_dct_pred[2] + p_vpar->slice.pi_dc_dct_pred[0] = p_vpar->slice.pi_dc_dct_pred[1] + = p_vpar->slice.pi_dc_dct_pred[2] = pi_dc_dct_reinit[p_vpar->picture.i_intra_dc_precision]; } else if( !p_vpar->picture.b_concealment_mv ) @@ -271,14 +280,14 @@ static __inline__ void MacroblockModes( vpar_thread_t * p_vpar, static int ppi_mv_format[2][4] = { {0, 1, 1, 1}, {0, 1, 2, 1} }; /* Get macroblock_type. */ - p_vpar->mb.i_mb_type = (*p_vpar->picture.pf_macroblock_type) + p_vpar->mb.i_mb_type = (p_vpar->picture.pf_macroblock_type) ( vpar_thread_t * p_vpar ); /* SCALABILITY : warning, we don't know if spatial_temporal_weight_code * has to be dropped, take care if you use scalable streams. */ /* DumpBits( &p_vpar->bit_stream, 2 ); */ - if( !(p_vpar->mb.i_mb_type & (MB_MOTION_FORWARD | MB_MOTION_BACKWARD)) + if( !(p_vpar->mb.i_mb_type & (MB_MOTION_FORWARD || MB_MOTION_BACKWARD)) || p_vpar->picture.b_frame_pred_frame_dct ) { /* If mb_type has neither MOTION_FORWARD nor MOTION_BACKWARD, this @@ -290,7 +299,7 @@ static __inline__ void MacroblockModes( vpar_thread_t * p_vpar, p_vpar->mb.i_motion_type = GetBits( &p_vpar->bit_stream, 2 ); } - p_mb->f_motion = pf_motion[p_vpar->picture.b_frame_structure] + p_mb->pf_motion = pf_motion[p_vpar->picture.b_frame_structure] [p_vpar->mb.i_motion_type]; p_vpar->mb.i_mv_count = ppi_mv_count[p_vpar->picture.b_frame_structure] [p_vpar->mb.i_motion_type]; @@ -299,7 +308,7 @@ static __inline__ void MacroblockModes( vpar_thread_t * p_vpar, if( (p_vpar->picture.i_structure == FRAME_STRUCTURE) && (!p_vpar->picture.b_frame_pred_frame_dct) && - (p_var->mb.i_mb_type & (MB_PATTERN|MB_INTRA)) ) + (p_vpar->mb.i_mb_type & (MB_PATTERN|MB_INTRA)) ) { p_vpar->mb.b_dct_type = GetBits( &p_vpar->bit_stream, 1 ); } @@ -368,7 +377,7 @@ int vpar_CodedPattern444( vpar_thread_t * p_vpar ) /***************************************************************************** * vpar_DecodeMPEG1Non : decode MPEG-1 non-intra blocks *****************************************************************************/ -void vpar_DecodeMPEG1Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) +static void vpar_DecodeMPEG1Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) { /* À pomper dans Berkeley. Pour toutes ces fonctions, il faut mettre p_mb->pf_idct[i_b] à : @@ -381,14 +390,14 @@ void vpar_DecodeMPEG1Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) { /* Remove end_of_macroblock (always 1, prevents startcode emulation) * ISO/IEC 11172-2 section 2.4.2.7 and 2.4.3.6 */ - DumpBits( &p_vpar->fifo, 1 ); + DumpBits( &p_vpar->bit_stream, 1 ); } } /***************************************************************************** * vpar_DecodeMPEG1Intra : decode MPEG-1 intra blocks *****************************************************************************/ -void vpar_DecodeMPEG1Intra( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) +static void vpar_DecodeMPEG1Intra( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) { /* À pomper dans Berkeley. */ @@ -396,14 +405,14 @@ void vpar_DecodeMPEG1Intra( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b { /* Remove end_of_macroblock (always 1, prevents startcode emulation) * ISO/IEC 11172-2 section 2.4.2.7 and 2.4.3.6 */ - DumpBits( &p_vpar->fifo, 1 ); + DumpBits( &p_vpar->bit_stream, 1 ); } } /***************************************************************************** * vpar_DecodeMPEG2Non : decode MPEG-2 non-intra blocks *****************************************************************************/ -void vpar_DecodeMPEG2Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) +static void vpar_DecodeMPEG2Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) { /* À pomper dans Berkeley. Bien sûr les matrices seront différentes... */ } @@ -411,7 +420,7 @@ void vpar_DecodeMPEG2Non( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) /***************************************************************************** * vpar_DecodeMPEG2Intra : decode MPEG-2 intra blocks *****************************************************************************/ -void vpar_DecodeMPEG2Intra( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) +static void vpar_DecodeMPEG2Intra( vpar_thread_t * p_vpar, macroblock_t * p_mb, int i_b ) { /* À pomper dans Berkeley. */ } diff --git a/src/video_parser/vpar_headers.c b/src/video_parser/vpar_headers.c index fbd26a5a11..21afebbfd2 100644 --- a/src/video_parser/vpar_headers.c +++ b/src/video_parser/vpar_headers.c @@ -543,6 +543,7 @@ static void PictureHeader( vpar_thread_t * p_vpar ) else if( p_vpar->picture.i_current_structure == FRAME_STRUCTURE ) { /* Frame completely parsed. */ + P_picture.i_deccount = p_vpar->sequence.i_mb_size; for( i_mb = 0; i_mb < p_vpar->sequence.i_mb_size; i_mb++ ) { vpar_DecodeMacroblock( &p_vpar->vfifo, p_vpar->picture.pp_mb[i_mb] ); diff --git a/src/video_parser/vpar_motion.c b/src/video_parser/vpar_motion.c index 7f9443dcda..8e9277c3db 100644 --- a/src/video_parser/vpar_motion.c +++ b/src/video_parser/vpar_motion.c @@ -28,10 +28,15 @@ #include "decoder_fifo.h" #include "video.h" #include "video_output.h" -#include "video_parser.h" -#include "video_fifo.h" +#include "vdec_idct.h" #include "video_decoder.h" +#include "vdec_motion.h" + +#include "vpar_blocks.h" +#include "vpar_headers.h" +#include "video_fifo.h" +#include "video_parser.h" /* * Local prototypes