summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-12-16 15:08:16 +0200
committerSamuel Mira <samuel.mira@qt.io>2022-12-19 10:01:25 +0000
commit8f04cd087e8eb566e85faeed4332bfcd4f9e6579 (patch)
tree3e2f1f3643b0c499d91eca879b355672f84a7575 /src/plugins
parent997fb07cff2579615f55ad417ea4a4be4e1bc400 (diff)
Android: fix playback using the latest ffmpeg build
Found and added configuration to use a surface in ffmpeg with the recent maste build. Playback is fully working now. Fixes: QTBUG-99997 Pick-to: 6.5 Change-Id: I72b9cfff3738986d220dfb002fbc4ba7119aa9d9 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpeghwaccel_mediacodec.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_mediacodec.cpp b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_mediacodec.cpp
index 20a06c3ab..bb3853d82 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_mediacodec.cpp
+++ b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_mediacodec.cpp
@@ -8,6 +8,7 @@
extern "C" {
#include <libavcodec/mediacodec.h>
+#include <libavutil/hwcontext_mediacodec.h>
}
#if !defined(Q_OS_ANDROID)
@@ -33,6 +34,23 @@ void MediaCodecTextureConverter::setupDecoderSurface(AVCodecContext *avCodecCont
{
AVMediaCodecContext *mediacodecContext = av_mediacodec_alloc_context();
av_mediacodec_default_init(avCodecContext, mediacodecContext, androidSurfaceTexture->surface());
+
+ if (!avCodecContext->hw_device_ctx || !avCodecContext->hw_device_ctx->data)
+ return;
+
+ AVHWDeviceContext *deviceContext =
+ reinterpret_cast<AVHWDeviceContext *>(avCodecContext->hw_device_ctx->data);
+
+ if (!deviceContext->hwctx)
+ return;
+
+ AVMediaCodecDeviceContext *mediaDeviceContext =
+ reinterpret_cast<AVMediaCodecDeviceContext *>(deviceContext->hwctx);
+
+ if (!mediaDeviceContext)
+ return;
+
+ mediaDeviceContext->surface = androidSurfaceTexture->surface();
}
TextureSet *MediaCodecTextureConverter::getTextures(AVFrame *frame)