20#include <QtMultimedia/private/qtaggedtime_p.h>
21#include <QtFFmpegMediaPluginImpl/private/qffmpeg_p.h>
29using namespace std::chrono_literals;
37struct UserTrackTimeTag;
42struct AVStreamTimeTag;
47struct AVContextTimeTag;
58 return AVContextDuration(
59 formatContext->start_time == AV_NOPTS_VALUE ? 0 : formatContext->start_time);
64 return UserTrackPosition(trackPosition.get() / 1000);
69 return UserTrackDuration(trackDuration.get() / 1000);
74 return TrackDuration(contextDuration.get() * 1'000'000 / AV_TIME_BASE);
79 return TrackPosition(userTrackPosition.get() * 1000);
84 return TrackDuration(userTrackDuration.get() * 1000);
89 return TrackDuration(timeStampUs(streamDuration.get(), avStream->time_base).value_or(0));
93 const AVFormatContext *formatContext)
95 const auto duration = toTrackDuration(streamPosition.asDuration(), avStream)
96 - toTrackDuration(contextStartOffset(formatContext));
97 return duration.asTimePoint();
101 const AVFormatContext *formatContext)
104 return AVContextPosition(trackPosition.get() * AV_TIME_BASE / 1'000'000)
105 + contextStartOffset(formatContext);
UserTrackDuration toUserDuration(TrackDuration trackDuration)
TrackDuration toTrackDuration(AVStreamDuration streamDuration, const AVStream *avStream)
AVContextPosition toContextPosition(TrackPosition trackPosition, const AVFormatContext *formatContext)
AVContextDuration contextStartOffset(const AVFormatContext *formatContext)
std::conditional_t< QT_FFMPEG_AVIO_WRITE_CONST, const uint8_t *, uint8_t * > AvioWriteBufferType
std::chrono::steady_clock SteadyClock
TrackDuration toTrackDuration(AVContextDuration contextDuration)
UserTrackPosition toUserPosition(TrackPosition trackPosition)
TrackPosition toTrackPosition(AVStreamPosition streamPosition, const AVStream *avStream, const AVFormatContext *formatContext)
TrackPosition toTrackPosition(UserTrackPosition userTrackPosition)