mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge pull request #1119 from vpeter4/imx6-rc2.1
imx6: update kodi patches, second pass
This commit is contained in:
commit
12565b03fc
@ -1,15 +1,15 @@
|
||||
https://github.com/OpenBricks/openbricks/tree/krypton-glibc
|
||||
https://github.com/OpenBricks/openbricks/tree/krypton-glibc/packages/multimedia/kodi/patches
|
||||
https://github.com/OpenBricks/openbricks/tree/6a1b18f7749966324962061edc2ab844c23ca330/packages/multimedia/kodi/patches
|
||||
https://github.com/OpenBricks/openbricks/tree/72ff2ef92130c16863f4c87c3627440e60e566e9/packages/multimedia/kodi/patches
|
||||
|
||||
==============================================================
|
||||
file 0034-Use-uint32_t-for-physical-addresses.patch
|
||||
file 0034-IMXCODEC-Use-uint32_t-for-physical-addresses.patch
|
||||
==============================================================
|
||||
|
||||
From fc99366e9fb1d9f8c83875cdb604bf707d0cfd29 Mon Sep 17 00:00:00 2001
|
||||
From 2dc612adfcc74c6439e5df47aba2cf63573f93f1 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Sat, 24 Sep 2016 15:36:23 +0200
|
||||
Subject: [PATCH] Use uint32_t for physical addresses
|
||||
Subject: [PATCH] IMXCODEC: Use uint32_t for physical addresses
|
||||
|
||||
---
|
||||
xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp | 2 +-
|
||||
@ -18,10 +18,10 @@ Subject: [PATCH] Use uint32_t for physical addresses
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index e3fa72e..d55a6b7 100644
|
||||
index b1147d2..705b4a9 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -1198,7 +1198,7 @@
|
||||
@@ -1198,7 +1198,7 @@ CDVDVideoCodecIMXBuffer::CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo,
|
||||
iHeight = (((frameInfo->pExtInfo->nFrmHeight) + 15) & ~15);
|
||||
|
||||
pVirtAddr = m_frameBuffer->pbufVirtY;
|
||||
@ -31,10 +31,10 @@ index e3fa72e..d55a6b7 100644
|
||||
#ifdef IMX_INPUT_FORMAT_I420
|
||||
iFormat = _4CC('I', '4', '2', '0');
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
index 6a4f638..69a74fe 100644
|
||||
index 32e3a6c..fdac8ec 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
@@ -187,7 +187,7 @@
|
||||
@@ -187,7 +187,7 @@ private:
|
||||
int m_fbLineLength;
|
||||
int m_fbPageSize;
|
||||
int m_fbPhysSize;
|
||||
@ -44,10 +44,10 @@ index 6a4f638..69a74fe 100644
|
||||
struct fb_var_screeninfo m_fbVar;
|
||||
int m_ipuHandle;
|
||||
diff --git a/xbmc/linux/imx/IMX.h b/xbmc/linux/imx/IMX.h
|
||||
index 8d13333..7363409 100644
|
||||
index a269af0..2bc6761 100644
|
||||
--- a/xbmc/linux/imx/IMX.h
|
||||
+++ b/xbmc/linux/imx/IMX.h
|
||||
@@ -182,7 +182,7 @@
|
||||
@@ -182,7 +182,7 @@ public:
|
||||
public:
|
||||
uint32_t iWidth;
|
||||
uint32_t iHeight;
|
||||
@ -61,23 +61,23 @@ index 8d13333..7363409 100644
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0035-Fix-page-counting-avoid-compiler-warning.patch
|
||||
file 0035-IMXCODEC-Fix-page-counting-avoid-compiler-warning.patch
|
||||
==============================================================
|
||||
|
||||
From 3c339bb9e574621d08c7d203582b3130211aff5a Mon Sep 17 00:00:00 2001
|
||||
From 527cc00d7b56f01277be9abce0de48a63f388dd7 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Sat, 24 Sep 2016 15:39:38 +0200
|
||||
Subject: [PATCH] Fix page counting, avoid compiler warning
|
||||
Subject: [PATCH] IMXCODEC: Fix page counting, avoid compiler warning
|
||||
|
||||
---
|
||||
xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index d55a6b7..1ea4922 100644
|
||||
index 705b4a9..9b7a9ea 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -1562,15 +1562,15 @@ ipu_motion_sel CIMXContext::SetIPUMotion(std::string &strImethod)
|
||||
@@ -1562,15 +1562,15 @@ void CIMXContext::SetIPUMotion(EINTERLACEMETHOD imethod)
|
||||
void CIMXContext::Blit(CIMXBuffer *source_p, CIMXBuffer *source, const CRect &srcRect,
|
||||
const CRect &dstRect, uint8_t fieldFmt, int page)
|
||||
{
|
||||
@ -101,13 +101,13 @@ index d55a6b7..1ea4922 100644
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0042-Honour-forced-aspect-ratio-hint.patch
|
||||
file 0036-IMXCODEC-Honour-forced-aspect-ratio-hint.patch
|
||||
==============================================================
|
||||
|
||||
From 8542fadfce7bfa1c7691403029a81682c389c8c2 Mon Sep 17 00:00:00 2001
|
||||
From eab2f97c91ec724f1c30af5b6d570d73e76689c8 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Mon, 3 Oct 2016 18:08:34 +0200
|
||||
Subject: [PATCH] Honour forced aspect ratio hint
|
||||
Subject: [PATCH] IMXCODEC: Honour forced aspect ratio hint
|
||||
|
||||
---
|
||||
xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp | 6 +++++-
|
||||
@ -115,10 +115,10 @@ Subject: [PATCH] Honour forced aspect ratio hint
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index 74f4ae4..155710a 100644
|
||||
index 9b7a9ea..ac2ad8d 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -546,6 +546,8 @@
|
||||
@@ -546,6 +546,8 @@ bool CIMXCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, std::stri
|
||||
#endif
|
||||
|
||||
m_warnOnce = true;
|
||||
@ -127,7 +127,7 @@ index 74f4ae4..155710a 100644
|
||||
switch(m_hints.codec)
|
||||
{
|
||||
case AV_CODEC_ID_MPEG1VIDEO:
|
||||
@@ -1160,7 +1162,9 @@
|
||||
@@ -1160,7 +1162,9 @@ bool CIMXCodec::GetPicture(DVDVideoPicture* pDvdVideoPicture)
|
||||
pDvdVideoPicture->iWidth = pDvdVideoPicture->IMXBuffer->m_pctWidth;
|
||||
pDvdVideoPicture->iHeight = pDvdVideoPicture->IMXBuffer->m_pctHeight;
|
||||
|
||||
@ -139,10 +139,10 @@ index 74f4ae4..155710a 100644
|
||||
|
||||
pDvdVideoPicture->pts = pDvdVideoPicture->IMXBuffer->GetPts();
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
index 22b34d7..b91cdc2 100644
|
||||
index fdac8ec..3d26a50 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
@@ -380,6 +380,7 @@
|
||||
@@ -380,6 +380,7 @@ protected:
|
||||
int m_codecControlFlags;
|
||||
CCriticalSection m_signalLock;
|
||||
CCriticalSection m_queuesLock;
|
||||
@ -155,23 +155,23 @@ index 22b34d7..b91cdc2 100644
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0043-Cleanup-mediainfo-logging.patch
|
||||
file 0037-IMXCODEC-Cleanup-mediainfo-logging.patch
|
||||
==============================================================
|
||||
|
||||
From 5a26b1e3d341dd2591f6315f9fc97b5677105bf8 Mon Sep 17 00:00:00 2001
|
||||
From 2ca3bdccc4f4723297a51abb1dbe09b97d7115d0 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Mon, 3 Oct 2016 18:11:31 +0200
|
||||
Subject: [PATCH] Cleanup mediainfo logging
|
||||
Subject: [PATCH] IMXCODEC: Cleanup mediainfo logging
|
||||
|
||||
---
|
||||
.../DVDCodecs/Video/DVDVideoCodecIMX.cpp | 52 +++++++++++-----------
|
||||
1 file changed, 26 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index 155710a..3dc63d5 100644
|
||||
index ac2ad8d..810537f 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -504,8 +504,6 @@ bool CIMXCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, std::stri
|
||||
@@ -506,8 +506,6 @@ bool CIMXCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, std::stri
|
||||
}
|
||||
|
||||
m_hints = hints;
|
||||
@ -180,7 +180,7 @@ index 155710a..3dc63d5 100644
|
||||
|
||||
int param = 0;
|
||||
SetVPUParams(VPU_DEC_CONF_INPUTTYPE, ¶m);
|
||||
@@ -514,32 +512,31 @@ bool CIMXCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, std::stri
|
||||
@@ -516,32 +514,31 @@ bool CIMXCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, std::stri
|
||||
#ifdef MEDIAINFO
|
||||
if (g_advancedSettings.CanLogComponent(LOGVIDEO))
|
||||
{
|
||||
@ -207,19 +207,12 @@ index 155710a..3dc63d5 100644
|
||||
+ CLog::Log(LOGNOTICE, "MEDIAINFO: PTS_invalid %d\n", m_hints.ptsinvalid);
|
||||
+ CLog::Log(LOGNOTICE, "MEDIAINFO: Tag %d\n", m_hints.codec_tag);
|
||||
+ CLog::Log(LOGNOTICE, "MEDIAINFO: %dx%d\n", m_hints.width, m_hints.height);
|
||||
+
|
||||
+ char str_tag[128];
|
||||
+ av_get_codec_tag_string(str_tag, sizeof(str_tag), m_hints.codec_tag);
|
||||
+ CLog::Log(LOGNOTICE, "MEDIAINFO: Tag fourcc %s\n", str_tag);
|
||||
+
|
||||
+ if (m_hints.extrasize)
|
||||
+ {
|
||||
+ char buf[4096];
|
||||
|
||||
- for (unsigned int i=0; i < m_hints.extrasize; i++)
|
||||
- sprintf(buf+i*2, "%02x", ((uint8_t*)m_hints.extradata)[i]);
|
||||
+ for (unsigned int i=0; i < m_hints.extrasize; i++)
|
||||
+ sprintf(buf+i*2, "%02x", ((uint8_t*)m_hints.extradata)[i]);
|
||||
+ char str_tag[128];
|
||||
+ av_get_codec_tag_string(str_tag, sizeof(str_tag), m_hints.codec_tag);
|
||||
+ CLog::Log(LOGNOTICE, "MEDIAINFO: Tag fourcc %s\n", str_tag);
|
||||
|
||||
- if (g_advancedSettings.CanLogComponent(LOGVIDEO))
|
||||
- CLog::Log(LOGDEBUG, "Decode: MEDIAINFO: %s extradata %d %s\n", *(char*)m_hints.extradata == 1 ? "AnnexB" : "avcC", m_hints.extrasize, buf);
|
||||
@ -228,6 +221,13 @@ index 155710a..3dc63d5 100644
|
||||
- {
|
||||
- CLog::Log(LOGDEBUG, "Decode: MEDIAINFO: %d / %d \n", m_hints.width, m_hints.height);
|
||||
- CLog::Log(LOGDEBUG, "Decode: aspect %f - forced aspect %d\n", m_hints.aspect, m_hints.forced_aspect);
|
||||
+ if (m_hints.extrasize)
|
||||
+ {
|
||||
+ char buf[4096];
|
||||
+
|
||||
+ for (unsigned int i=0; i < m_hints.extrasize; i++)
|
||||
+ sprintf(buf+i*2, "%02x", ((uint8_t*)m_hints.extradata)[i]);
|
||||
+
|
||||
+ CLog::Log(LOGNOTICE, "MEDIAINFO: %s extradata %d %s\n", *(char*)m_hints.extradata == 1 ? "AnnexB" : "avcC", m_hints.extrasize, buf);
|
||||
+ }
|
||||
+
|
||||
@ -236,7 +236,7 @@ index 155710a..3dc63d5 100644
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -626,6 +623,9 @@ bool CIMXCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, std::stri
|
||||
@@ -634,6 +631,9 @@ bool CIMXCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options, std::stri
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -250,6 +250,571 @@ index 155710a..3dc63d5 100644
|
||||
1.9.1
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0038-IMXCODEC-Remove-m_frameInfo-member-variable-from-CIM.patch
|
||||
==============================================================
|
||||
|
||||
From 9a21a0256d49f2f9d44a08d077ef2dbc393161f6 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Sun, 1 Jan 2017 11:15:09 +0100
|
||||
Subject: [PATCH] IMXCODEC: Remove m_frameInfo member variable from CIMXCodec
|
||||
class
|
||||
|
||||
---
|
||||
xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp | 10 ++++++----
|
||||
xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h | 2 +-
|
||||
2 files changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index 810537f..ee7178a 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -855,6 +855,7 @@ void CIMXCodec::AddExtraData(VpuBufferNode *bn, bool force)
|
||||
void CIMXCodec::Process()
|
||||
{
|
||||
VpuDecFrameLengthInfo frameLengthInfo;
|
||||
+ VpuDecOutFrameInfo frameInfo;
|
||||
VpuBufferNode inData;
|
||||
VpuBufferNode dummy;
|
||||
VpuDecRetCode ret;
|
||||
@@ -1002,16 +1003,16 @@ void CIMXCodec::Process()
|
||||
if (!VPU_DecGetConsumedFrameInfo(m_vpuHandle, &frameLengthInfo) && frameLengthInfo.pFrame)
|
||||
m_pts[frameLengthInfo.pFrame] = task->demux.pts;
|
||||
|
||||
- if (m_decRet & CLASS_PICTURE && getOutputFrame(&m_frameInfo))
|
||||
+ if (m_decRet & CLASS_PICTURE && getOutputFrame(&frameInfo))
|
||||
{
|
||||
++m_nrOut;
|
||||
- CDVDVideoCodecIMXBuffer *buffer = new CDVDVideoCodecIMXBuffer(&m_frameInfo, m_fps, m_decOpenParam.nMapType);
|
||||
+ CDVDVideoCodecIMXBuffer *buffer = new CDVDVideoCodecIMXBuffer(&frameInfo, m_fps, m_decOpenParam.nMapType);
|
||||
|
||||
/* quick & dirty fix to get proper timestamping for VP8 codec */
|
||||
if (m_decOpenParam.CodecFormat == VPU_V_VP8)
|
||||
buffer->SetPts(task->demux.pts);
|
||||
else
|
||||
- buffer->SetPts(m_pts[m_frameInfo.pDisplayFrameBuf]);
|
||||
+ buffer->SetPts(m_pts[frameInfo.pDisplayFrameBuf]);
|
||||
|
||||
buffer->SetDts(task->demux.dts);
|
||||
|
||||
@@ -1162,7 +1163,7 @@ bool CIMXCodec::GetPicture(DVDVideoPicture* pDvdVideoPicture)
|
||||
pDvdVideoPicture->iWidth = pDvdVideoPicture->IMXBuffer->m_pctWidth;
|
||||
pDvdVideoPicture->iHeight = pDvdVideoPicture->IMXBuffer->m_pctHeight;
|
||||
|
||||
- int ratio = m_forcedWidthHeightRatio ? m_forcedWidthHeightRatio : m_frameInfo.pExtInfo->nQ16ShiftWidthDivHeightRatio;
|
||||
+ int ratio = m_forcedWidthHeightRatio ? m_forcedWidthHeightRatio : pDvdVideoPicture->IMXBuffer->m_widthHeightRatio;
|
||||
|
||||
pDvdVideoPicture->iDisplayWidth = ((pDvdVideoPicture->iWidth * ratio) + 32767) >> 16;
|
||||
pDvdVideoPicture->iDisplayHeight = pDvdVideoPicture->iHeight;
|
||||
@@ -1196,6 +1197,7 @@ CDVDVideoCodecIMXBuffer::CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo,
|
||||
{
|
||||
m_pctWidth = frameInfo->pExtInfo->FrmCropRect.nRight - frameInfo->pExtInfo->FrmCropRect.nLeft;
|
||||
m_pctHeight = frameInfo->pExtInfo->FrmCropRect.nBottom - frameInfo->pExtInfo->FrmCropRect.nTop;
|
||||
+ m_widthHeightRatio = frameInfo->pExtInfo->nQ16ShiftWidthDivHeightRatio;
|
||||
|
||||
// Some codecs (VC1?) lie about their frame size (mod 16). Adjust...
|
||||
iWidth = (((frameInfo->pExtInfo->nFrmWidth) + 15) & ~15);
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
index 3d26a50..aeb1692 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
@@ -268,6 +268,7 @@ public:
|
||||
protected:
|
||||
unsigned int m_pctWidth;
|
||||
unsigned int m_pctHeight;
|
||||
+ int m_widthHeightRatio;
|
||||
|
||||
private:
|
||||
double m_pts;
|
||||
@@ -374,7 +375,6 @@ protected:
|
||||
std::unordered_map<VpuFrameBuffer*,double>
|
||||
m_pts;
|
||||
double m_lastPTS;
|
||||
- VpuDecOutFrameInfo m_frameInfo; // Store last VPU output frame info
|
||||
CBitstreamConverter *m_converter; // H264 annex B converter
|
||||
bool m_warnOnce; // Track warning messages to only warn once
|
||||
int m_codecControlFlags;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0039-IMXCODEC-Add-enum-VPU_MAPTYPE.patch
|
||||
==============================================================
|
||||
|
||||
From 951095cdf14af35d0d2aefcd4122da1699075616 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Sun, 1 Jan 2017 11:32:11 +0100
|
||||
Subject: [PATCH] IMXCODEC: Add enum VPU_MAPTYPE
|
||||
|
||||
---
|
||||
.../cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp | 14 +++++++-------
|
||||
xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h | 9 ++++++++-
|
||||
2 files changed, 15 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index ee7178a..3e77132 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -780,7 +780,7 @@ int CIMXCodec::Decode(BYTE *pData, int iSize, double dts, double pts)
|
||||
else
|
||||
m_fps = 60;
|
||||
|
||||
- m_decOpenParam.nMapType = 1;
|
||||
+ m_decOpenParam.nMapType = MAPTYPE_TILED_FRAME;
|
||||
|
||||
ptrn.Flush();
|
||||
g_IMXCodec->Create();
|
||||
@@ -968,9 +968,9 @@ void CIMXCodec::Process()
|
||||
if (!VpuFreeBuffers(false) || !VpuAllocFrameBuffers())
|
||||
ExitError("VPU error while registering frame buffers");
|
||||
|
||||
- if (m_initInfo.nInterlace && m_fps >= 49 && m_decOpenParam.nMapType == 1)
|
||||
+ if (m_initInfo.nInterlace && m_fps >= 49 && m_decOpenParam.nMapType == MAPTYPE_TILED_FRAME)
|
||||
{
|
||||
- m_decOpenParam.nMapType = 0;
|
||||
+ m_decOpenParam.nMapType = MAPTYPE_LINEAR_FRAME;
|
||||
Dispose();
|
||||
VpuOpen();
|
||||
continue;
|
||||
@@ -1188,7 +1188,7 @@ bool CIMXCodec::IsCurrentThread() const
|
||||
}
|
||||
|
||||
/*******************************************/
|
||||
-CDVDVideoCodecIMXBuffer::CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo, double fps, int map)
|
||||
+CDVDVideoCodecIMXBuffer::CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo, double fps, int mapType)
|
||||
: m_dts(DVD_NOPTS_VALUE)
|
||||
, m_fieldType(frameInfo->eFieldType)
|
||||
, m_frameBuffer(frameInfo->pDisplayFrameBuf)
|
||||
@@ -1209,9 +1209,9 @@ CDVDVideoCodecIMXBuffer::CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo,
|
||||
#ifdef IMX_INPUT_FORMAT_I420
|
||||
iFormat = _4CC('I', '4', '2', '0');
|
||||
#else
|
||||
- iFormat = map == 1 ? _4CC('T', 'N', 'V', 'P'):
|
||||
- map == 0 ? _4CC('N', 'V', '1', '2'):
|
||||
- _4CC('T', 'N', 'V', 'F');
|
||||
+ iFormat = mapType == MAPTYPE_TILED_FRAME ? _4CC('T', 'N', 'V', 'P'):
|
||||
+ mapType == MAPTYPE_LINEAR_FRAME ? _4CC('N', 'V', '1', '2'):
|
||||
+ _4CC('T', 'N', 'V', 'F');
|
||||
#endif
|
||||
m_fps = fps;
|
||||
#if defined(IMX_PROFILE) || defined(IMX_PROFILE_BUFFERS) || defined(TRACE_FRAMES)
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
index aeb1692..22da54d 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
@@ -84,6 +84,13 @@ enum RENDER_TASK
|
||||
RENDER_TASK_CAPTURE = -2,
|
||||
};
|
||||
|
||||
+enum VPU_MAPTYPE
|
||||
+{
|
||||
+ MAPTYPE_LINEAR_FRAME = 0,
|
||||
+ MAPTYPE_TILED_FRAME = 1,
|
||||
+ MAPTYPE_TILED_FIELD = 2,
|
||||
+};
|
||||
+
|
||||
#define CLASS_PICTURE (VPU_DEC_OUTPUT_DIS | VPU_DEC_OUTPUT_MOSAIC_DIS)
|
||||
#define CLASS_NOBUF (VPU_DEC_OUTPUT_NODIS | VPU_DEC_NO_ENOUGH_BUF | VPU_DEC_OUTPUT_REPEAT)
|
||||
#define CLASS_FORCEBUF (VPU_DEC_OUTPUT_EOS | VPU_DEC_NO_ENOUGH_INBUF)
|
||||
@@ -244,7 +251,7 @@ class CDVDVideoCodecIMXBuffer : public CIMXBuffer
|
||||
friend class CIMXCodec;
|
||||
friend class CIMXContext;
|
||||
public:
|
||||
- CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo, double fps, int map);
|
||||
+ CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo, double fps, int mapType);
|
||||
virtual ~CDVDVideoCodecIMXBuffer();
|
||||
|
||||
// reference counting
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0040-IMXCODEC-Prevent-lkFIFO-from-returning-uninitialized.patch
|
||||
==============================================================
|
||||
|
||||
From c458ee2820562d7f7e6d015a6ff25c7ef126bb88 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Sun, 1 Jan 2017 11:47:08 +0100
|
||||
Subject: [PATCH] IMXCODEC: Prevent lkFIFO from returning uninitialized data
|
||||
|
||||
---
|
||||
.../VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp | 15 +++++++++++----
|
||||
xbmc/linux/imx/IMX.h | 16 ++++++++--------
|
||||
2 files changed, 19 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index 3e77132..773c878 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -889,7 +889,7 @@ void CIMXCodec::Process()
|
||||
{
|
||||
RecycleFrameBuffers();
|
||||
SAFE_DELETE(task);
|
||||
- if (!(task = m_decInput.pop()))
|
||||
+ if (!m_decInput.pop(task))
|
||||
task = new VPUTask();
|
||||
|
||||
#if defined(IMX_PROFILE) || defined(IMX_PROFILE_BUFFERS)
|
||||
@@ -1048,7 +1048,11 @@ void CIMXCodec::Process()
|
||||
|
||||
if (m_decRet & VPU_DEC_NO_ENOUGH_BUF && m_decOutput.size())
|
||||
{
|
||||
- m_decOutput.pop()->Release();
|
||||
+ CDVDVideoCodecIMXBuffer *buffer;
|
||||
+
|
||||
+ if (m_decOutput.pop(buffer))
|
||||
+ buffer->Release();
|
||||
+
|
||||
FlushVPU();
|
||||
continue;
|
||||
}
|
||||
@@ -1124,8 +1128,11 @@ void CIMXCodec::ExitError(const char *msg, ...)
|
||||
|
||||
bool CIMXCodec::GetPicture(DVDVideoPicture* pDvdVideoPicture)
|
||||
{
|
||||
- pDvdVideoPicture->IMXBuffer = m_decOutput.pop();
|
||||
- assert(pDvdVideoPicture->IMXBuffer);
|
||||
+ if (!m_decOutput.pop(pDvdVideoPicture->IMXBuffer))
|
||||
+ {
|
||||
+ memset(pDvdVideoPicture, 0, sizeof(*pDvdVideoPicture));
|
||||
+ return false;
|
||||
+ }
|
||||
|
||||
#ifdef IMX_PROFILE
|
||||
static unsigned int previous = 0;
|
||||
diff --git a/xbmc/linux/imx/IMX.h b/xbmc/linux/imx/IMX.h
|
||||
index 2bc6761..201c1e9 100644
|
||||
--- a/xbmc/linux/imx/IMX.h
|
||||
+++ b/xbmc/linux/imx/IMX.h
|
||||
@@ -79,23 +79,22 @@ public:
|
||||
lkFIFO() { m_size = queue.max_size(); queue.clear(); m_abort = false; }
|
||||
|
||||
public:
|
||||
- T pop()
|
||||
+ bool pop(T &item)
|
||||
{
|
||||
std::unique_lock<std::mutex> m_lock(lkqueue);
|
||||
m_abort = false;
|
||||
while (!queue.size() && !m_abort)
|
||||
read.wait(m_lock);
|
||||
|
||||
- T val;
|
||||
- if (!queue.empty())
|
||||
- {
|
||||
- val = queue.front();
|
||||
- queue.pop_front();
|
||||
- }
|
||||
+ if (queue.empty())
|
||||
+ return false;
|
||||
+
|
||||
+ item = queue.front();
|
||||
+ queue.pop_front();
|
||||
|
||||
m_lock.unlock();
|
||||
write.notify_one();
|
||||
- return val;
|
||||
+ return true;
|
||||
}
|
||||
|
||||
bool push(const T& item)
|
||||
@@ -109,6 +108,7 @@ public:
|
||||
return false;
|
||||
|
||||
queue.push_back(item);
|
||||
+
|
||||
m_lock.unlock();
|
||||
read.notify_one();
|
||||
return true;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0041-IMXCODEC-Cleanup-IMXBuffer-classes.patch
|
||||
==============================================================
|
||||
|
||||
From abe53ea7362fe251b9cfc7e814dd78b7b06089b9 Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Sun, 1 Jan 2017 17:23:23 +0100
|
||||
Subject: [PATCH] IMXCODEC: Cleanup IMXBuffer classes
|
||||
|
||||
---
|
||||
.../DVDCodecs/Video/DVDVideoCodecIMX.cpp | 38 +++++++++++++---------
|
||||
.../VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h | 13 ++++----
|
||||
xbmc/linux/imx/IMX.h | 2 --
|
||||
3 files changed, 29 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
index 773c878..d498b45 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
|
||||
@@ -1128,7 +1128,9 @@ void CIMXCodec::ExitError(const char *msg, ...)
|
||||
|
||||
bool CIMXCodec::GetPicture(DVDVideoPicture* pDvdVideoPicture)
|
||||
{
|
||||
- if (!m_decOutput.pop(pDvdVideoPicture->IMXBuffer))
|
||||
+ CDVDVideoCodecIMXBuffer *pBuffer;
|
||||
+
|
||||
+ if (!m_decOutput.pop(pBuffer))
|
||||
{
|
||||
memset(pDvdVideoPicture, 0, sizeof(*pDvdVideoPicture));
|
||||
return false;
|
||||
@@ -1139,9 +1141,9 @@ bool CIMXCodec::GetPicture(DVDVideoPicture* pDvdVideoPicture)
|
||||
unsigned int current;
|
||||
|
||||
current = XbmcThreads::SystemClockMillis();
|
||||
- CLog::Log(LOGDEBUG, "+G 0x%x %f/%f tm:%03d : Interlaced 0x%x\n", pDvdVideoPicture->IMXBuffer->GetIdx(),
|
||||
- recalcPts(pDvdVideoPicture->IMXBuffer->GetDts()), recalcPts(pDvdVideoPicture->IMXBuffer->GetPts()), current - previous,
|
||||
- m_initInfo.nInterlace ? pDvdVideoPicture->IMXBuffer->GetFieldType() : 0);
|
||||
+ CLog::Log(LOGDEBUG, "+G 0x%x %f/%f tm:%03d : Interlaced 0x%x\n", pBuffer->GetIdx(),
|
||||
+ recalcPts(pBuffer->GetDts()), recalcPts(pBuffer->GetPts()), current - previous,
|
||||
+ m_initInfo.nInterlace ? pBuffer->GetFieldType() : 0);
|
||||
previous = current;
|
||||
#endif
|
||||
|
||||
@@ -1151,35 +1153,37 @@ bool CIMXCodec::GetPicture(DVDVideoPicture* pDvdVideoPicture)
|
||||
++m_dropped;
|
||||
}
|
||||
else
|
||||
- pDvdVideoPicture->iFlags = pDvdVideoPicture->IMXBuffer->GetFlags();
|
||||
+ pDvdVideoPicture->iFlags = pBuffer->GetFlags();
|
||||
|
||||
if (m_initInfo.nInterlace)
|
||||
{
|
||||
- if (pDvdVideoPicture->IMXBuffer->GetFieldType() == VPU_FIELD_NONE && m_warnOnce)
|
||||
+ if (pBuffer->GetFieldType() == VPU_FIELD_NONE && m_warnOnce)
|
||||
{
|
||||
m_warnOnce = false;
|
||||
CLog::Log(LOGWARNING, "Interlaced content reported by VPU, but full frames detected - Please turn off deinterlacing manually.");
|
||||
}
|
||||
- else if (pDvdVideoPicture->IMXBuffer->GetFieldType() == VPU_FIELD_TB || pDvdVideoPicture->IMXBuffer->GetFieldType() == VPU_FIELD_TOP)
|
||||
+ else if (pBuffer->GetFieldType() == VPU_FIELD_TB || pBuffer->GetFieldType() == VPU_FIELD_TOP)
|
||||
pDvdVideoPicture->iFlags |= DVP_FLAG_TOP_FIELD_FIRST;
|
||||
|
||||
pDvdVideoPicture->iFlags |= DVP_FLAG_INTERLACED;
|
||||
}
|
||||
|
||||
pDvdVideoPicture->format = RENDER_FMT_IMXMAP;
|
||||
- pDvdVideoPicture->iWidth = pDvdVideoPicture->IMXBuffer->m_pctWidth;
|
||||
- pDvdVideoPicture->iHeight = pDvdVideoPicture->IMXBuffer->m_pctHeight;
|
||||
+ pDvdVideoPicture->iWidth = pBuffer->GetPictureWidth();
|
||||
+ pDvdVideoPicture->iHeight = pBuffer->GetPictureHeight();
|
||||
|
||||
- int ratio = m_forcedWidthHeightRatio ? m_forcedWidthHeightRatio : pDvdVideoPicture->IMXBuffer->m_widthHeightRatio;
|
||||
+ int ratio = m_forcedWidthHeightRatio ? m_forcedWidthHeightRatio : pBuffer->GetWidthHeightRatio();
|
||||
|
||||
pDvdVideoPicture->iDisplayWidth = ((pDvdVideoPicture->iWidth * ratio) + 32767) >> 16;
|
||||
pDvdVideoPicture->iDisplayHeight = pDvdVideoPicture->iHeight;
|
||||
|
||||
- pDvdVideoPicture->pts = pDvdVideoPicture->IMXBuffer->GetPts();
|
||||
- pDvdVideoPicture->dts = pDvdVideoPicture->IMXBuffer->GetDts();
|
||||
+ pDvdVideoPicture->pts = pBuffer->GetPts();
|
||||
+ pDvdVideoPicture->dts = pBuffer->GetDts();
|
||||
|
||||
if (pDvdVideoPicture->iFlags & DVP_FLAG_DROPPED)
|
||||
- SAFE_RELEASE(pDvdVideoPicture->IMXBuffer);
|
||||
+ SAFE_RELEASE(pBuffer);
|
||||
+
|
||||
+ pDvdVideoPicture->IMXBuffer = pBuffer;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1229,15 +1233,17 @@ CDVDVideoCodecIMXBuffer::CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo,
|
||||
|
||||
void CDVDVideoCodecIMXBuffer::Lock()
|
||||
{
|
||||
- long count = ++m_iRefs;
|
||||
#ifdef TRACE_FRAMES
|
||||
- CLog::Log(LOGDEBUG, "R+ 0x%x - ref : %ld (VPU)\n", m_idx, count);
|
||||
+ CLog::Log(LOGDEBUG, "R+ 0x%x - ref : %ld (VPU)\n", m_idx, ++m_iRefs);
|
||||
+#else
|
||||
+ ++m_iRefs;
|
||||
#endif
|
||||
}
|
||||
|
||||
long CDVDVideoCodecIMXBuffer::Release()
|
||||
{
|
||||
long count = --m_iRefs;
|
||||
+
|
||||
#ifdef TRACE_FRAMES
|
||||
CLog::Log(LOGDEBUG, "R- 0x%x - ref : %ld (VPU)\n", m_idx, count);
|
||||
#endif
|
||||
@@ -1803,7 +1809,7 @@ bool CIMXContext::TileTask(IPUTaskPtr &ipu)
|
||||
return false;
|
||||
}
|
||||
|
||||
- ((CDVDVideoCodecIMXBuffer*)ipu->current)->m_convBuffer = conv;
|
||||
+ ((CDVDVideoCodecIMXBuffer*)ipu->current)->SetConvBuffer(conv);
|
||||
vdoa.output.paddr = conv->buf_paddr;
|
||||
}
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
index 22da54d..91f9b8c 100644
|
||||
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecIMX.h
|
||||
@@ -248,8 +248,6 @@ public:
|
||||
// Base class of IMXVPU and IMXIPU buffer
|
||||
class CDVDVideoCodecIMXBuffer : public CIMXBuffer
|
||||
{
|
||||
-friend class CIMXCodec;
|
||||
-friend class CIMXContext;
|
||||
public:
|
||||
CDVDVideoCodecIMXBuffer(VpuDecOutFrameInfo *frameInfo, double fps, int mapType);
|
||||
virtual ~CDVDVideoCodecIMXBuffer();
|
||||
@@ -272,12 +270,16 @@ public:
|
||||
#endif
|
||||
VpuFieldType GetFieldType() const { return m_fieldType; }
|
||||
|
||||
-protected:
|
||||
+ unsigned int GetPictureWidth() { return m_pctWidth; }
|
||||
+ unsigned int GetPictureHeight() { return m_pctHeight; }
|
||||
+ int GetWidthHeightRatio() { return m_widthHeightRatio; }
|
||||
+
|
||||
+ void SetConvBuffer(struct g2d_buf *b) { m_convBuffer = b; }
|
||||
+
|
||||
+private:
|
||||
unsigned int m_pctWidth;
|
||||
unsigned int m_pctHeight;
|
||||
int m_widthHeightRatio;
|
||||
-
|
||||
-private:
|
||||
double m_pts;
|
||||
double m_dts;
|
||||
VpuFieldType m_fieldType;
|
||||
@@ -288,7 +290,6 @@ private:
|
||||
static unsigned char i;
|
||||
#endif
|
||||
|
||||
-public:
|
||||
struct g2d_buf *m_convBuffer;
|
||||
};
|
||||
|
||||
diff --git a/xbmc/linux/imx/IMX.h b/xbmc/linux/imx/IMX.h
|
||||
index 201c1e9..50c1cdb 100644
|
||||
--- a/xbmc/linux/imx/IMX.h
|
||||
+++ b/xbmc/linux/imx/IMX.h
|
||||
@@ -177,8 +177,6 @@ public:
|
||||
virtual void Lock() = 0;
|
||||
virtual long Release() = 0;
|
||||
|
||||
- int GetFormat() { return iFormat; }
|
||||
-
|
||||
public:
|
||||
uint32_t iWidth;
|
||||
uint32_t iHeight;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
==============================================================
|
||||
file 0042-IMXRender-Refactor-to-improve-readability-and-perfor.patch
|
||||
==============================================================
|
||||
|
||||
From bc3d7cdaaeb4e6c532672f65d27509f312eff21e Mon Sep 17 00:00:00 2001
|
||||
From: Rudi <r.ihle@s-t.de>
|
||||
Date: Sun, 1 Jan 2017 17:56:17 +0100
|
||||
Subject: [PATCH] IMXRender: Refactor to improve readability and performance
|
||||
|
||||
---
|
||||
.../VideoRenderers/HwDecRender/RendererIMX.cpp | 29 ++++++++++------------
|
||||
.../VideoRenderers/HwDecRender/RendererIMX.h | 5 ++--
|
||||
2 files changed, 15 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
index b5c7095..5167bd2 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
@@ -34,13 +34,14 @@
|
||||
|
||||
CRendererIMX::CRendererIMX()
|
||||
{
|
||||
- m_bufHistory.clear();
|
||||
+ m_bufHistory[0] = m_bufHistory[1] = nullptr;
|
||||
}
|
||||
|
||||
CRendererIMX::~CRendererIMX()
|
||||
{
|
||||
UnInit();
|
||||
- std::for_each(m_bufHistory.begin(), m_bufHistory.end(), Release);
|
||||
+ SAFE_RELEASE(m_bufHistory[1]);
|
||||
+ SAFE_RELEASE(m_bufHistory[0]);
|
||||
g_IMX.Deinitialize();
|
||||
}
|
||||
|
||||
@@ -139,12 +140,7 @@ bool CRendererIMX::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha)
|
||||
CDVDVideoCodecIMXBuffer *buffer = static_cast<CDVDVideoCodecIMXBuffer*>(m_buffers[m_iYV12RenderBuffer].hwDec);
|
||||
if (buffer)
|
||||
{
|
||||
- if (!m_bufHistory.empty() && m_bufHistory.back() != buffer || m_bufHistory.empty())
|
||||
- {
|
||||
- buffer->Lock();
|
||||
- m_bufHistory.push_back(buffer);
|
||||
- }
|
||||
- else if (!m_bufHistory.empty() && m_bufHistory.back() == buffer && flagsPrev == flags)
|
||||
+ if (buffer == m_bufHistory[0] && flagsPrev == flags)
|
||||
{
|
||||
g_IMX.WaitVsync();
|
||||
return true;
|
||||
@@ -152,12 +148,14 @@ bool CRendererIMX::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha)
|
||||
|
||||
flagsPrev = flags;
|
||||
|
||||
- int size = flags & RENDER_FLAG_FIELDMASK ? 2 : 1;
|
||||
- while (m_bufHistory.size() > size)
|
||||
- {
|
||||
- m_bufHistory.front()->Release();
|
||||
- m_bufHistory.pop_front();
|
||||
- }
|
||||
+ buffer->Lock();
|
||||
+
|
||||
+ SAFE_RELEASE(m_bufHistory[1]);
|
||||
+ m_bufHistory[1] = m_bufHistory[0];
|
||||
+ m_bufHistory[0] = buffer;
|
||||
+
|
||||
+ if (!(flags & RENDER_FLAG_FIELDMASK))
|
||||
+ SAFE_RELEASE(m_bufHistory[1]);
|
||||
|
||||
// this hack is needed to get the 2D mode of a 3D movie going
|
||||
RENDER_STEREO_MODE stereo_mode = g_graphicsContext.GetStereoMode();
|
||||
@@ -206,8 +204,7 @@ bool CRendererIMX::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha)
|
||||
}
|
||||
}
|
||||
|
||||
- CDVDVideoCodecIMXBuffer *buffer_p = m_bufHistory.front();
|
||||
- g_IMXContext.Blit(buffer_p == buffer ? nullptr : buffer_p, buffer, srcRect, dstRect, fieldFmt);
|
||||
+ g_IMXContext.Blit(m_bufHistory[1], m_bufHistory[0], srcRect, dstRect, fieldFmt);
|
||||
}
|
||||
|
||||
#if 0
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.h b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.h
|
||||
index fc71e89..1a1ee2c 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.h
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.h
|
||||
@@ -30,6 +30,8 @@
|
||||
|
||||
class CRendererIMX : public CLinuxRendererGLES
|
||||
{
|
||||
+ CDVDVideoCodecIMXBuffer *m_bufHistory[2];
|
||||
+
|
||||
public:
|
||||
CRendererIMX();
|
||||
virtual ~CRendererIMX();
|
||||
@@ -61,9 +63,6 @@ protected:
|
||||
virtual bool RenderHook(int index);
|
||||
virtual int GetImageHook(YV12Image *image, int source = AUTOSOURCE, bool readonly = false);
|
||||
virtual bool RenderUpdateVideoHook(bool clear, DWORD flags = 0, DWORD alpha = 255);
|
||||
-
|
||||
- std::deque<CDVDVideoCodecIMXBuffer*> m_bufHistory;
|
||||
- static void Release(CDVDVideoCodecIMXBuffer *&t) { if (t) t->Release(); }
|
||||
};
|
||||
|
||||
#endif
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
||||
==============================================================
|
||||
file 400-Boost-Center-Audio-Channel-on-Downmixing.patch
|
||||
==============================================================
|
||||
|
108
projects/imx6/patches/kodi/kodi-100-libreelec-extras.patch
Normal file
108
projects/imx6/patches/kodi/kodi-100-libreelec-extras.patch
Normal file
@ -0,0 +1,108 @@
|
||||
From 6a535e23bef1d08f20e332d3caa5f080660a7596 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Vicman <peter.vicman@gmail.com>
|
||||
Date: Sun, 1 Jan 2017 18:00:29 +0100
|
||||
Subject: [PATCH] disable suspend and hibernate
|
||||
|
||||
---
|
||||
xbmc/powermanagement/linux/LogindUPowerSyscall.cpp | 4 ++--
|
||||
xbmc/powermanagement/linux/UPowerSyscall.cpp | 4 ++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/xbmc/powermanagement/linux/LogindUPowerSyscall.cpp b/xbmc/powermanagement/linux/LogindUPowerSyscall.cpp
|
||||
index 4e5bcc6..8dc4fb1 100644
|
||||
--- a/xbmc/powermanagement/linux/LogindUPowerSyscall.cpp
|
||||
+++ b/xbmc/powermanagement/linux/LogindUPowerSyscall.cpp
|
||||
@@ -52,8 +52,8 @@ CLogindUPowerSyscall::CLogindUPowerSyscall()
|
||||
|
||||
m_canPowerdown = LogindCheckCapability("CanPowerOff");
|
||||
m_canReboot = LogindCheckCapability("CanReboot");
|
||||
- m_canHibernate = LogindCheckCapability("CanHibernate");
|
||||
- m_canSuspend = LogindCheckCapability("CanSuspend");
|
||||
+ m_canHibernate = false;
|
||||
+ m_canSuspend = false;
|
||||
|
||||
InhibitDelayLock();
|
||||
|
||||
diff --git a/xbmc/powermanagement/linux/UPowerSyscall.cpp b/xbmc/powermanagement/linux/UPowerSyscall.cpp
|
||||
index e3b4725..bddb7c6 100644
|
||||
--- a/xbmc/powermanagement/linux/UPowerSyscall.cpp
|
||||
+++ b/xbmc/powermanagement/linux/UPowerSyscall.cpp
|
||||
@@ -262,8 +262,8 @@ bool CUPowerSyscall::PumpPowerEvents(IPowerEventsCallback *callback)
|
||||
|
||||
void CUPowerSyscall::UpdateCapabilities()
|
||||
{
|
||||
- m_CanSuspend = CDBusUtil::GetVariant("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "CanSuspend").asBoolean(false);
|
||||
- m_CanHibernate = CDBusUtil::GetVariant("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "CanHibernate").asBoolean(false);
|
||||
+ m_CanSuspend = false;
|
||||
+ m_CanHibernate = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
--
|
||||
2.7.1
|
||||
|
||||
|
||||
From b38c7b0f7914fcf9e04e17e7c6387c8a44d317b9 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Vicman <peter.vicman@gmail.com>
|
||||
Date: Sun, 1 Jan 2017 19:23:07 +0100
|
||||
Subject: [PATCH] fix freeze on lvds display connected to udoo quad
|
||||
|
||||
---
|
||||
.../cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp | 9 ---------
|
||||
1 file changed, 9 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
index 5167bd2..138cec6 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
@@ -130,7 +130,6 @@ bool CRendererIMX::RenderHook(int index)
|
||||
|
||||
bool CRendererIMX::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha)
|
||||
{
|
||||
- static DWORD flagsPrev;
|
||||
#if 0
|
||||
static unsigned long long previous = 0;
|
||||
unsigned long long current = XbmcThreads::SystemClockMillis();
|
||||
@@ -140,14 +139,6 @@ bool CRendererIMX::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha)
|
||||
CDVDVideoCodecIMXBuffer *buffer = static_cast<CDVDVideoCodecIMXBuffer*>(m_buffers[m_iYV12RenderBuffer].hwDec);
|
||||
if (buffer)
|
||||
{
|
||||
- if (buffer == m_bufHistory[0] && flagsPrev == flags)
|
||||
- {
|
||||
- g_IMX.WaitVsync();
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- flagsPrev = flags;
|
||||
-
|
||||
buffer->Lock();
|
||||
|
||||
SAFE_RELEASE(m_bufHistory[1]);
|
||||
--
|
||||
2.7.1
|
||||
|
||||
|
||||
From 16264828a3fc3557eefbc8c117bbc715293dba8c Mon Sep 17 00:00:00 2001
|
||||
From: Matus Kral <matuskral@me.com>
|
||||
Date: Sun, 1 Jan 2017 18:52:40 +0100
|
||||
Subject: [PATCH] [IMXEGL] reconfigure fb1 & unblank before (hdmi)sound is
|
||||
resumed in WinSystem
|
||||
|
||||
---
|
||||
xbmc/windowing/egl/EGLNativeTypeIMX.cpp | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/xbmc/windowing/egl/EGLNativeTypeIMX.cpp b/xbmc/windowing/egl/EGLNativeTypeIMX.cpp
|
||||
index 5c85556..f958bdc 100644
|
||||
--- a/xbmc/windowing/egl/EGLNativeTypeIMX.cpp
|
||||
+++ b/xbmc/windowing/egl/EGLNativeTypeIMX.cpp
|
||||
@@ -263,6 +263,8 @@ bool CEGLNativeTypeIMX::SetNativeResolution(const RESOLUTION_INFO &res)
|
||||
CreateNativeDisplay();
|
||||
CreateNativeWindow();
|
||||
|
||||
+ g_IMXContext.OnResetDisplay();
|
||||
+ ShowWindow(true);
|
||||
CLog::Log(LOGDEBUG, "%s: %s",__FUNCTION__, res.strId.c_str());
|
||||
|
||||
return true;
|
||||
|
@ -1,69 +0,0 @@
|
||||
disable standby
|
||||
|
||||
--- a/xbmc/powermanagement/linux/LogindUPowerSyscall.cpp 2016-10-07 09:41:03.067310207 +0200
|
||||
+++ b/xbmc/powermanagement/linux/LogindUPowerSyscall.cpp 2016-10-07 09:41:27.658371366 +0200
|
||||
@@ -52,8 +52,8 @@ CLogindUPowerSyscall::CLogindUPowerSysca
|
||||
|
||||
m_canPowerdown = LogindCheckCapability("CanPowerOff");
|
||||
m_canReboot = LogindCheckCapability("CanReboot");
|
||||
- m_canHibernate = LogindCheckCapability("CanHibernate");
|
||||
- m_canSuspend = LogindCheckCapability("CanSuspend");
|
||||
+ m_canHibernate = false;
|
||||
+ m_canSuspend = false;
|
||||
|
||||
InhibitDelayLock();
|
||||
|
||||
--- a/xbmc/powermanagement/linux/UPowerSyscall.cpp.orig 2016-10-07 10:01:18.236917326 +0200
|
||||
+++ b/xbmc/powermanagement/linux/UPowerSyscall.cpp 2016-10-07 10:01:46.311845478 +0200
|
||||
@@ -262,8 +262,8 @@ bool CUPowerSyscall::PumpPowerEvents(IPo
|
||||
|
||||
void CUPowerSyscall::UpdateCapabilities()
|
||||
{
|
||||
- m_CanSuspend = CDBusUtil::GetVariant("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "CanSuspend").asBoolean(false);
|
||||
- m_CanHibernate = CDBusUtil::GetVariant("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "CanHibernate").asBoolean(false);
|
||||
+ m_CanSuspend = false;
|
||||
+ m_CanHibernate = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
From 584a94130a480ce7fe161614efe62bb491f3d7e7 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Vicman <peter.vicman@gmail.com>
|
||||
Date: Fri, 30 Dec 2016 19:48:22 +0100
|
||||
Subject: [PATCH] fix freeze on lvds display connected to udoo quad
|
||||
|
||||
partialy revert 1a863f250a2ec203e962cde03b67d680ea2e9cfd
|
||||
[RendererIMX] skip rendering already rendered buffer
|
||||
---
|
||||
xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp | 8 --------
|
||||
1 file changed, 8 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
index b5c7095..ad0f58d 100644
|
||||
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererIMX.cpp
|
||||
@@ -129,7 +129,6 @@ bool CRendererIMX::RenderHook(int index)
|
||||
|
||||
bool CRendererIMX::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha)
|
||||
{
|
||||
- static DWORD flagsPrev;
|
||||
#if 0
|
||||
static unsigned long long previous = 0;
|
||||
unsigned long long current = XbmcThreads::SystemClockMillis();
|
||||
@@ -144,13 +143,6 @@ bool CRendererIMX::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha)
|
||||
buffer->Lock();
|
||||
m_bufHistory.push_back(buffer);
|
||||
}
|
||||
- else if (!m_bufHistory.empty() && m_bufHistory.back() == buffer && flagsPrev == flags)
|
||||
- {
|
||||
- g_IMX.WaitVsync();
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- flagsPrev = flags;
|
||||
|
||||
int size = flags & RENDER_FLAG_FIELDMASK ? 2 : 1;
|
||||
while (m_bufHistory.size() > size)
|
||||
--
|
||||
2.7.1
|
||||
|
Loading…
x
Reference in New Issue
Block a user