if( p_peek[0]!='f' || p_peek[1]!='L' || p_peek[2]!='a' || p_peek[3]!='C' )
{
- if( !p_demux->b_force ) return VLC_EGENERIC;
+ if( !p_demux->b_force )
+ {
+ char *psz_mime = stream_ContentType( p_demux->s );
+ if ( !psz_mime || strcmp( psz_mime, "audio/flac" ) )
+ {
+ free( psz_mime );
+ return VLC_EGENERIC;
+ }
+ free( psz_mime );
+ }
/* User forced */
msg_Err( p_demux, "this doesn't look like a flac stream, "
demux_sys_t *p_sys = p_demux->p_sys;
block_t *p_block_in, *p_block_out;
- if( !( p_block_in = stream_Block( p_demux->s, FLAC_PACKET_SIZE ) ) )
- return 0;
+ bool b_eof = !( p_block_in = stream_Block( p_demux->s, FLAC_PACKET_SIZE ) );
- p_block_in->i_pts = p_block_in->i_dts = p_sys->b_start ? VLC_TS_0 : VLC_TS_INVALID;
- p_sys->b_start = false;
+ if ( p_block_in )
+ {
+ p_block_in->i_pts = p_block_in->i_dts = p_sys->b_start ? VLC_TS_0 : VLC_TS_INVALID;
+ p_sys->b_start = false;
+ }
while( (p_block_out = p_sys->p_packetizer->pf_packetize(
- p_sys->p_packetizer, &p_block_in )) )
+ p_sys->p_packetizer, (p_block_in) ? &p_block_in : NULL )) )
{
while( p_block_out )
{
p_block_out = p_next;
}
}
- return 1;
+ return !b_eof;
}
/*****************************************************************************
continue;
s = vlc_seekpoint_New();
- s->i_time_offset = i_sample * INT64_C(1000000)/i_sample_rate;
+ s->i_time_offset = i_sample * CLOCK_FREQ / i_sample_rate;
s->i_byte_offset = GetQWBE( &p_data[4+18*i+8] );
/* Check for duplicate entry */
if( i_data < 4 )
return;
- vorbis_ParseComment( &p_sys->p_meta, &p_data[4], i_data - 4,
+ vorbis_ParseComment( NULL, &p_sys->p_meta, &p_data[4], i_data - 4,
&p_sys->i_attachments, &p_sys->attachments,
&p_sys->i_cover_score, &p_sys->i_cover_idx, NULL, NULL, NULL, NULL );
}