diff --git a/coreengine/definitions.h b/coreengine/definitions.h index dccd50e..3516417 100644 --- a/coreengine/definitions.h +++ b/coreengine/definitions.h @@ -490,6 +490,7 @@ enum class eDCScreenResolutionIT { screenwidth = 0, screenheight, isHD, + isUHD, isWideScreen, count }; @@ -1483,6 +1484,7 @@ enum class eDRRecInfoIT { screenwidth = 0, screenheight, isHD, + isUHD, isWideScreen, count }; diff --git a/coreengine/viewelementsdisplaychannel.c b/coreengine/viewelementsdisplaychannel.c index 7f2d4fa..4b71970 100644 --- a/coreengine/viewelementsdisplaychannel.c +++ b/coreengine/viewelementsdisplaychannel.c @@ -453,6 +453,7 @@ void cVeDcScreenResolution::SetTokenContainer(void) { tokenContainer->DefineIntToken("{screenwidth}", (int)eDCScreenResolutionIT::screenwidth); tokenContainer->DefineIntToken("{screenheight}", (int)eDCScreenResolutionIT::screenheight); tokenContainer->DefineIntToken("{isHD}", (int)eDCScreenResolutionIT::isHD); + tokenContainer->DefineIntToken("{isUHD}", (int)eDCScreenResolutionIT::isUHD); tokenContainer->DefineIntToken("{isWideScreen}", (int)eDCScreenResolutionIT::isWideScreen); InheritTokenContainer(); } @@ -478,7 +479,8 @@ bool cVeDcScreenResolution::Parse(bool forced) { SetDirty(); bool isHD = false; - string resName = GetScreenResolutionString(screenWidth, screenHeight, &isHD); + bool isUHD = false; + string resName = GetScreenResolutionString(screenWidth, screenHeight, &isHD, &isUHD); bool isWideScreen = false; string aspectName = GetScreenAspectString(aspect, &isWideScreen); @@ -487,6 +489,7 @@ bool cVeDcScreenResolution::Parse(bool forced) { tokenContainer->AddIntToken((int)eDCScreenResolutionIT::screenwidth, screenWidth); tokenContainer->AddIntToken((int)eDCScreenResolutionIT::screenheight, screenHeight); tokenContainer->AddIntToken((int)eDCScreenResolutionIT::isHD, isHD); + tokenContainer->AddIntToken((int)eDCScreenResolutionIT::isUHD, isUHD); tokenContainer->AddIntToken((int)eDCScreenResolutionIT::isWideScreen, isWideScreen); tokenContainer->AddStringToken((int)eDCScreenResolutionST::resolution, resName.c_str()); tokenContainer->AddStringToken((int)eDCScreenResolutionST::aspect, aspectName.c_str()); diff --git a/coreengine/viewelementsdisplayreplay.c b/coreengine/viewelementsdisplayreplay.c index a8b98ae..798bd29 100644 --- a/coreengine/viewelementsdisplayreplay.c +++ b/coreengine/viewelementsdisplayreplay.c @@ -78,6 +78,7 @@ void cVeDrRecInfo::SetTokenContainer(void) { tokenContainer->DefineIntToken("{screenwidth}", (int)eDRRecInfoIT::screenwidth); tokenContainer->DefineIntToken("{screenheight}", (int)eDRRecInfoIT::screenheight); tokenContainer->DefineIntToken("{isHD}", (int)eDRRecInfoIT::isHD); + tokenContainer->DefineIntToken("{isUHD}", (int)eDRRecInfoIT::isUHD); tokenContainer->DefineIntToken("{isWideScreen}", (int)eDRRecInfoIT::isWideScreen); InheritTokenContainer(); } @@ -97,7 +98,8 @@ bool cVeDrRecInfo::Parse(bool force) { double aspect = 0; cDevice::PrimaryDevice()->GetVideoSize(screenWidth, screenHeight, aspect); bool isHD = false; - string resName = GetScreenResolutionString(screenWidth, screenHeight, &isHD); + bool isUHD = false; + string resName = GetScreenResolutionString(screenWidth, screenHeight, &isHD, &isUHD); bool isWideScreen = false; string aspectName = GetScreenAspectString(aspect, &isWideScreen); @@ -105,6 +107,7 @@ bool cVeDrRecInfo::Parse(bool force) { tokenContainer->AddIntToken((int)eDRRecInfoIT::screenwidth, screenWidth); tokenContainer->AddIntToken((int)eDRRecInfoIT::screenheight, screenHeight); tokenContainer->AddIntToken((int)eDRRecInfoIT::isHD, isHD); + tokenContainer->AddIntToken((int)eDRRecInfoIT::isUHD, isUHD); tokenContainer->AddIntToken((int)eDRRecInfoIT::isWideScreen, isWideScreen); tokenContainer->AddStringToken((int)eDRRecInfoST::resolution, resName.c_str()); tokenContainer->AddStringToken((int)eDRRecInfoST::aspect, aspectName.c_str()); diff --git a/extensions/extrecinfo.c b/extensions/extrecinfo.c index 435d43b..f05dc79 100644 --- a/extensions/extrecinfo.c +++ b/extensions/extrecinfo.c @@ -19,7 +19,7 @@ bool cExtRecInfo::Parse(void) { } StripXmlTag(mediaInfoXml, resWidth, "res_width"); StripXmlTag(mediaInfoXml, resHeight, "res_height"); - resString = GetScreenResolutionString(resWidth, resHeight, &isHD); + resString = GetScreenResolutionString(resWidth, resHeight, &isHD, &isUHD); StripXmlTag(mediaInfoXml, aspectratio, "aspectratio"); isWideScreen = !aspectratio.compare("16:9"); StripXmlTag(mediaInfoXml, codec, "codec"); diff --git a/extensions/extrecinfo.h b/extensions/extrecinfo.h index 9fb5bab..3297094 100644 --- a/extensions/extrecinfo.h +++ b/extensions/extrecinfo.h @@ -23,6 +23,7 @@ public: int resHeight; string resString; bool isHD; + bool isUHD; string aspectratio; bool isWideScreen; string codec; @@ -33,4 +34,4 @@ public: vector< tAudioTrack > tracks; }; -#endif // __EXTRECINFO_H \ No newline at end of file +#endif // __EXTRECINFO_H diff --git a/extensions/helpers.c b/extensions/helpers.c index 5c84094..5e06d95 100644 --- a/extensions/helpers.c +++ b/extensions/helpers.c @@ -198,29 +198,43 @@ string GetTimeString(int seconds) { //View Helpers -string GetScreenResolutionString(int width, int height, bool *isHD) { +string GetScreenResolutionString(int width, int height, bool *isHD, bool *isUHD) { + // TODO: try to get more information from information sources about interlace/progressive + // cDevice::PrimaryDevice()->GetVideoSize is NOT providing enough information + *isHD = false; // default + *isUHD = false; // default string name = ""; - switch (width) { - case 1920: - case 1440: - name = "hd1080i"; + switch (height) { + case 4320: // 7680 x 4320 = 8K UHD + name = "uhd4320p"; + *isHD = true; + *isUHD = true; + break; + case 2160: // 3840 x 2160 = 4K UHD + name = "uhd2160p"; + *isHD = true; + *isUHD = true; + break; + case 1440: // 2560 x 1440 = QHD + name = "hd1440p"; *isHD = true; break; - case 1280: - if (height == 720) - name = "hd720p"; - else - name = "hd1080i"; + case 1080: + name = "hd1080i"; // 'i' is default, 'p' can't be detected currently *isHD = true; break; case 720: - name = "sd576i"; + name = "hd720p"; // 'i' is not defined in standards + *isHD = true; break; - case 544: - name = "sd480i"; + case 576: + name = "sd576i"; // assumed 'i' + break; + case 480: + name = "sd480i"; // assumed 'i' break; default: - name = "sd576i"; + name = "unknown"; break; } return name; diff --git a/extensions/helpers.h b/extensions/helpers.h index b059a16..270d300 100644 --- a/extensions/helpers.h +++ b/extensions/helpers.h @@ -44,7 +44,7 @@ public: string GetTimeString(int seconds); -string GetScreenResolutionString(int width, int height, bool *isHD); +string GetScreenResolutionString(int width, int height, bool *isHD, bool *isUHD); string GetScreenAspectString(double aspect, bool *isWideScreen); #endif // __HELPERS_H diff --git a/skinskeleton/xmlfiles/displaychannel.xml b/skinskeleton/xmlfiles/displaychannel.xml index 5bfed29..393a30e 100644 --- a/skinskeleton/xmlfiles/displaychannel.xml +++ b/skinskeleton/xmlfiles/displaychannel.xml @@ -90,9 +90,10 @@ diff --git a/skinskeleton/xmlfiles/displayreplay.xml b/skinskeleton/xmlfiles/displayreplay.xml index 758960b..083cdf6 100644 --- a/skinskeleton/xmlfiles/displayreplay.xml +++ b/skinskeleton/xmlfiles/displayreplay.xml @@ -61,11 +61,12 @@