mirror of
https://github.com/libretro/Lakka-LibreELEC.git
synced 2024-12-16 13:48:56 +00:00
35f659918f
Signed-off-by: Matthias Reichl <hias@horus.com>
55 lines
2.4 KiB
Diff
55 lines
2.4 KiB
Diff
From 7d18280622c8ac12dbf1f6d4d5ca9589e1a61b02 Mon Sep 17 00:00:00 2001
|
|
From: popcornmix <popcornmix@gmail.com>
|
|
Date: Sat, 11 Sep 2021 14:03:05 +0100
|
|
Subject: [PATCH 02/12] CDVDVideoCodecDRMPRIME: Also support YUV420 buffers
|
|
|
|
CDVDVideoCodecDRMPRIME: Add support for deinterlace of sw decoded buffers
|
|
|
|
Need to call SetDimensions earlier and store the drm descriptor in expected place
|
|
---
|
|
.../DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp | 14 ++++++++++++--
|
|
1 file changed, 12 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
|
index f5e26b203c..90f1fb07a9 100644
|
|
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
|
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecDRMPRIME.cpp
|
|
@@ -622,7 +622,7 @@ bool CDVDVideoCodecDRMPRIME::SetPictureParams(VideoPicture* pVideoPicture)
|
|
pVideoPicture->videoBuffer = nullptr;
|
|
}
|
|
|
|
- if (IsSupportedHwFormat(static_cast<AVPixelFormat>(m_pFrame->format)))
|
|
+ if (m_pFrame->format == AV_PIX_FMT_DRM_PRIME)
|
|
{
|
|
CVideoBufferDRMPRIMEFFmpeg* buffer =
|
|
dynamic_cast<CVideoBufferDRMPRIMEFFmpeg*>(m_videoBufferPool->Get());
|
|
@@ -700,7 +700,7 @@ bool CDVDVideoCodecDRMPRIME::FilterOpen(const std::string& filters, bool test)
|
|
|
|
const AVFilter* srcFilter = avfilter_get_by_name("buffer");
|
|
const AVFilter* outFilter = avfilter_get_by_name("buffersink");
|
|
- enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_DRM_PRIME, AV_PIX_FMT_NONE };
|
|
+ enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_DRM_PRIME, AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE };
|
|
|
|
std::string args = StringUtils::Format("video_size={}x{}:pix_fmt={}:time_base={}/{}:"
|
|
"pixel_aspect={}/{}",
|
|
@@ -848,6 +848,16 @@ void CDVDVideoCodecDRMPRIME::FilterClose()
|
|
|
|
CDVDVideoCodec::VCReturn CDVDVideoCodecDRMPRIME::ProcessFilterIn()
|
|
{
|
|
+ // sw decoded buffers need cache flush and for descripter to be set
|
|
+ if (!IsSupportedHwFormat(static_cast<AVPixelFormat>(m_pFrame->format)) && m_pFrame->opaque != nullptr)
|
|
+ {
|
|
+ CVideoBufferDMA* buffer = static_cast<CVideoBufferDMA*>(m_pFrame->opaque);
|
|
+ buffer->SetDimensions(m_pFrame->width, m_pFrame->height);
|
|
+ buffer->SyncEnd();
|
|
+ auto descriptor = buffer->GetDescriptor();
|
|
+ m_pFrame->data[0] = reinterpret_cast<uint8_t*>(descriptor);
|
|
+ }
|
|
+
|
|
int ret = av_buffersrc_add_frame(m_pFilterIn, m_pFrame);
|
|
if (ret < 0)
|
|
{
|
|
--
|
|
2.39.2
|
|
|