summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2023-07-25 15:53:02 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-08-01 09:08:09 +0000
commitb8842d3aae45d73c181524b499626ef0b15b74ab (patch)
tree45d4c254caa4723db2c8d3d6ac2e726d0e48c55b
parent8fad227e6ed111231c6fa52dd12078090e1ee76a (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.cpp8
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegvideoframeencoder_p.h3
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();