[FFmpeg-cvslog] r22918 - in trunk/libavformat: rtpdec.c rtpdec.h rtsp.c
mstorsjo
subversion
Tue Apr 20 09:38:52 CEST 2010
Author: mstorsjo
Date: Tue Apr 20 09:38:52 2010
New Revision: 22918
Log:
Reset RTCP timestamps after seeking, add range start offset to the packets timestamps
If these aren't reset, the timestamps make a huge jump when the next RTCP
is received.
Modified:
trunk/libavformat/rtpdec.c
trunk/libavformat/rtpdec.h
trunk/libavformat/rtsp.c
Modified: trunk/libavformat/rtpdec.c
==============================================================================
--- trunk/libavformat/rtpdec.c Tue Apr 20 09:34:28 2010 (r22917)
+++ trunk/libavformat/rtpdec.c Tue Apr 20 09:38:52 2010 (r22918)
@@ -437,7 +437,7 @@ static void finalize_packet(RTPDemuxCont
delta_timestamp = timestamp - s->last_rtcp_timestamp;
/* convert to the PTS timebase */
addend = av_rescale(s->last_rtcp_ntp_time - s->first_rtcp_ntp_time, s->st->time_base.den, (uint64_t)s->st->time_base.num << 32);
- pkt->pts = addend + delta_timestamp;
+ pkt->pts = s->range_start_offset + addend + delta_timestamp;
}
}
Modified: trunk/libavformat/rtpdec.h
==============================================================================
--- trunk/libavformat/rtpdec.h Tue Apr 20 09:34:28 2010 (r22917)
+++ trunk/libavformat/rtpdec.h Tue Apr 20 09:38:52 2010 (r22918)
@@ -162,6 +162,7 @@ struct RTPDemuxContext {
uint32_t timestamp;
uint32_t base_timestamp;
uint32_t cur_timestamp;
+ int64_t range_start_offset;
int max_payload_size;
struct MpegTSContext *ts; /* only used for MP2T payloads */
int read_buf_index;
Modified: trunk/libavformat/rtsp.c
==============================================================================
--- trunk/libavformat/rtsp.c Tue Apr 20 09:34:28 2010 (r22917)
+++ trunk/libavformat/rtsp.c Tue Apr 20 09:38:52 2010 (r22918)
@@ -1314,6 +1314,7 @@ static int rtsp_read_play(AVFormatContex
{
RTSPState *rt = s->priv_data;
RTSPMessageHeader reply1, *reply = &reply1;
+ int i;
char cmd[1024];
av_log(s, AV_LOG_DEBUG, "hello state=%d\n", rt->state);
@@ -1330,6 +1331,22 @@ static int rtsp_read_play(AVFormatContex
if (reply->status_code != RTSP_STATUS_OK) {
return -1;
}
+ if (reply->range_start != AV_NOPTS_VALUE &&
+ rt->transport == RTSP_TRANSPORT_RTP) {
+ for (i = 0; i < rt->nb_rtsp_streams; i++) {
+ RTSPStream *rtsp_st = rt->rtsp_streams[i];
+ RTPDemuxContext *rtpctx = rtsp_st->transport_priv;
+ AVStream *st = NULL;
+ if (rtsp_st->stream_index >= 0)
+ st = s->streams[rtsp_st->stream_index];
+ rtpctx->last_rtcp_ntp_time = AV_NOPTS_VALUE;
+ rtpctx->first_rtcp_ntp_time = AV_NOPTS_VALUE;
+ if (st)
+ rtpctx->range_start_offset = av_rescale_q(reply->range_start,
+ AV_TIME_BASE_Q,
+ st->time_base);
+ }
+ }
}
rt->state = RTSP_STATE_STREAMING;
return 0;
More information about the ffmpeg-cvslog
mailing list