p_netlist->i_nb_data = i_nb_data;
p_netlist->i_nb_pes = i_nb_pes;
+ p_netlist->i_buffer_size = i_buffer_size;
return (0); /* Everything went all right */
}
/*****************************************************************************
* input_NetlistNewPacket: returns a free data_packet_t
*****************************************************************************/
-struct data_packet_s * input_NetlistNewPacket( void * p_netlist )
+struct data_packet_s * input_NetlistNewPacket( void * p_netlist,
+ size_t i_buffer_size )
{
unsigned int i_return;
netlist_t * pt_netlist; /* for a cast */
pt_netlist = ( netlist_t * ) p_netlist;
/* cast p_netlist -> netlist_t */
+#ifdef DEBUG
+ if( i_buffer_size > p_netlist->i_buffer_size )
+ {
+ /* This should not happen */
+ intf_ErrMsg( "Netlist packet too small !" );
+ return NULL;
+ }
+#endif
+
/* lock */
vlc_mutex_lock ( &pt_netlist->lock );
/* unlock */
vlc_mutex_unlock (&pt_netlist->lock);
+
+ //if (i_buffer_size < p_pes->i_buffer_size) => diminuer p_payload_end
//risque de race condition : que se passe-t-il si après avoir rendu
//le lock un autre thread rend un paquet et écrase
*****************************************************************************/
typedef struct netlist_s
{
- vlc_mutex_t lock;
+ vlc_mutex_t lock;
+
+ size_t i_buffer_size;
/* Buffers */
byte_t * p_buffers; /* Big malloc'ed area */
unsigned int i_nb_data;
/* Index */
-
unsigned int i_data_start, i_data_end;
unsigned int i_pes_start, i_pes_end;
unsigned int i_iovec_start, i_iovec_end;
size_t i_buffer_size );
struct iovec * input_NetlistGetiovec( void * );
void input_NetlistMviovec( void *, size_t );
-struct data_packet_s * input_NetlistNewPacket( void * );
+struct data_packet_s * input_NetlistNewPacket( void *, size_t );
struct pes_packet_s * input_NetlistNewPES( void * );
void input_NetlistDeletePacket( void *, struct data_packet_s * );
void input_NetlistDeletePES( void *, struct pes_packet_s * );