diff options
author | Samuel Mira <samuel.mira@qt.io> | 2022-12-16 15:08:16 +0200 |
---|---|---|
committer | Samuel Mira <samuel.mira@qt.io> | 2022-12-19 10:01:25 +0000 |
commit | 8f04cd087e8eb566e85faeed4332bfcd4f9e6579 (patch) | |
tree | 3e2f1f3643b0c499d91eca879b355672f84a7575 /src/plugins | |
parent | 997fb07cff2579615f55ad417ea4a4be4e1bc400 (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.cpp | 18 |
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) |