summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2022-11-15 11:41:36 +0100
committerArtem Dyomin <artem.dyomin@qt.io>2022-11-16 13:00:46 +0100
commit25813d5de887e94b4470f9d55297d9d3e645096a (patch)
tree3a4ddbabda98f6fc6c1e80f84e94c7f33b03a5a1 /src
parent64a02c8472089bd4c2f1df625042739dc2a1bff4 (diff)
Define for Android only force creating hw frames ctx for video renderer
In general case, force creating of the context is not correct since ffmpeg can use additional data fields if hw_frames_ctx exists. Ideally, the context should be created on ffmpeg side. The investigation should be done under QTBUG-108446 (fix ffmpeg side or this code). Read more in the task description. We encounter the problem after fixing of HWAccel::createFramesContext, see codereview.qt-project.org/c/qt/qtmultimedia/+/442644, force creation of the context didn't work before anyway. This commit is required in order to integrate codereview.qt-project.org/c/qt/qtmultimedia/+/442644 Task-number: QTBUG-108446 Change-Id: I8c1d80761f887b4f9abd0b44050e42372764b488 Reviewed-by: Samuel Mira <samuel.mira@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/multimedia/ffmpeg/playbackengine/qffmpegvideorenderer.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegvideorenderer.cpp b/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegvideorenderer.cpp
index 4585a789d..4679aec1b 100644
--- a/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegvideorenderer.cpp
+++ b/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegvideorenderer.cpp
@@ -24,7 +24,12 @@ VideoRenderer::RenderingResult VideoRenderer::renderInternal(Frame frame)
// qCDebug(qLcVideoRenderer) << "RHI:" << accel.isNull() << accel.rhi() << sink->rhi();
- // in practice this only happens with mediacodec
+#ifdef Q_OS_ANDROID
+ // QTBUG-108446
+ // In general case, just creation of frames context is not correct since
+ // frames may require additional specific data for hw contexts, so
+ // just setting of hw_frames_ctx is not enough.
+ // TODO: investigate the case in order to remove or fix the code.
if (frame.codec()->hwAccel() && !frame.avFrame()->hw_frames_ctx) {
HWAccel *hwaccel = frame.codec()->hwAccel();
AVFrame *avframe = frame.avFrame();
@@ -35,6 +40,7 @@ VideoRenderer::RenderingResult VideoRenderer::renderInternal(Frame frame)
if (hwaccel->hwFramesContext())
avframe->hw_frames_ctx = av_buffer_ref(hwaccel->hwFramesContextAsBuffer());
}
+#endif
auto buffer = std::make_unique<QFFmpegVideoBuffer>(frame.takeAVFrame());
QVideoFrameFormat format(buffer->size(), buffer->pixelFormat());