mirror of https://git.ffmpeg.org/ffmpeg.git
Merge commit 'a87a0acf9b5d27aad032e61eef4973e62a4a6830'
* commit 'a87a0acf9b5d27aad032e61eef4973e62a4a6830': movenc: Make sure the RTP hint tracks have nondecreasing DTS Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
848295c2ee
|
@ -328,6 +328,7 @@ static int write_hint_packets(AVIOContext *out, const uint8_t *data,
|
||||||
uint32_t packet_len = AV_RB32(data);
|
uint32_t packet_len = AV_RB32(data);
|
||||||
uint16_t seq;
|
uint16_t seq;
|
||||||
uint32_t ts;
|
uint32_t ts;
|
||||||
|
int32_t ts_diff;
|
||||||
|
|
||||||
data += 4;
|
data += 4;
|
||||||
size -= 4;
|
size -= 4;
|
||||||
|
@ -350,8 +351,12 @@ static int write_hint_packets(AVIOContext *out, const uint8_t *data,
|
||||||
trk->prev_rtp_ts = ts;
|
trk->prev_rtp_ts = ts;
|
||||||
/* Unwrap the 32-bit RTP timestamp that wraps around often
|
/* Unwrap the 32-bit RTP timestamp that wraps around often
|
||||||
* into a not (as often) wrapping 64-bit timestamp. */
|
* into a not (as often) wrapping 64-bit timestamp. */
|
||||||
trk->cur_rtp_ts_unwrapped += (int32_t) (ts - trk->prev_rtp_ts);
|
ts_diff = ts - trk->prev_rtp_ts;
|
||||||
trk->prev_rtp_ts = 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)
|
if (*pts == AV_NOPTS_VALUE)
|
||||||
*pts = trk->cur_rtp_ts_unwrapped;
|
*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_wb32(out, 0); /* relative_time */
|
||||||
avio_write(out, data, 2); /* RTP header */
|
avio_write(out, data, 2); /* RTP header */
|
||||||
avio_wb16(out, seq); /* RTPsequenceseed */
|
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);
|
entries_pos = avio_tell(out);
|
||||||
avio_wb16(out, 0); /* entry count */
|
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;
|
data += 12;
|
||||||
size -= 12;
|
size -= 12;
|
||||||
|
|
Loading…
Reference in New Issue