From 5be3401af57032c3d47758f21a6371dd887a0896 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Wed, 12 Jun 2024 16:34:48 +0200 Subject: [PATCH] MediaCodec: fall back to software decoding, if hardware decoding doesn't work --- src/api-impl-jni/media/android_media_MediaCodec.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/api-impl-jni/media/android_media_MediaCodec.c b/src/api-impl-jni/media/android_media_MediaCodec.c index 70c37618..a44b7c0a 100644 --- a/src/api-impl-jni/media/android_media_MediaCodec.c +++ b/src/api-impl-jni/media/android_media_MediaCodec.c @@ -127,13 +127,18 @@ static uint32_t get_drm_frame_format(const AVDRMFrameDescriptor *drm_frame_desc) static enum AVPixelFormat get_hw_format(AVCodecContext *ctx, const enum AVPixelFormat *pix_fmts) { - for (size_t i = 0; pix_fmts[i] != AV_PIX_FMT_NONE; i++) { + size_t i; + for (i = 0; pix_fmts[i] != AV_PIX_FMT_NONE; i++) { if (pix_fmts[i] == AV_PIX_FMT_VAAPI || pix_fmts[i] == AV_PIX_FMT_DRM_PRIME) { return pix_fmts[i]; } } fprintf(stderr, "Failed to find HW pixel format\n"); + if (i > 0) { + printf("falling back to software decode\n"); + return pix_fmts[i-1]; // last pixel format should be for software decoding + } return AV_PIX_FMT_NONE; }