- if( p_stream->p_sys->p_mux )
- {
- sout_MuxSendBuffer( p_stream->p_sys->p_mux, id->p_input, p_buffer );
- }
- else
- {
- while( p_buffer )
- {
- p_next = p_buffer->p_next;
- if( id->pf_packetize( p_stream, id, p_buffer ) )
- {
- break;
- }
- block_Release( p_buffer );
- p_buffer = p_next;
- }
- }
- return VLC_SUCCESS;
-}
-
-
-static int AccessOutGrabberWriteBuffer( sout_stream_t *p_stream,
- block_t *p_buffer )
-{
- sout_stream_sys_t *p_sys = p_stream->p_sys;
-
- int64_t i_dts = p_buffer->i_dts;
- uint32_t i_timestamp = i_dts * 9 / 100;
-
- uint8_t *p_data = p_buffer->p_buffer;
- unsigned int i_data = p_buffer->i_buffer;
- unsigned int i_max = p_sys->i_mtu - 12;
-
- unsigned i_packet = ( p_buffer->i_buffer + i_max - 1 ) / i_max;
-
- while( i_data > 0 )
- {
- unsigned int i_size;
-
- /* output complete packet */
- if( p_sys->packet &&
- p_sys->packet->i_buffer + i_data > i_max )
- {
- sout_AccessOutWrite( p_sys->p_access, p_sys->packet );
- p_sys->packet = NULL;
- }
-
- if( p_sys->packet == NULL )
- {
- /* allocate a new packet */
- p_sys->packet = block_New( p_stream, p_sys->i_mtu );
- p_sys->packet->p_buffer[ 0] = 0x80;
- p_sys->packet->p_buffer[ 1] = 0x80|p_sys->i_payload_type;
- p_sys->packet->p_buffer[ 2] = ( p_sys->i_sequence >> 8)&0xff;
- p_sys->packet->p_buffer[ 3] = ( p_sys->i_sequence )&0xff;
- p_sys->packet->p_buffer[ 4] = ( i_timestamp >> 24 )&0xff;
- p_sys->packet->p_buffer[ 5] = ( i_timestamp >> 16 )&0xff;
- p_sys->packet->p_buffer[ 6] = ( i_timestamp >> 8 )&0xff;
- p_sys->packet->p_buffer[ 7] = ( i_timestamp )&0xff;
- p_sys->packet->p_buffer[ 8] = p_sys->ssrc[0];
- p_sys->packet->p_buffer[ 9] = p_sys->ssrc[1];
- p_sys->packet->p_buffer[10] = p_sys->ssrc[2];
- p_sys->packet->p_buffer[11] = p_sys->ssrc[3];
- p_sys->packet->i_buffer = 12;
-
- p_sys->packet->i_dts = i_dts;
- p_sys->packet->i_length = p_buffer->i_length / i_packet;
- i_dts += p_sys->packet->i_length;
-
- p_sys->i_sequence++;
- }
-
- i_size = __MIN( i_data,
- (unsigned)(p_sys->i_mtu - p_sys->packet->i_buffer) );
-
- memcpy( &p_sys->packet->p_buffer[p_sys->packet->i_buffer],
- p_data, i_size );
-
- p_sys->packet->i_buffer += i_size;
- p_data += i_size;
- i_data -= i_size;
- }
-
- return VLC_SUCCESS;
-}
-
-static int AccessOutGrabberWrite( sout_access_out_t *p_access,
- block_t *p_buffer )
-{
- sout_stream_t *p_stream = (sout_stream_t*)p_access->p_sys;