diff --git a/QtScrcpy/recorder/recorder.cpp b/QtScrcpy/recorder/recorder.cpp index e25b896..e9807fc 100644 --- a/QtScrcpy/recorder/recorder.cpp +++ b/QtScrcpy/recorder/recorder.cpp @@ -12,6 +12,8 @@ # define LAVF_NEW_CODEC_API #endif +static const AVRational SCRCPY_TIME_BASE = {1, 1000000}; // timestamps in us + Recorder::Recorder(const QString& fileName) : m_fileName(fileName) { @@ -68,10 +70,7 @@ bool Recorder::open(AVCodec *inputCodec) outStream->codec->pix_fmt = AV_PIX_FMT_YUV420P; outStream->codec->width = m_declaredFrameSize.width(); outStream->codec->height = m_declaredFrameSize.height(); -#endif - // timestamps in us - outStream->time_base.num = 1; - outStream->time_base.den = 1000000; +#endif int ret = avio_open(&m_formatCtx->pb, m_fileName.toUtf8().toStdString().c_str(), AVIO_FLAG_WRITE); @@ -112,6 +111,7 @@ bool Recorder::write(AVPacket *packet) } m_headerWritten = true; } + recorderRescalePacket(packet); return av_write_frame(m_formatCtx, packet) >= 0; } @@ -161,3 +161,9 @@ bool Recorder::recorderWriteHeader(AVPacket *packet) } return true; } + +void Recorder::recorderRescalePacket(AVPacket *packet) +{ + AVStream *ostream = m_formatCtx->streams[0]; + av_packet_rescale_ts(packet, SCRCPY_TIME_BASE, ostream->time_base); +} diff --git a/QtScrcpy/recorder/recorder.h b/QtScrcpy/recorder/recorder.h index 61b43e8..8183db6 100644 --- a/QtScrcpy/recorder/recorder.h +++ b/QtScrcpy/recorder/recorder.h @@ -22,6 +22,7 @@ public: private: const AVOutputFormat* findMp4Muxer(); bool recorderWriteHeader(AVPacket* packet); + void recorderRescalePacket(AVPacket *packet); private: QString m_fileName = "";