+/**
+ * It computes the sample rate for a video track using the given sample
+ * description index
+ */
+static void TrackGetESSampleRate( unsigned *pi_num, unsigned *pi_den,
+ const mp4_track_t *p_track,
+ unsigned i_sd_index,
+ unsigned i_chunk )
+{
+ *pi_num = 0;
+ *pi_den = 0;
+
+ if( p_track->i_chunk_count <= 0 )
+ return;
+
+ /* */
+ const mp4_chunk_t *p_chunk = &p_track->chunk[i_chunk];
+ while( p_chunk > &p_track->chunk[0] &&
+ p_chunk[-1].i_sample_description_index == i_sd_index )
+ {
+ p_chunk--;
+ }
+
+ uint64_t i_sample = 0;
+ uint64_t i_first_dts = p_chunk->i_first_dts;
+ uint64_t i_last_dts;
+ do
+ {
+ i_sample += p_chunk->i_sample_count;
+ i_last_dts = p_chunk->i_last_dts;
+ p_chunk++;
+ }
+ while( p_chunk < &p_track->chunk[p_track->i_chunk_count] &&
+ p_chunk->i_sample_description_index == i_sd_index );
+
+ if( i_sample > 1 && i_first_dts < i_last_dts )
+ vlc_ureduce( pi_num, pi_den,
+ ( i_sample - 1) * p_track->i_timescale,
+ i_last_dts - i_first_dts,
+ UINT16_MAX);
+}
+