1 /*****************************************************************************
2 * video_fifo.h : FIFO for the pool of video_decoders
4 *****************************************************************************
5 *****************************************************************************
12 *****************************************************************************/
14 /*****************************************************************************
16 *****************************************************************************/
18 /* ?? move to inline functions */
19 #define VIDEO_FIFO_ISEMPTY( fifo ) ( (fifo).i_start == (fifo).i_end )
20 #define VIDEO_FIFO_ISFULL( fifo ) ( ( ( (fifo).i_end + 1 - (fifo).i_start ) \
22 #define VIDEO_FIFO_START( fifo ) ( (fifo).buffer[ (fifo).i_start ] )
23 #define VIDEO_FIFO_INCSTART( fifo ) ( (fifo).i_start = ((fifo).i_start + 1) \
25 #define VIDEO_FIFO_END( fifo ) ( (fifo).buffer[ (fifo).i_end ] )
26 #define VIDEO_FIFO_INCEND( fifo ) ( (fifo).i_end = ((fifo).i_end + 1) \
29 /*****************************************************************************
31 *****************************************************************************
32 * This rotative FIFO contains undecoded macroblocks that are to be decoded
33 *****************************************************************************/
34 typedef struct video_fifo_s
36 vlc_mutex_t lock; /* fifo data lock */
37 vlc_cond_t wait; /* fifo data conditional variable */
39 /* buffer is an array of undec_picture_t pointers */
40 macroblock_t * buffer[VFIFO_SIZE + 1];
44 struct video_parser_s * p_vpar;
47 /*****************************************************************************
49 *****************************************************************************
50 * This structure enables the parser to maintain a list of free
51 * macroblock_t structures
52 *****************************************************************************/
53 typedef struct video_buffer_s
55 vlc_mutex_t lock; /* buffer data lock */
57 macroblock_t p_macroblocks[VFIFO_SIZE + 1];
58 macroblock_t * pp_mb_free[VFIFO_SIZE+1]; /* this is a LIFO */
62 /*****************************************************************************
64 *****************************************************************************/
65 macroblock_t * vpar_GetMacroblock( video_fifo_t * p_fifo );
66 macroblock_t * vpar_NewMacroblock( video_fifo_t * p_fifo );
67 void vpar_DecodeMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb );
68 void vpar_ReleaseMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb );
69 void vpar_DestroyMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb );