rtpdec: unwrap RTP timestamps for PTS calculation
The timestamp field in RTPDemuxContext was unused before this. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
bb4b0ad83b
commit
12348ca25e
@ -439,7 +439,13 @@ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestam
|
|||||||
|
|
||||||
if (!s->base_timestamp)
|
if (!s->base_timestamp)
|
||||||
s->base_timestamp = timestamp;
|
s->base_timestamp = timestamp;
|
||||||
pkt->pts = s->range_start_offset + timestamp - s->base_timestamp;
|
/* assume that the difference is INT32_MIN < x < INT32_MAX, but allow the first timestamp to exceed INT32_MAX */
|
||||||
|
if (!s->timestamp)
|
||||||
|
s->unwrapped_timestamp += timestamp;
|
||||||
|
else
|
||||||
|
s->unwrapped_timestamp += (int32_t)(timestamp - s->timestamp);
|
||||||
|
s->timestamp = timestamp;
|
||||||
|
pkt->pts = s->unwrapped_timestamp + s->range_start_offset - s->base_timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt,
|
static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt,
|
||||||
|
@ -151,6 +151,7 @@ struct RTPDemuxContext {
|
|||||||
uint32_t timestamp;
|
uint32_t timestamp;
|
||||||
uint32_t base_timestamp;
|
uint32_t base_timestamp;
|
||||||
uint32_t cur_timestamp;
|
uint32_t cur_timestamp;
|
||||||
|
int64_t unwrapped_timestamp;
|
||||||
int64_t range_start_offset;
|
int64_t range_start_offset;
|
||||||
int max_payload_size;
|
int max_payload_size;
|
||||||
struct MpegTSContext *ts; /* only used for MP2T payloads */
|
struct MpegTSContext *ts; /* only used for MP2T payloads */
|
||||||
|
@ -52,6 +52,8 @@ static int rtsp_read_play(AVFormatContext *s)
|
|||||||
rtpctx->last_rtcp_ntp_time = AV_NOPTS_VALUE;
|
rtpctx->last_rtcp_ntp_time = AV_NOPTS_VALUE;
|
||||||
rtpctx->first_rtcp_ntp_time = AV_NOPTS_VALUE;
|
rtpctx->first_rtcp_ntp_time = AV_NOPTS_VALUE;
|
||||||
rtpctx->base_timestamp = 0;
|
rtpctx->base_timestamp = 0;
|
||||||
|
rtpctx->timestamp = 0;
|
||||||
|
rtpctx->unwrapped_timestamp = 0;
|
||||||
rtpctx->rtcp_ts_offset = 0;
|
rtpctx->rtcp_ts_offset = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user