Commit 2d79bfcb authored by Christophe Massiot's avatar Christophe Massiot

Hidden gory buffer management details in a private section of data_packet_t.

parent 9ecb59ab
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_ext-dec.h: structures exported to the VideoLAN decoders * input_ext-dec.h: structures exported to the VideoLAN decoders
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: input_ext-dec.h,v 1.47 2001/12/27 03:47:08 massiot Exp $ * $Id: input_ext-dec.h,v 1.48 2001/12/29 03:07:51 massiot Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Michel Kaempf <maxx@via.ecp.fr> * Michel Kaempf <maxx@via.ecp.fr>
...@@ -40,21 +40,25 @@ ...@@ -40,21 +40,25 @@
***************************************************************************** *****************************************************************************
* Describe a data packet. * Describe a data packet.
*****************************************************************************/ *****************************************************************************/
#define DATA_PACKET \
/* start of the PS or TS packet */ \
byte_t * p_demux_start; \
/* start of the PES payload in this packet */ \
byte_t * p_payload_start; \
byte_t * p_payload_end; /* guess ? :-) */ \
/* is the packet messed up ? */ \
boolean_t b_discard_payload;
typedef struct data_packet_s typedef struct data_packet_s
{ {
/* Decoders information */ /* Used to chain the packets that carry data for a same PES or PSI */
byte_t * p_demux_start; /* start of the PS or TS packet */
byte_t * p_payload_start;
/* start of the PES payload in this packet */
byte_t * p_payload_end; /* guess ? :-) */
boolean_t b_discard_payload; /* is the packet messed up ? */
/* Used to chain the TS packets that carry data for a same PES or PSI */
struct data_packet_s * p_next; struct data_packet_s * p_next;
/* Buffer manager information */ DATA_PACKET
byte_t * p_buffer; /* raw data packet */
unsigned int i_size; /* buffer size */ /* Please note that at least one buffer allocator (in particular, the
* Next Generation Buffer Allocator) extends this structure with
* private data after DATA_PACKET. */
} data_packet_t; } data_packet_t;
/***************************************************************************** /*****************************************************************************
...@@ -65,6 +69,9 @@ typedef struct data_packet_s ...@@ -65,6 +69,9 @@ typedef struct data_packet_s
*****************************************************************************/ *****************************************************************************/
typedef struct pes_packet_s typedef struct pes_packet_s
{ {
/* Chained list to the next PES packet (depending on the context) */
struct pes_packet_s * p_next;
/* PES properties */ /* PES properties */
boolean_t b_data_alignment; /* used to find the beginning of boolean_t b_data_alignment; /* used to find the beginning of
* a video or audio unit */ * a video or audio unit */
...@@ -76,18 +83,15 @@ typedef struct pes_packet_s ...@@ -76,18 +83,15 @@ typedef struct pes_packet_s
int i_rate; /* current pace of reading int i_rate; /* current pace of reading
* (see stream_control.h) */ * (see stream_control.h) */
int i_pes_size; /* size of the current PES packet */ unsigned int i_pes_size; /* size of the current PES packet */
/* Chained list to packets */ /* Chained list to packets */
data_packet_t * p_first; /* The first packet contained by this data_packet_t * p_first; /* The first packet contained by this
* PES (used by decoders). */ * PES (used by decoders). */
data_packet_t * p_last; /* The last packet contained by this data_packet_t * p_last; /* The last packet contained by this
PES (used by the buffer allocator) */ PES (used by the buffer allocator) */
int i_nb_data; /* Number of data packets in the chained unsigned int i_nb_data; /* Number of data packets in the chained
list */ list */
/* Chained list used by the input buffers manager */
struct pes_packet_s * p_next;
} pes_packet_t; } pes_packet_t;
/***************************************************************************** /*****************************************************************************
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* but exported to plug-ins * but exported to plug-ins
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: input_ext-plugins.h,v 1.13 2001/12/27 03:47:08 massiot Exp $ * $Id: input_ext-plugins.h,v 1.14 2001/12/29 03:07:51 massiot Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -149,9 +149,9 @@ static __inline__ void input_NullPacket( input_thread_t * p_input, ...@@ -149,9 +149,9 @@ static __inline__ void input_NullPacket( input_thread_t * p_input,
#define BUFFERS_UNIQUE_SIZE 1 /* Only with NB_LIFO == 1 */ #define BUFFERS_UNIQUE_SIZE 1 /* Only with NB_LIFO == 1 */
/***************************************************************************** /*****************************************************************************
* input_buffers_t: defines a LIFO per data type to keep * _input_buffers_t: defines a LIFO per data type to keep
*****************************************************************************/ *****************************************************************************/
#define PACKETS_LIFO( TYPE, NAME ) \ #define PACKETS_LIFO( TYPE, NAME ) \
struct \ struct \
{ \ { \
TYPE * p_stack; \ TYPE * p_stack; \
...@@ -167,31 +167,56 @@ struct \ ...@@ -167,31 +167,56 @@ struct \
} NAME; } NAME;
#define DECLARE_BUFFERS_EMBEDDED( FLAGS, NB_LIFO ) \ #define DECLARE_BUFFERS_EMBEDDED( FLAGS, NB_LIFO ) \
typedef struct input_buffers_s \ typedef struct _input_buffers_s \
{ \ { \
vlc_mutex_t lock; \ vlc_mutex_t lock; \
PACKETS_LIFO( pes_packet_t, pes ) \ PACKETS_LIFO( pes_packet_t, pes ) \
BUFFERS_LIFO( data_packet_t, data[NB_LIFO] ) \ BUFFERS_LIFO( _data_packet_t, data[NB_LIFO] ) \
size_t i_allocated; \ size_t i_allocated; \
} input_buffers_t; } _input_buffers_t;
#define DECLARE_BUFFERS_SHARED( FLAGS, NB_LIFO ) \ #define DECLARE_BUFFERS_SHARED( FLAGS, NB_LIFO ) \
typedef struct input_buffers_s \ typedef struct _input_buffers_s \
{ \ { \
vlc_mutex_t lock; \ vlc_mutex_t lock; \
PACKETS_LIFO( pes_packet_t, pes ) \ PACKETS_LIFO( pes_packet_t, pes ) \
PACKETS_LIFO( data_packet_t, data ) \ PACKETS_LIFO( _data_packet_t, data ) \
BUFFERS_LIFO( _data_buffer_t, buffers[NB_LIFO] ) \ BUFFERS_LIFO( _data_buffer_t, buffers[NB_LIFO] ) \
size_t i_allocated; \ size_t i_allocated; \
} input_buffers_t; } _input_buffers_t;
/* Data buffer, used in case the buffer can be shared between several data
* packets */
typedef struct _data_buffer_s typedef struct _data_buffer_s
{ {
int i_refcount;
unsigned int i_size;
struct _data_buffer_s * p_next; struct _data_buffer_s * p_next;
/* number of data packets this buffer is referenced from - when it falls
* down to 0, the buffer is freed */
int i_refcount;
struct /* for compatibility with _data_packet_t */
{
/* size of the current buffer (starting right thereafter) */
unsigned int i_size;
} _private;
} _data_buffer_t; } _data_buffer_t;
/* We overload the data_packet_t type to add private members */
typedef struct _data_packet_s
{
struct _data_packet_s * p_next;
DATA_PACKET
union
{
struct _data_buffer_s * p_buffer; /* in case of shared buffers */
/* size of the embedded buffer (starting right thereafter) */
unsigned int i_size;
} _private;
} _data_packet_t;
/***************************************************************************** /*****************************************************************************
* input_BuffersInit: initialize the cache structures, return a pointer to it * input_BuffersInit: initialize the cache structures, return a pointer to it
...@@ -199,14 +224,14 @@ typedef struct _data_buffer_s ...@@ -199,14 +224,14 @@ typedef struct _data_buffer_s
#define DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO ) \ #define DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO ) \
static void * input_BuffersInit( void ) \ static void * input_BuffersInit( void ) \
{ \ { \
input_buffers_t * p_buffers = malloc( sizeof( input_buffers_t ) ); \ _input_buffers_t * p_buffers = malloc( sizeof( _input_buffers_t ) ); \
\ \
if( p_buffers == NULL ) \ if( p_buffers == NULL ) \
{ \ { \
return( NULL ); \ return( NULL ); \
} \ } \
\ \
memset( p_buffers, 0, sizeof( input_buffers_t ) ); \ memset( p_buffers, 0, sizeof( _input_buffers_t ) ); \
vlc_mutex_init( &p_buffers->lock ); \ vlc_mutex_init( &p_buffers->lock ); \
\ \
return (void *)p_buffers; \ return (void *)p_buffers; \
...@@ -246,7 +271,7 @@ static void * input_BuffersInit( void ) \ ...@@ -246,7 +271,7 @@ static void * input_BuffersInit( void ) \
while( p_buf != NULL ) \ while( p_buf != NULL ) \
{ \ { \
p_next = p_buf->p_next; \ p_next = p_buf->p_next; \
p_buffers->i_allocated -= p_buf->i_size; \ p_buffers->i_allocated -= p_buf->_private.i_size; \
free( p_buf ); \ free( p_buf ); \
p_buf = p_next; \ p_buf = p_next; \
} }
...@@ -262,16 +287,16 @@ static void * input_BuffersInit( void ) \ ...@@ -262,16 +287,16 @@ static void * input_BuffersInit( void ) \
#define BUFFERS_END_LOOP( FLAGS, NB_LIFO ) \ #define BUFFERS_END_LOOP( FLAGS, NB_LIFO ) \
for( i = 0; i < NB_LIFO; i++ ) \ for( i = 0; i < NB_LIFO; i++ ) \
{ \ { \
data_packet_t * p_next; \ _data_packet_t * p_next; \
data_packet_t * p_buf = p_buffers->data[i].p_stack; \ _data_packet_t * p_buf = p_buffers->data[i].p_stack; \
BUFFERS_END_BUFFERS_LOOP; \ BUFFERS_END_BUFFERS_LOOP; \
} \ } \
#define BUFFERS_END_LOOP_SHARED( FLAGS, NB_LIFO ) \ #define BUFFERS_END_LOOP_SHARED( FLAGS, NB_LIFO ) \
{ \ { \
/* Free data packets */ \ /* Free data packets */ \
data_packet_t * p_next; \ _data_packet_t * p_next; \
data_packet_t * p_packet = p_buffers->data.p_stack; \ _data_packet_t * p_packet = p_buffers->data.p_stack; \
BUFFERS_END_PACKETS_LOOP; \ BUFFERS_END_PACKETS_LOOP; \
} \ } \
\ \
...@@ -285,7 +310,7 @@ static void * input_BuffersInit( void ) \ ...@@ -285,7 +310,7 @@ static void * input_BuffersInit( void ) \
#define BUFFERS_END( FLAGS, NB_LIFO, STAT_LOOP, LOOP ) \ #define BUFFERS_END( FLAGS, NB_LIFO, STAT_LOOP, LOOP ) \
static void input_BuffersEnd( void * _p_buffers ) \ static void input_BuffersEnd( void * _p_buffers ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
\ \
if( _p_buffers != NULL ) \ if( _p_buffers != NULL ) \
{ \ { \
...@@ -330,11 +355,11 @@ static void input_BuffersEnd( void * _p_buffers ) \ ...@@ -330,11 +355,11 @@ static void input_BuffersEnd( void * _p_buffers ) \
* input_NewPacket: return a pointer to a data packet of the appropriate size * input_NewPacket: return a pointer to a data packet of the appropriate size
*****************************************************************************/ *****************************************************************************/
#define BUFFERS_NEWPACKET_EXTRA_DECLARATION( FLAGS, NB_LIFO ) \ #define BUFFERS_NEWPACKET_EXTRA_DECLARATION( FLAGS, NB_LIFO ) \
data_packet_t ** pp_data = &p_buf; _data_packet_t ** pp_data = &p_buf;
#define BUFFERS_NEWPACKET_EXTRA_DECLARATION_SHARED( FLAGS, NB_LIFO ) \ #define BUFFERS_NEWPACKET_EXTRA_DECLARATION_SHARED( FLAGS, NB_LIFO ) \
data_packet_t * p_data; \ _data_packet_t * p_data; \
data_packet_t ** pp_data = &p_data; _data_packet_t ** pp_data = &p_data;
#define BUFFERS_NEWPACKET_EXTRA( FLAGS, NB_LIFO ) #define BUFFERS_NEWPACKET_EXTRA( FLAGS, NB_LIFO )
...@@ -348,7 +373,7 @@ static void input_BuffersEnd( void * _p_buffers ) \ ...@@ -348,7 +373,7 @@ static void input_BuffersEnd( void * _p_buffers ) \
} \ } \
else \ else \
{ \ { \
p_data = malloc( sizeof( data_packet_t ) ); \ p_data = malloc( sizeof( _data_packet_t ) ); \
if( p_data == NULL ) \ if( p_data == NULL ) \
{ \ { \
intf_ErrMsg( "Out of memory" ); \ intf_ErrMsg( "Out of memory" ); \
...@@ -364,21 +389,26 @@ static void input_BuffersEnd( void * _p_buffers ) \ ...@@ -364,21 +389,26 @@ static void input_BuffersEnd( void * _p_buffers ) \
* this. */ \ * this. */ \
p_data->p_next = NULL; \ p_data->p_next = NULL; \
p_data->b_discard_payload = 0; \ p_data->b_discard_payload = 0; \
return p_data; \ return( (data_packet_t *)p_data ); \
} }
#define BUFFERS_NEWPACKET_END( FLAGS, NB_LIFO ) #define BUFFERS_NEWPACKET_END( FLAGS, NB_LIFO, TYPE ) \
(*pp_data)->p_demux_start = (byte_t *)*pp_data + sizeof( TYPE );
#define BUFFERS_NEWPACKET_END_SHARED( FLAGS, NB_LIFO ) \ #define BUFFERS_NEWPACKET_END_SHARED( FLAGS, NB_LIFO, TYPE ) \
(*pp_data)->_private.p_buffer = p_buf; \
(*pp_data)->p_demux_start = (byte_t *)(*pp_data)->_private.p_buffer \
+ sizeof( TYPE ); \
/* Initialize refcount */ \ /* Initialize refcount */ \
p_buf->i_refcount = 1; p_buf->i_refcount = 1;
#define BUFFERS_NEWPACKET( FLAGS, NB_LIFO, TYPE, NAME, EXTRA_DECLARATION, \ #define BUFFERS_NEWPACKET( FLAGS, NB_LIFO, TYPE, NAME, EXTRA_DECLARATION, \
EXTRA, END ) \ EXTRA, END ) \
/* This one doesn't take p_buffers->lock. */ \
static __inline__ data_packet_t * _input_NewPacket( void * _p_buffers, \ static __inline__ data_packet_t * _input_NewPacket( void * _p_buffers, \
size_t i_size ) \ size_t i_size ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
int i_select; \ int i_select; \
TYPE * p_buf; \ TYPE * p_buf; \
EXTRA_DECLARATION( FLAGS, NB_LIFO ); \ EXTRA_DECLARATION( FLAGS, NB_LIFO ); \
...@@ -411,16 +441,17 @@ static __inline__ data_packet_t * _input_NewPacket( void * _p_buffers, \ ...@@ -411,16 +441,17 @@ static __inline__ data_packet_t * _input_NewPacket( void * _p_buffers, \
\ \
/* Reallocate the packet if it is too small or too large */ \ /* Reallocate the packet if it is too small or too large */ \
if( !(FLAGS & BUFFERS_UNIQUE_SIZE) && \ if( !(FLAGS & BUFFERS_UNIQUE_SIZE) && \
(p_buf->i_size < i_size || p_buf->i_size > 3 * i_size) ) \ (p_buf->_private.i_size < i_size \
|| p_buf->_private.i_size > 3 * i_size) ) \
{ \ { \
p_buffers->i_allocated -= p_buf->i_size; \ p_buffers->i_allocated -= p_buf->_private.i_size; \
p_buf = realloc( p_buf, sizeof( TYPE ) + i_size ); \ p_buf = realloc( p_buf, sizeof( TYPE ) + i_size ); \
if( p_buf == NULL ) \ if( p_buf == NULL ) \
{ \ { \
intf_ErrMsg( "Out of memory" ); \ intf_ErrMsg( "Out of memory" ); \
return NULL; \ return NULL; \
} \ } \
p_buf->i_size = i_size; \ p_buf->_private.i_size = i_size; \
p_buffers->i_allocated += i_size; \ p_buffers->i_allocated += i_size; \
} \ } \
} \ } \
...@@ -433,26 +464,23 @@ static __inline__ data_packet_t * _input_NewPacket( void * _p_buffers, \ ...@@ -433,26 +464,23 @@ static __inline__ data_packet_t * _input_NewPacket( void * _p_buffers, \
intf_ErrMsg( "Out of memory" ); \ intf_ErrMsg( "Out of memory" ); \
return NULL; \ return NULL; \
} \ } \
p_buf->i_size = i_size; \ p_buf->_private.i_size = i_size; \
p_buffers->i_allocated += i_size; \ p_buffers->i_allocated += i_size; \
} \ } \
\ \
/* Initialize data */ \ /* Initialize data */ \
END( FLAGS, NB_LIFO, TYPE ); \
(*pp_data)->p_next = NULL; \ (*pp_data)->p_next = NULL; \
(*pp_data)->b_discard_payload = 0; \ (*pp_data)->b_discard_payload = 0; \
(*pp_data)->p_buffer = (byte_t *)p_buf; \
(*pp_data)->p_demux_start = (*pp_data)->p_buffer + sizeof( TYPE ); \
(*pp_data)->p_payload_start = (*pp_data)->p_demux_start; \ (*pp_data)->p_payload_start = (*pp_data)->p_demux_start; \
(*pp_data)->p_payload_end = (*pp_data)->p_payload_start + i_size; \ (*pp_data)->p_payload_end = (*pp_data)->p_payload_start + i_size; \
\ \
END( FLAGS, NB_LIFO ); \ return( (data_packet_t *)*pp_data ); \
\
return( *pp_data ); \
} \ } \
\ \
static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \ static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
data_packet_t * p_data; \ data_packet_t * p_data; \
\ \
/* Safety check */ \ /* Safety check */ \
...@@ -469,7 +497,7 @@ static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \ ...@@ -469,7 +497,7 @@ static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \
} }
#define DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO ) \ #define DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO ) \
BUFFERS_NEWPACKET( FLAGS, NB_LIFO, data_packet_t, data, \ BUFFERS_NEWPACKET( FLAGS, NB_LIFO, _data_packet_t, data, \
BUFFERS_NEWPACKET_EXTRA_DECLARATION, BUFFERS_NEWPACKET_EXTRA, \ BUFFERS_NEWPACKET_EXTRA_DECLARATION, BUFFERS_NEWPACKET_EXTRA, \
BUFFERS_NEWPACKET_END ) BUFFERS_NEWPACKET_END )
...@@ -482,10 +510,10 @@ static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \ ...@@ -482,10 +510,10 @@ static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \
* input_DeletePacket: put a packet back into the cache * input_DeletePacket: put a packet back into the cache
*****************************************************************************/ *****************************************************************************/
#define BUFFERS_DELETEPACKET_EXTRA( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \ #define BUFFERS_DELETEPACKET_EXTRA( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \
data_packet_t * p_buf = p_data; _data_packet_t * p_buf = p_data;
#define BUFFERS_DELETEPACKET_EXTRA_SHARED( FLAGS, NB_LIFO, DATA_CACHE_SIZE )\ #define BUFFERS_DELETEPACKET_EXTRA_SHARED( FLAGS, NB_LIFO, DATA_CACHE_SIZE )\
_data_buffer_t * p_buf = (_data_buffer_t *)p_data->p_buffer; \ _data_buffer_t * p_buf = (_data_buffer_t *)p_data->_private.p_buffer; \
\ \
/* Get rid of the data packet */ \ /* Get rid of the data packet */ \
if( p_buffers->data.i_depth < DATA_CACHE_SIZE ) \ if( p_buffers->data.i_depth < DATA_CACHE_SIZE ) \
...@@ -507,23 +535,43 @@ static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \ ...@@ -507,23 +535,43 @@ static data_packet_t * input_NewPacket( void * _p_buffers, size_t i_size ) \
return; \ return; \
} }
#define BUFFERS_DELETEPACKETSTACK_EXTRA( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \
_input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
_data_packet_t * p_first = (_data_packet_t *)_p_first; \
_data_packet_t ** pp_last = (_data_packet_t **)_pp_last; \
\
/* Small hopeless optimization */ \
if( (FLAGS & BUFFERS_UNIQUE_SIZE) \
&& p_buffers->data[0].i_depth < DATA_CACHE_SIZE ) \
{ \
p_buffers->data[0].i_depth += i_nb; \
*pp_last = p_buffers->data[0].p_stack; \
p_buffers->data[0].p_stack = p_first; \
} \
else /* No semicolon after this or you will die */
#define BUFFERS_DELETEPACKETSTACK_EXTRA_SHARED( FLAGS, NB_LIFO, \
DATA_CACHE_SIZE )
#define BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE, TYPE, \ #define BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE, TYPE, \
NAME, EXTRA ) \ NAME, EXTRA, EXTRA_STACK ) \
/* This one doesn't take p_buffers->lock. */ \
static __inline__ void _input_DeletePacket( void * _p_buffers, \ static __inline__ void _input_DeletePacket( void * _p_buffers, \
data_packet_t * p_data ) \ data_packet_t * _p_data ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
_data_packet_t * p_data = (_data_packet_t *)_p_data; \
int i_select; \ int i_select; \
\ \
while( p_data != NULL ) \ while( p_data != NULL ) \
{ \ { \
data_packet_t * p_next = p_data->p_next; \ _data_packet_t * p_next = p_data->p_next; \
\ \
EXTRA( FLAGS, NB_LIFO, DATA_CACHE_SIZE ); \ EXTRA( FLAGS, NB_LIFO, DATA_CACHE_SIZE ); \
\ \
for( i_select = 0; i_select < NB_LIFO - 1; i_select++ ) \ for( i_select = 0; i_select < NB_LIFO - 1; i_select++ ) \
{ \ { \
if( p_buf->i_size <= \ if( p_buf->_private.i_size <= \
(2 * p_buffers->NAME[i_select].i_average_size \ (2 * p_buffers->NAME[i_select].i_average_size \
+ p_buffers->NAME[i_select + 1].i_average_size) / 3 ) \ + p_buffers->NAME[i_select + 1].i_average_size) / 3 ) \
{ \ { \
...@@ -541,15 +589,16 @@ static __inline__ void _input_DeletePacket( void * _p_buffers, \ ...@@ -541,15 +589,16 @@ static __inline__ void _input_DeletePacket( void * _p_buffers, \
if( !(FLAGS & BUFFERS_UNIQUE_SIZE) ) \ if( !(FLAGS & BUFFERS_UNIQUE_SIZE) ) \
{ \ { \
/* Update Bresenham mean (very approximative) */ \ /* Update Bresenham mean (very approximative) */ \
p_buffers->NAME[i_select].i_average_size = ( p_buf->i_size \ p_buffers->NAME[i_select].i_average_size = \
+ p_buffers->NAME[i_select].i_average_size \ ( p_buf->_private.i_size \
+ p_buffers->NAME[i_select].i_average_size \
* (INPUT_BRESENHAM_NB - 1) ) \ * (INPUT_BRESENHAM_NB - 1) ) \
/ INPUT_BRESENHAM_NB; \ / INPUT_BRESENHAM_NB; \
} \ } \
} \ } \
else \ else \
{ \ { \
p_buffers->i_allocated -= p_buf->i_size; \ p_buffers->i_allocated -= p_buf->_private.i_size; \
free( p_buf ); \ free( p_buf ); \
} \ } \
\ \
...@@ -559,21 +608,57 @@ static __inline__ void _input_DeletePacket( void * _p_buffers, \ ...@@ -559,21 +608,57 @@ static __inline__ void _input_DeletePacket( void * _p_buffers, \
\ \
static void input_DeletePacket( void * _p_buffers, data_packet_t * p_data ) \ static void input_DeletePacket( void * _p_buffers, data_packet_t * p_data ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
\ \
vlc_mutex_lock( &p_buffers->lock ); \ vlc_mutex_lock( &p_buffers->lock ); \
_input_DeletePacket( _p_buffers, p_data ); \ _input_DeletePacket( _p_buffers, p_data ); \
vlc_mutex_unlock( &p_buffers->lock ); \ vlc_mutex_unlock( &p_buffers->lock ); \
} \
\
/* Delete a chained list of i_nb data packets. -- needed by DeletePES */ \
static __inline__ void _input_DeletePacketStack( void * _p_buffers, \
data_packet_t * _p_first, \
data_packet_t ** _pp_last, \
unsigned int i_nb ) \
{ \
/* Do not add code before, EXTRA_STACK makes its own declarations. */ \
EXTRA_STACK( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \
/* No semicolon - PLEASE */ \
{ \
_input_DeletePacket( _p_buffers, _p_first ); \
} \
} }
#define DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \ #define DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \
BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE, data_packet_t, \ BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE, _data_packet_t, \
data, BUFFERS_DELETEPACKET_EXTRA ) data, BUFFERS_DELETEPACKET_EXTRA, \
BUFFERS_DELETEPACKETSTACK_EXTRA )
#define DECLARE_BUFFERS_DELETEPACKET_SHARED( FLAGS, NB_LIFO, \ #define DECLARE_BUFFERS_DELETEPACKET_SHARED( FLAGS, NB_LIFO, \
DATA_CACHE_SIZE ) \ DATA_CACHE_SIZE ) \
BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE, _data_buffer_t, \ BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, DATA_CACHE_SIZE, _data_buffer_t, \
buffers, BUFFERS_DELETEPACKET_EXTRA_SHARED ) buffers, BUFFERS_DELETEPACKET_EXTRA_SHARED, \
BUFFERS_DELETEPACKETSTACK_EXTRA_SHARED )
/*****************************************************************************
* input_DeletePacketStack: optimize deleting of a stack of packets when
* knowing much information
*****************************************************************************/
/* AFAIK, this isn't used by anyone - it is here for completion.
* _input_DeletePacketStack is declared in DeletePacket because it is needed
* by DeletePES. */
#define DECLARE_BUFFERS_DELETEPACKETSTACK( FLAGS, NB_LIFO ) \
static void input_DeletePacketStack( void * _p_buffers, \
data_packet_t * p_first, \
data_packet_t ** pp_last, \
unsigned int i_nb ) \
{ \
_input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
\
vlc_mutex_lock( &p_buffers->lock ); \
_input_DeletePacketStack( _p_buffers, p_first, pp_last, i_nb ); \
vlc_mutex_unlock( &p_buffers->lock ); \
}
/***************************************************************************** /*****************************************************************************
* input_NewPES: return a pointer to a new PES packet * input_NewPES: return a pointer to a new PES packet
...@@ -581,7 +666,7 @@ static void input_DeletePacket( void * _p_buffers, data_packet_t * p_data ) \ ...@@ -581,7 +666,7 @@ static void input_DeletePacket( void * _p_buffers, data_packet_t * p_data ) \
#define DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ) \ #define DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ) \
static pes_packet_t * input_NewPES( void * _p_buffers ) \ static pes_packet_t * input_NewPES( void * _p_buffers ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
pes_packet_t * p_pes; \ pes_packet_t * p_pes; \
\ \
vlc_mutex_lock( &p_buffers->lock ); \ vlc_mutex_lock( &p_buffers->lock ); \
...@@ -619,24 +704,10 @@ static pes_packet_t * input_NewPES( void * _p_buffers ) \ ...@@ -619,24 +704,10 @@ static pes_packet_t * input_NewPES( void * _p_buffers ) \
/***************************************************************************** /*****************************************************************************
* input_DeletePES: put a pes and all data packets back into the cache * input_DeletePES: put a pes and all data packets back into the cache
*****************************************************************************/ *****************************************************************************/
#define BUFFERS_DELETEPES_EXTRA( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \ #define DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, PES_CACHE_SIZE ) \
/* Small hopeless optimization */ \
if( (FLAGS & BUFFERS_UNIQUE_SIZE) \
&& p_buffers->data[0].i_depth < DATA_CACHE_SIZE ) \
{ \
p_buffers->data[0].i_depth += p_pes->i_nb_data; \
p_pes->p_last->p_next = p_buffers->data[0].p_stack; \
p_buffers->data[0].p_stack = p_pes->p_first; \
} \
else /* No semicolon after this or you will die */
#define BUFFERS_DELETEPES_EXTRA_SHARED( FLAGS, NB_LIFO, DATA_CACHE_SIZE )
#define BUFFERS_DELETEPES( FLAGS, NB_LIFO, DATA_CACHE_SIZE, PES_CACHE_SIZE, \
EXTRA ) \
static void input_DeletePES( void * _p_buffers, pes_packet_t * p_pes ) \ static void input_DeletePES( void * _p_buffers, pes_packet_t * p_pes ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
\ \
vlc_mutex_lock( &p_buffers->lock ); \ vlc_mutex_lock( &p_buffers->lock ); \
\ \
...@@ -644,10 +715,12 @@ static void input_DeletePES( void * _p_buffers, pes_packet_t * p_pes ) \ ...@@ -644,10 +715,12 @@ static void input_DeletePES( void * _p_buffers, pes_packet_t * p_pes ) \
{ \ { \
pes_packet_t * p_next = p_pes->p_next; \ pes_packet_t * p_next = p_pes->p_next; \
\ \
/* Delete all data packets - no semicolon, PLEASE */ \ /* Delete all data packets */ \
EXTRA( FLAGS, NB_LIFO, DATA_CACHE_SIZE ) \ if( p_pes->p_first != NULL ) \
{ \ { \
_input_DeletePacket( _p_buffers, p_pes->p_first ); \ _input_DeletePacketStack( _p_buffers, p_pes->p_first, \
&p_pes->p_last->p_next, \
p_pes->i_nb_data ); \
} \ } \
\ \
if( p_buffers->pes.i_depth < PES_CACHE_SIZE ) \ if( p_buffers->pes.i_depth < PES_CACHE_SIZE ) \
...@@ -668,24 +741,14 @@ static void input_DeletePES( void * _p_buffers, pes_packet_t * p_pes ) \ ...@@ -668,24 +741,14 @@ static void input_DeletePES( void * _p_buffers, pes_packet_t * p_pes ) \
vlc_mutex_unlock( &p_buffers->lock ); \ vlc_mutex_unlock( &p_buffers->lock ); \
} }
#define DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, DATA_CACHE_SIZE, \
PES_CACHE_SIZE ) \
BUFFERS_DELETEPES( FLAGS, NB_LIFO, DATA_CACHE_SIZE, PES_CACHE_SIZE, \
BUFFERS_DELETEPES_EXTRA )
#define DECLARE_BUFFERS_DELETEPES_SHARED( FLAGS, NB_LIFO, DATA_CACHE_SIZE, \
PES_CACHE_SIZE ) \
BUFFERS_DELETEPES( FLAGS, NB_LIFO, DATA_CACHE_SIZE, PES_CACHE_SIZE, \
BUFFERS_DELETEPES_EXTRA_SHARED )
/***************************************************************************** /*****************************************************************************
* input_BuffersToIO: return an io vector (only with BUFFERS_UNIQUE_SIZE) * input_BuffersToIO: return an IO vector (only with BUFFERS_UNIQUE_SIZE)
*****************************************************************************/ *****************************************************************************/
#define DECLARE_BUFFERS_TOIO( FLAGS, BUFFER_SIZE ) \ #define DECLARE_BUFFERS_TOIO( FLAGS, BUFFER_SIZE ) \
static data_packet_t * input_BuffersToIO( void * _p_buffers, \ static data_packet_t * input_BuffersToIO( void * _p_buffers, \
struct iovec * p_iovec, int i_nb ) \ struct iovec * p_iovec, int i_nb )\
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
data_packet_t * p_data = NULL; \ data_packet_t * p_data = NULL; \
int i; \ int i; \
\ \
...@@ -697,12 +760,7 @@ static data_packet_t * input_BuffersToIO( void * _p_buffers, \ ...@@ -697,12 +760,7 @@ static data_packet_t * input_BuffersToIO( void * _p_buffers, \
BUFFER_SIZE /* UNIQUE_SIZE */ ); \ BUFFER_SIZE /* UNIQUE_SIZE */ ); \
if( p_next == NULL ) \ if( p_next == NULL ) \
{ \ { \
while( p_data != NULL ) \ _input_DeletePacket( _p_buffers, p_data ); \
{ \
p_next = p_data->p_next; \
_input_DeletePacket( _p_buffers, p_data ); \
p_data = p_next; \
} \
return( NULL ); \ return( NULL ); \
} \ } \
\ \
...@@ -722,29 +780,32 @@ static data_packet_t * input_BuffersToIO( void * _p_buffers, \ ...@@ -722,29 +780,32 @@ static data_packet_t * input_BuffersToIO( void * _p_buffers, \
*****************************************************************************/ *****************************************************************************/
#define DECLARE_BUFFERS_SHAREBUFFER( FLAGS ) \ #define DECLARE_BUFFERS_SHAREBUFFER( FLAGS ) \
static data_packet_t * input_ShareBuffer( void * _p_buffers, \ static data_packet_t * input_ShareBuffer( void * _p_buffers, \
data_packet_t * p_shared_data ) \ data_packet_t * _p_shared_data ) \
{ \ { \
input_buffers_t * p_buffers = (input_buffers_t *)_p_buffers; \ _input_buffers_t * p_buffers = (_input_buffers_t *)_p_buffers; \
data_packet_t * p_data; \ _data_packet_t * p_shared_data = (_data_packet_t *)_p_shared_data; \
_data_buffer_t * p_buf = (_data_buffer_t *)p_shared_data->p_buffer; \ _data_packet_t * p_data; \
_data_buffer_t * p_buf = p_shared_data->_private.p_buffer; \
\ \
vlc_mutex_lock( &p_buffers->lock ); \ vlc_mutex_lock( &p_buffers->lock ); \
\ \
/* Get new data_packet_t */ \ /* Get new data_packet_t, without a buffer through a special backdoor \
p_data = _input_NewPacket( _p_buffers, 0 ); \ * in _input_NewPacket. */ \
p_data = (_data_packet_t *)_input_NewPacket( _p_buffers, 0 ); \
\ \
/* Finish initialization of p_data */ \ /* Finish initialization of p_data */ \
p_data->p_buffer = p_shared_data->p_buffer; \ p_data->_private.p_buffer = p_shared_data->_private.p_buffer; \
p_data->p_demux_start = p_data->p_payload_start \ p_data->p_demux_start = p_data->p_payload_start \
= p_shared_data->p_buffer + sizeof( _data_buffer_t ); \ = (byte_t *)p_shared_data->_private.p_buffer \
p_data->p_payload_end = p_shared_data->p_buffer + p_buf->i_size; \ + sizeof( _data_buffer_t ); \
p_data->p_payload_end = p_data->p_demux_start + p_buf->_private.i_size; \
\ \
/* Update refcount */ \ /* Update refcount */ \
p_buf->i_refcount++; \ p_buf->i_refcount++; \
\ \
vlc_mutex_unlock( &p_buffers->lock ); \ vlc_mutex_unlock( &p_buffers->lock ); \
\ \
return( p_data ); \ return( (data_packet_t *)p_data ); \
} }
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* -dvd_udf to find files * -dvd_udf to find files
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: input_dvd.c,v 1.112 2001/12/29 00:39:49 massiot Exp $ * $Id: input_dvd.c,v 1.113 2001/12/29 03:07:51 massiot Exp $
* *
* Author: Stphane Borel <stef@via.ecp.fr> * Author: Stphane Borel <stef@via.ecp.fr>
* *
...@@ -123,9 +123,9 @@ DECLARE_BUFFERS_SHARED( FLAGS, NB_LIFO ); ...@@ -123,9 +123,9 @@ DECLARE_BUFFERS_SHARED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO ); DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO );
DECLARE_BUFFERS_END_SHARED( FLAGS, NB_LIFO ); DECLARE_BUFFERS_END_SHARED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_NEWPACKET_SHARED( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPACKET_SHARED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPACKET_SHARED( FLAGS, NB_LIFO, 150 ); DECLARE_BUFFERS_DELETEPACKET_SHARED( FLAGS, NB_LIFO, 1000 );
DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPES_SHARED( FLAGS, NB_LIFO, 150, 150 ); DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 1000 );
DECLARE_BUFFERS_TOIO( FLAGS, DVD_LB_SIZE ); DECLARE_BUFFERS_TOIO( FLAGS, DVD_LB_SIZE );
DECLARE_BUFFERS_SHAREBUFFER( FLAGS ); DECLARE_BUFFERS_SHAREBUFFER( FLAGS );
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* It depends on: libdvdread for ifo files and block reading. * It depends on: libdvdread for ifo files and block reading.
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: input_dvdread.c,v 1.7 2001/12/29 00:39:49 massiot Exp $ * $Id: input_dvdread.c,v 1.8 2001/12/29 03:07:51 massiot Exp $
* *
* Author: Stphane Borel <stef@via.ecp.fr> * Author: Stphane Borel <stef@via.ecp.fr>
* *
...@@ -114,9 +114,9 @@ DECLARE_BUFFERS_SHARED( FLAGS, NB_LIFO ); ...@@ -114,9 +114,9 @@ DECLARE_BUFFERS_SHARED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO ); DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO );
DECLARE_BUFFERS_END_SHARED( FLAGS, NB_LIFO ); DECLARE_BUFFERS_END_SHARED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_NEWPACKET_SHARED( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPACKET_SHARED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPACKET_SHARED( FLAGS, NB_LIFO, 150 ); DECLARE_BUFFERS_DELETEPACKET_SHARED( FLAGS, NB_LIFO, 1000 );
DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPES_SHARED( FLAGS, NB_LIFO, 150, 150 ); DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 1000 );
DECLARE_BUFFERS_TOIO( FLAGS, DVD_LB_SIZE ); DECLARE_BUFFERS_TOIO( FLAGS, DVD_LB_SIZE );
DECLARE_BUFFERS_SHAREBUFFER( FLAGS ); DECLARE_BUFFERS_SHAREBUFFER( FLAGS );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_es.c: Elementary Stream demux and packet management * input_es.c: Elementary Stream demux and packet management
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: input_es.c,v 1.8 2001/12/27 03:47:08 massiot Exp $ * $Id: input_es.c,v 1.9 2001/12/29 03:07:51 massiot Exp $
* *
* Author: Christophe Massiot <massiot@via.ecp.fr> * Author: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -98,7 +98,7 @@ DECLARE_BUFFERS_END( FLAGS, NB_LIFO ); ...@@ -98,7 +98,7 @@ DECLARE_BUFFERS_END( FLAGS, NB_LIFO );
DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 150 ); DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 150 );
DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 150, 150 ); DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 150 );
DECLARE_BUFFERS_TOIO( FLAGS, ES_PACKET_SIZE ); DECLARE_BUFFERS_TOIO( FLAGS, ES_PACKET_SIZE );
/***************************************************************************** /*****************************************************************************
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_ps.c: PS demux and packet management * input_ps.c: PS demux and packet management
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: input_ps.c,v 1.8 2001/12/27 03:47:09 massiot Exp $ * $Id: input_ps.c,v 1.9 2001/12/29 03:07:51 massiot Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Cyril Deguet <asmax@via.ecp.fr> * Cyril Deguet <asmax@via.ecp.fr>
...@@ -100,9 +100,9 @@ DECLARE_BUFFERS_EMBEDDED( FLAGS, NB_LIFO ); ...@@ -100,9 +100,9 @@ DECLARE_BUFFERS_EMBEDDED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO ); DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO );
DECLARE_BUFFERS_END( FLAGS, NB_LIFO ); DECLARE_BUFFERS_END( FLAGS, NB_LIFO );
DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 150 ); DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 300 );
DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 150, 150 ); DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 300 );
/***************************************************************************** /*****************************************************************************
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_ts.c: TS demux and netlist management * input_ts.c: TS demux and netlist management
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: input_ts.c,v 1.7 2001/12/27 03:47:09 massiot Exp $ * $Id: input_ts.c,v 1.8 2001/12/29 03:07:51 massiot Exp $
* *
* Authors: Henri Fallon <henri@videolan.org> * Authors: Henri Fallon <henri@videolan.org>
* *
...@@ -101,7 +101,7 @@ DECLARE_BUFFERS_END( FLAGS, NB_LIFO ); ...@@ -101,7 +101,7 @@ DECLARE_BUFFERS_END( FLAGS, NB_LIFO );
DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 1000 ); DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 1000 );
DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 1000, 150 ); DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 150 );
DECLARE_BUFFERS_TOIO( FLAGS, TS_PACKET_SIZE ); DECLARE_BUFFERS_TOIO( FLAGS, TS_PACKET_SIZE );
/***************************************************************************** /*****************************************************************************
......
...@@ -102,9 +102,9 @@ DECLARE_BUFFERS_EMBEDDED( FLAGS, NB_LIFO ); ...@@ -102,9 +102,9 @@ DECLARE_BUFFERS_EMBEDDED( FLAGS, NB_LIFO );
DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO ); DECLARE_BUFFERS_INIT( FLAGS, NB_LIFO );
DECLARE_BUFFERS_END( FLAGS, NB_LIFO ); DECLARE_BUFFERS_END( FLAGS, NB_LIFO );
DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPACKET( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 150 ); DECLARE_BUFFERS_DELETEPACKET( FLAGS, NB_LIFO, 1000 );
DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO ); DECLARE_BUFFERS_NEWPES( FLAGS, NB_LIFO );
DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 150, 150 ); DECLARE_BUFFERS_DELETEPES( FLAGS, NB_LIFO, 1000 );
/***************************************************************************** /*****************************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment