vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Jun 11 15:23:21 2014 +0200| [afc9003f12a6e19b182d04b71503a90c42a12e4c] | committer: Francois Cartegnie
demux: mp4: fix grouped compressed samples reading (fix #11601) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=afc9003f12a6e19b182d04b71503a90c42a12e4c --- modules/demux/mp4/mp4.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c index a94fc19..460c74d 100644 --- a/modules/demux/mp4/mp4.c +++ b/modules/demux/mp4/mp4.c @@ -3359,7 +3359,6 @@ static uint32_t MP4_TrackGetReadSize( mp4_track_t *p_track, uint32_t *pi_nb_samp const MP4_Box_data_sample_soun_t *p_soun = p_track->p_sample->data.p_sample_soun; const mp4_chunk_t *p_chunk = &p_track->chunk[p_track->i_chunk]; uint32_t i_max_samples = p_chunk->i_sample_count - p_chunk->i_sample + 1; - i_max_samples = __MIN( i_max_samples, QT_V0_MAX_SAMPLES ); /* Group audio packets so we don't call demux for single sample unit */ if( p_track->fmt.i_original_fourcc == VLC_CODEC_DVD_LPCM && @@ -3383,12 +3382,15 @@ static uint32_t MP4_TrackGetReadSize( mp4_track_t *p_track, uint32_t *pi_nb_samp if( p_soun->i_qt_version == 1 ) { - if ( p_soun->i_compressionid != 0 ) + if ( p_soun->i_compressionid != 0 || p_soun->i_bytes_per_sample > 1 ) /* compressed */ { /* in this case we are dealing with compressed data -2 in V1: additional fields are meaningless (VBR and such) */ - i_size = p_track->i_sample_size; - *pi_nb_samples = 1; + *pi_nb_samples = i_max_samples;//p_track->chunk[p_track->i_chunk].i_sample_count; + if( p_track->fmt.audio.i_blockalign > 1 ) + *pi_nb_samples = p_soun->i_sample_per_packet; + i_size = *pi_nb_samples / p_soun->i_sample_per_packet * p_soun->i_bytes_per_frame; + return i_size; } else /* uncompressed case */ { @@ -3403,10 +3405,11 @@ static uint32_t MP4_TrackGetReadSize( mp4_track_t *p_track, uint32_t *pi_nb_samp *pi_nb_samples = i_packets * p_soun->i_sample_per_packet; i_size = i_packets * p_soun->i_bytes_per_frame; + return i_size; } } - /* uncompressed */ + /* uncompressed v0 */ *pi_nb_samples = 0; for( uint32_t i=p_track->i_sample; i<p_chunk->i_sample_first+p_chunk->i_sample_count && _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
