Add V4L2M2M support using SDL renderer

Note: This requires FFmpeg master to work, since it depends on:
https://github.com/FFmpeg/FFmpeg/commit/d61cf1b1ebc2477749d7d7825a072400ed24af9
This commit is contained in:
Cameron Gutman
2020-01-10 20:52:16 -08:00
parent afe6cfc383
commit 5aed8f928a
+33 -12
View File
@@ -543,20 +543,41 @@ bool FFmpegVideoDecoder::initialize(PDECODER_PARAMETERS params)
#endif #endif
#ifdef HAVE_DRM #ifdef HAVE_DRM
// RKMPP is a hardware accelerated decoder that outputs DRI PRIME buffers {
AVCodec* rkmppDecoder; // RKMPP is a hardware accelerated decoder that outputs DRI PRIME buffers
AVCodec* rkmppDecoder;
if (params->videoFormat & VIDEO_FORMAT_MASK_H264) { if (params->videoFormat & VIDEO_FORMAT_MASK_H264) {
rkmppDecoder = avcodec_find_decoder_by_name("h264_rkmpp"); rkmppDecoder = avcodec_find_decoder_by_name("h264_rkmpp");
} }
else { else {
rkmppDecoder = avcodec_find_decoder_by_name("hevc_rkmpp"); rkmppDecoder = avcodec_find_decoder_by_name("hevc_rkmpp");
} }
if (rkmppDecoder != nullptr && if (rkmppDecoder != nullptr &&
tryInitializeRenderer(rkmppDecoder, params, nullptr, tryInitializeRenderer(rkmppDecoder, params, nullptr,
[]() -> IFFmpegRenderer* { return new DrmRenderer(); })) { []() -> IFFmpegRenderer* { return new DrmRenderer(); })) {
return true; return true;
}
}
#endif
#ifdef Q_OS_LINUX
{
AVCodec* v4l2Decoder;
if (params->videoFormat & VIDEO_FORMAT_MASK_H264) {
v4l2Decoder = avcodec_find_decoder_by_name("h264_v4l2m2m");
}
else {
v4l2Decoder = avcodec_find_decoder_by_name("hevc_v4l2m2m");
}
if (v4l2Decoder != nullptr &&
tryInitializeRenderer(v4l2Decoder, params, nullptr,
[]() -> IFFmpegRenderer* { return new SdlRenderer(); })) {
return true;
}
} }
#endif #endif