block_t *p_block;
vlc_bool_t b_selected;
int i_header_len = 0;
- mtime_t i_pts = 0;
+ mtime_t i_pts = -1, i_interpolated_pts;
/* Sanity check */
if( !p_oggpacket->bytes )
if( p_stream->b_force_backup )
{
uint8_t *p_extra;
- vlc_bool_t b_store_size = VLC_TRUE;
+ vlc_bool_t b_store_size = VLC_TRUE;
p_stream->i_packets_backup++;
switch( p_stream->fmt.i_codec )
case VLC_FOURCC( 'f','l','a','c' ):
if( p_stream->i_packets_backup == 2 )
{
- Ogg_ReadFlacHeader( p_demux, p_stream, p_oggpacket );
+ Ogg_ReadFlacHeader( p_demux, p_stream, p_oggpacket );
p_stream->b_force_backup = 0;
}
b_store_size = VLC_FALSE;
p_stream->fmt.i_extra = p_stream->i_headers;
p_stream->fmt.p_extra =
realloc( p_stream->fmt.p_extra, p_stream->i_headers );
- memcpy( p_stream->fmt.p_extra, p_stream->p_headers,
- p_stream->i_headers );
+ memcpy( p_stream->fmt.p_extra, p_stream->p_headers,
+ p_stream->i_headers );
es_out_Control( p_demux->out, ES_OUT_SET_FMT,
p_stream->p_es, &p_stream->fmt );
}
}
/* Convert the granulepos into the next pcr */
+ i_interpolated_pts = p_stream->i_interpolated_pcr;
Ogg_UpdatePCR( p_stream, p_oggpacket );
if( p_stream->i_pcr >= 0 )
if( !( p_block = block_New( p_demux, p_oggpacket->bytes ) ) ) return;
+ /* Normalize PTS */
+ if( i_pts == 0 ) i_pts = 1;
+ else if( i_pts == -1 && i_interpolated_pts == 0 ) i_pts = 1;
+ else if( i_pts == -1 ) i_pts = 0;
+
if( p_stream->fmt.i_cat == AUDIO_ES )
p_block->i_dts = p_block->i_pts = i_pts;
else if( p_stream->fmt.i_cat == SPU_ES )
if( bs_read( &s, 7 ) == 0 )
{
if( bs_read( &s, 24 ) >= 34 /*size STREAMINFO*/ )
- {
- bs_skip( &s, 80 );
- p_stream->f_rate = p_stream->fmt.audio.i_rate = bs_read( &s, 20 );
- p_stream->fmt.audio.i_channels = bs_read( &s, 3 ) + 1;
-
- msg_Dbg( p_demux, "FLAC header, channels: %i, rate: %i",
- p_stream->fmt.audio.i_channels, (int)p_stream->f_rate );
- }
- else msg_Dbg( p_demux, "FLAC STREAMINFO metadata too short" );
-
- /* Fake this as the last metadata block */
- *((uint8_t*)p_oggpacket->packet) |= 0x80;
+ {
+ bs_skip( &s, 80 );
+ p_stream->f_rate = p_stream->fmt.audio.i_rate = bs_read( &s, 20 );
+ p_stream->fmt.audio.i_channels = bs_read( &s, 3 ) + 1;
+
+ msg_Dbg( p_demux, "FLAC header, channels: %i, rate: %i",
+ p_stream->fmt.audio.i_channels, (int)p_stream->f_rate );
+ }
+ else msg_Dbg( p_demux, "FLAC STREAMINFO metadata too short" );
+
+ /* Fake this as the last metadata block */
+ *((uint8_t*)p_oggpacket->packet) |= 0x80;
}
else
{