From 8f04cd087e8eb566e85faeed4332bfcd4f9e6579 Mon Sep 17 00:00:00 2001 From: Samuel Mira Date: Fri, 16 Dec 2022 15:08:16 +0200 Subject: 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 Reviewed-by: Lars Knoll --- .../multimedia/ffmpeg/qffmpeghwaccel_mediacodec.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 +#include } #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(avCodecContext->hw_device_ctx->data); + + if (!deviceContext->hwctx) + return; + + AVMediaCodecDeviceContext *mediaDeviceContext = + reinterpret_cast(deviceContext->hwctx); + + if (!mediaDeviceContext) + return; + + mediaDeviceContext->surface = androidSurfaceTexture->surface(); } TextureSet *MediaCodecTextureConverter::getTextures(AVFrame *frame) -- cgit v1.2.3