Skip to content

Commit

Permalink
Merge pull request #7907 from koying/fixamlzoomJ
Browse files Browse the repository at this point in the history
FIX: AML zoom issues
  • Loading branch information
MartijnKaijser committed Aug 27, 2015
2 parents 443f692 + a15ab31 commit f6b2447
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 2 deletions.
45 changes: 45 additions & 0 deletions xbmc/utils/AMLUtils.cpp
Expand Up @@ -356,6 +356,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
res->fRefreshRate = 60;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "1080p23hz"))
{
res->iWidth = 1920;
res->iHeight= 1080;
res->iScreenWidth = 1920;
res->iScreenHeight= 1080;
res->fRefreshRate = 23.976;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "1080p24hz"))
{
res->iWidth = 1920;
Expand Down Expand Up @@ -383,6 +392,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
res->fRefreshRate = 50;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "1080p59hz"))
{
res->iWidth = 1920;
res->iHeight= 1080;
res->iScreenWidth = 1920;
res->iScreenHeight= 1080;
res->fRefreshRate = 59.940;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "1080i"))
{
res->iWidth = 1920;
Expand All @@ -401,6 +419,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
res->fRefreshRate = 50;
res->dwFlags = D3DPRESENTFLAG_INTERLACED;
}
else if (StringUtils::EqualsNoCase(fromMode, "1080i59hz"))
{
res->iWidth = 1920;
res->iHeight= 1080;
res->iScreenWidth = 1920;
res->iScreenHeight= 1080;
res->fRefreshRate = 59.940;
res->dwFlags = D3DPRESENTFLAG_INTERLACED;
}
else if (StringUtils::EqualsNoCase(fromMode, "4k2ksmpte"))
{
res->iWidth = 1920;
Expand All @@ -410,6 +437,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
res->fRefreshRate = 24;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "4k2k23hz"))
{
res->iWidth = 1920;
res->iHeight= 1080;
res->iScreenWidth = 3840;
res->iScreenHeight= 2160;
res->fRefreshRate = 23.976;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "4k2k24hz"))
{
res->iWidth = 1920;
Expand All @@ -428,6 +464,15 @@ bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
res->fRefreshRate = 25;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "4k2k29hz"))
{
res->iWidth = 1920;
res->iHeight= 1080;
res->iScreenWidth = 3840;
res->iScreenHeight= 2160;
res->fRefreshRate = 29.970;
res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
}
else if (StringUtils::EqualsNoCase(fromMode, "4k2k30hz"))
{
res->iWidth = 1920;
Expand Down
43 changes: 41 additions & 2 deletions xbmc/windowing/egl/EGLNativeTypeAmlAndroid.cpp
Expand Up @@ -28,14 +28,18 @@
#include "utils/SysfsUtils.h"
#include "utils/AMLUtils.h"

bool CEGLNativeTypeAmlAndroid::m_isWritable = false;

bool CEGLNativeTypeAmlAndroid::CheckCompatibility()
{
if (aml_present())
{
m_isWritable = false;
if (SysfsUtils::HasRW("/sys/class/display/mode"))
return true;
m_isWritable = true;
else
CLog::Log(LOGERROR, "AMLEGL: no rw on /sys/class/display/mode");
CLog::Log(LOGINFO, "AMLEGL: no rw on /sys/class/display/mode");
return true;
}
return false;
}
Expand All @@ -62,6 +66,9 @@ bool CEGLNativeTypeAmlAndroid::GetNativeResolution(RESOLUTION_INFO *res) const

bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res)
{
if (!m_isWritable)
return false;

switch((int)(res.fRefreshRate*10))
{
default:
Expand All @@ -80,6 +87,16 @@ bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res)
break;
}
break;
case 599:
switch(res.iScreenWidth)
{
default:
if (res.dwFlags & D3DPRESENTFLAG_INTERLACED)
return SetDisplayResolution("1080i59hz");
else
return SetDisplayResolution("1080p59hz");
break;
}
case 500:
switch(res.iScreenWidth)
{
Expand All @@ -106,6 +123,17 @@ bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res)
break;
}
break;
case 299:
switch(res.iScreenWidth)
{
case 3840:
return SetDisplayResolution("4k2k29hz");
break;
default:
return SetDisplayResolution("1080p29hz");
break;
}
break;
case 250:
switch(res.iScreenWidth)
{
Expand All @@ -131,6 +159,17 @@ bool CEGLNativeTypeAmlAndroid::SetNativeResolution(const RESOLUTION_INFO &res)
break;
}
break;
case 239:
switch(res.iScreenWidth)
{
case 3840:
return SetDisplayResolution("4k2k23hz");
break;
default:
return SetDisplayResolution("1080p23hz");
break;
}
break;
}

return false;
Expand Down
1 change: 1 addition & 0 deletions xbmc/windowing/egl/EGLNativeTypeAmlAndroid.h
Expand Up @@ -36,6 +36,7 @@ class CEGLNativeTypeAmlAndroid : public CEGLNativeTypeAndroid
protected:
mutable std::string m_curHdmiResolution;
mutable RESOLUTION_INFO m_fb_res;
static bool m_isWritable;

bool SetDisplayResolution(const char *resolution);
};

0 comments on commit f6b2447

Please sign in to comment.