diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-07-25 15:53:02 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-08-01 09:08:09 +0000 |
commit | b8842d3aae45d73c181524b499626ef0b15b74ab (patch) | |
tree | 45d4c254caa4723db2c8d3d6ac2e726d0e48c55b | |
parent | 8fad227e6ed111231c6fa52dd12078090e1ee76a (diff) |
Fix setting frame rate to QMediaRecorder
We should consider user-specific value,
not only the frame rate of the source.
Change-Id: I0424d7ac2c803c1cf92cf5b028c89197b86d59b3
Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io>
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit 998a3874b37840320ca5b1e7451218415fa0e847)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder.cpp | 8 | ||||
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder_p.h | 3 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder.cpp b/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder.cpp index d0a1224fe..3c889f0d5 100644 --- a/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder.cpp +++ b/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder.cpp @@ -17,7 +17,7 @@ static Q_LOGGING_CATEGORY(qLcVideoFrameEncoder, "qt.multimedia.ffmpeg.videoencod namespace QFFmpeg { VideoFrameEncoder::VideoFrameEncoder(const QMediaEncoderSettings &encoderSettings, - const QSize &sourceSize, float frameRate, + const QSize &sourceSize, qreal sourceFrameRate, AVPixelFormat sourceFormat, AVPixelFormat sourceSWFormat, AVFormatContext *formatContext) : d(new Data) @@ -26,12 +26,14 @@ VideoFrameEncoder::VideoFrameEncoder(const QMediaEncoderSettings &encoderSetting Q_ASSERT(isHwPixelFormat(sourceFormat) || sourceSWFormat == sourceFormat); d->settings = encoderSettings; - d->frameRate = frameRate; d->sourceSize = sourceSize; if (!d->settings.videoResolution().isValid()) d->settings.setVideoResolution(d->sourceSize); + if (d->settings.videoFrameRate() <= 0.) + d->settings.setVideoFrameRate(sourceFrameRate); + d->sourceFormat = sourceFormat; d->sourceSWFormat = sourceSWFormat; @@ -115,7 +117,7 @@ bool QFFmpeg::VideoFrameEncoder::initCodecContext(AVFormatContext *formatContext d->stream->codecpar->width = resolution.width(); d->stream->codecpar->height = resolution.height(); d->stream->codecpar->sample_aspect_ratio = AVRational{1, 1}; - float requestedRate = d->frameRate; + float requestedRate = d->settings.videoFrameRate(); constexpr int TimeScaleFactor = 1000; // Allows not to follow fixed rate d->stream->time_base = AVRational{ 1, static_cast<int>(requestedRate * TimeScaleFactor) }; diff --git a/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder_p.h b/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder_p.h index 7d9b45b64..eb0a81fe9 100644 --- a/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder_p.h +++ b/src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder_p.h @@ -29,7 +29,6 @@ class VideoFrameEncoder public: QAtomicInt ref = 0; QMediaEncoderSettings settings; - float frameRate = 0.; QSize sourceSize; std::unique_ptr<HWAccel> accel; @@ -50,7 +49,7 @@ class VideoFrameEncoder public: VideoFrameEncoder() = default; VideoFrameEncoder(const QMediaEncoderSettings &encoderSettings, const QSize &sourceSize, - float frameRate, AVPixelFormat sourceFormat, AVPixelFormat swFormat, + qreal sourceFrameRate, AVPixelFormat sourceFormat, AVPixelFormat swFormat, AVFormatContext *formatContext); ~VideoFrameEncoder(); |