mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2026-01-06 06:05:32 +01:00
movenc: Apply offsets on timestamps when peeking into interleaving queues
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
@@ -357,6 +357,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
static int write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
int ret;
|
||||
// If the timestamp offsetting below is adjusted, adjust
|
||||
// ff_interleaved_peek similarly.
|
||||
if (s->avoid_negative_ts > 0) {
|
||||
AVRational time_base = s->streams[pkt->stream_index]->time_base;
|
||||
int64_t offset = 0;
|
||||
@@ -614,15 +616,27 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
|
||||
}
|
||||
}
|
||||
|
||||
const AVPacket *ff_interleaved_peek(AVFormatContext *s, int stream)
|
||||
int ff_interleaved_peek(AVFormatContext *s, int stream,
|
||||
AVPacket *pkt, int add_offset)
|
||||
{
|
||||
AVPacketList *pktl = s->internal->packet_buffer;
|
||||
while (pktl) {
|
||||
if (pktl->pkt.stream_index == stream)
|
||||
return &pktl->pkt;
|
||||
if (pktl->pkt.stream_index == stream) {
|
||||
*pkt = pktl->pkt;
|
||||
if (add_offset && s->internal->offset != AV_NOPTS_VALUE) {
|
||||
int64_t offset = av_rescale_q(s->internal->offset,
|
||||
s->internal->offset_timebase,
|
||||
s->streams[stream]->time_base);
|
||||
if (pkt->dts != AV_NOPTS_VALUE)
|
||||
pkt->dts += offset;
|
||||
if (pkt->pts != AV_NOPTS_VALUE)
|
||||
pkt->pts += offset;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
pktl = pktl->next;
|
||||
}
|
||||
return NULL;
|
||||
return AVERROR(ENOENT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user