Commit 5ebd9b99 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

MP4: check more i_timescale values to avoid Division by Zero

Ref #7838
parent d68da462
...@@ -216,10 +216,15 @@ static int LoadInitFrag( demux_t *p_demux, const bool b_smooth ) ...@@ -216,10 +216,15 @@ static int LoadInitFrag( demux_t *p_demux, const bool b_smooth )
if( p_stra && p_stra->data.p_stra->i_track_ID ) if( p_stra && p_stra->data.p_stra->i_track_ID )
p_sys->i_tracks++; p_sys->i_tracks++;
/* Get timescale and duration of the video track; */ /* Get timescale and duration of the video track; */
if( !p_sys->i_timescale ) if( p_sys->i_timescale == 0 )
{ {
p_sys->i_timescale = p_stra->data.p_stra->i_timescale; p_sys->i_timescale = p_stra->data.p_stra->i_timescale;
p_sys->i_duration = p_stra->data.p_stra->i_duration; p_sys->i_duration = p_stra->data.p_stra->i_duration;
if( p_sys->i_timescale == 0 )
{
msg_Err( p_demux, "bad timescale" );
goto LoadInitFragError;
}
} }
} }
} }
...@@ -1883,7 +1888,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t *p_track, ...@@ -1883,7 +1888,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t *p_track,
"(%u), making both equal (report any problem).", "(%u), making both equal (report any problem).",
p_track->i_timescale, p_soun->i_sampleratehi ); p_track->i_timescale, p_soun->i_sampleratehi );
if( p_soun->i_sampleratehi ) if( p_soun->i_sampleratehi != 0 )
p_track->i_timescale = p_soun->i_sampleratehi; p_track->i_timescale = p_soun->i_sampleratehi;
else else
p_soun->i_sampleratehi = p_track->i_timescale; p_soun->i_sampleratehi = p_track->i_timescale;
...@@ -2497,7 +2502,7 @@ static void MP4_TrackCreate( demux_t *p_demux, mp4_track_t *p_track, ...@@ -2497,7 +2502,7 @@ static void MP4_TrackCreate( demux_t *p_demux, mp4_track_t *p_track,
} }
p_track->i_timescale = p_mdhd->data.p_mdhd->i_timescale; p_track->i_timescale = p_mdhd->data.p_mdhd->i_timescale;
if( !p_track->i_timescale ) if( p_track->i_timescale == 0 )
return; return;
if( p_mdhd->data.p_mdhd->i_language_code < 0x800 ) if( p_mdhd->data.p_mdhd->i_language_code < 0x800 )
...@@ -3440,10 +3445,14 @@ static int MP4_frg_GetChunk( demux_t *p_demux, MP4_Box_t *p_chunk, unsigned *i_t ...@@ -3440,10 +3445,14 @@ static int MP4_frg_GetChunk( demux_t *p_demux, MP4_Box_t *p_chunk, unsigned *i_t
{ {
MP4_Box_data_sidx_t *p_sidx_data = p_sidx->data.p_sidx; MP4_Box_data_sidx_t *p_sidx_data = p_sidx->data.p_sidx;
assert( p_sidx_data->i_reference_count == 1 ); assert( p_sidx_data->i_reference_count == 1 );
if( p_sidx_data->i_timescale == 0 )
return VLC_EGENERIC;
unsigned i_chunk_duration = p_sidx_data->p_items[0].i_subsegment_duration / unsigned i_chunk_duration = p_sidx_data->p_items[0].i_subsegment_duration /
p_sidx_data->i_timescale; p_sidx_data->i_timescale;
default_duration = i_chunk_duration * default_duration = i_chunk_duration * p_track->i_timescale / ret->i_sample_count;
p_track->i_timescale / ret->i_sample_count;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment