@ -703,30 +703,21 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
/* interpolate PTS and DTS if they are not present */
if ( delay < = 1 ) {
if ( presentation_delayed ) {
int fields = 2 + ( pc ? pc - > repeat_pict : 0 ) ;
int field_duration = pkt - > duration / fields ;
int parity = pc ? pc - > parity : 0 ;
/* DTS = decompression timestamp */
/* PTS = presentation timestamp */
if ( pkt - > dts = = AV_NOPTS_VALUE )
pkt - > dts = st - > last_IP_pts [ parity ] ;
pkt - > dts = st - > last_IP_pts ;
update_initial_timestamps ( s , pkt - > stream_index , pkt - > dts , pkt - > pts ) ;
if ( pkt - > dts = = AV_NOPTS_VALUE )
pkt - > dts = st - > cur_dts ;
/* this is tricky: the dts must be incremented by the duration
of the frame we are displaying , i . e . the last I - or P - frame */
st - > cur_dts = pkt - > dts ;
for ( i = 0 ; i < fields ; i + + ) {
int p = ( parity + i ) & 1 ;
if ( ! st - > last_IP_duration [ p ] )
st - > last_IP_duration [ p ] = field_duration ;
st - > cur_dts + = st - > last_IP_duration [ p ] ;
st - > last_IP_pts [ p ] = pkt - > pts ;
if ( pkt - > pts ! = AV_NOPTS_VALUE )
st - > last_IP_pts [ p ] + = i * field_duration ;
st - > last_IP_duration [ p ] = field_duration ;
}
if ( st - > last_IP_duration = = 0 )
st - > last_IP_duration = pkt - > duration ;
st - > cur_dts = pkt - > dts + st - > last_IP_duration ;
st - > last_IP_duration = pkt - > duration ;
st - > last_IP_pts = pkt - > pts ;
/* cannot compute PTS if not present (we can compute it only
by knowing the future */
} else if ( pkt - > pts ! = AV_NOPTS_VALUE | | pkt - > dts ! = AV_NOPTS_VALUE | | pkt - > duration ) {
@ -1024,8 +1015,7 @@ static void av_read_frame_flush(AVFormatContext *s)
av_parser_close ( st - > parser ) ;
st - > parser = NULL ;
}
st - > last_IP_pts [ 0 ] =
st - > last_IP_pts [ 1 ] = AV_NOPTS_VALUE ;
st - > last_IP_pts = AV_NOPTS_VALUE ;
st - > cur_dts = AV_NOPTS_VALUE ; /* we set the current DTS to an unspecified origin */
}
}
@ -1633,8 +1623,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, offset_t old_offse
for ( i = 0 ; i < ic - > nb_streams ; i + + ) {
st = ic - > streams [ i ] ;
st - > cur_dts = st - > first_dts ;
st - > last_IP_pts [ 0 ] =
st - > last_IP_pts [ 1 ] = AV_NOPTS_VALUE ;
st - > last_IP_pts = AV_NOPTS_VALUE ;
}
}
@ -2193,8 +2182,7 @@ AVStream *av_new_stream(AVFormatContext *s, int id)
/* default pts setting is MPEG-like */
av_set_pts_info ( st , 33 , 1 , 90000 ) ;
st - > last_IP_pts [ 0 ] =
st - > last_IP_pts [ 1 ] = AV_NOPTS_VALUE ;
st - > last_IP_pts = AV_NOPTS_VALUE ;
for ( i = 0 ; i < MAX_REORDER_DELAY + 1 ; i + + )
st - > pts_buffer [ i ] = AV_NOPTS_VALUE ;