@ -328,6 +328,7 @@ static int write_hint_packets(AVIOContext *out, const uint8_t *data,
uint32_t packet_len = AV_RB32 ( data ) ;
uint16_t seq ;
uint32_t ts ;
int32_t ts_diff ;
data + = 4 ;
size - = 4 ;
@ -350,8 +351,12 @@ static int write_hint_packets(AVIOContext *out, const uint8_t *data,
trk - > prev_rtp_ts = ts ;
/* Unwrap the 32-bit RTP timestamp that wraps around often
* into a not ( as often ) wrapping 64 - bit timestamp . */
trk - > cur_rtp_ts_unwrapped + = ( int32_t ) ( ts - trk - > prev_rtp_ts ) ;
trk - > prev_rtp_ts = ts ;
ts_diff = ts - trk - > prev_rtp_ts ;
if ( ts_diff > 0 ) {
trk - > cur_rtp_ts_unwrapped + = ts_diff ;
trk - > prev_rtp_ts = ts ;
ts_diff = 0 ;
}
if ( * pts = = AV_NOPTS_VALUE )
* pts = trk - > cur_rtp_ts_unwrapped ;
@ -360,9 +365,15 @@ static int write_hint_packets(AVIOContext *out, const uint8_t *data,
avio_wb32 ( out , 0 ) ; /* relative_time */
avio_write ( out , data , 2 ) ; /* RTP header */
avio_wb16 ( out , seq ) ; /* RTPsequenceseed */
avio_wb16 ( out , 0 ) ; /* reserved + flags */
avio_wb16 ( out , ts_diff ? 4 : 0 ) ; /* reserved + flags (extra_flag) */
entries_pos = avio_tell ( out ) ;
avio_wb16 ( out , 0 ) ; /* entry count */
if ( ts_diff ) { /* if extra_flag is set */
avio_wb32 ( out , 16 ) ; /* extra_information_length */
avio_wb32 ( out , 12 ) ; /* rtpoffsetTLV box */
avio_write ( out , " rtpo " , 4 ) ;
avio_wb32 ( out , ts_diff ) ;
}
data + = 12 ;
size - = 12 ;