AndroidTV resolution stuck at 1080p on Hisense 58H78G - can it be increased?

by rbooris

I am struggling to understand what could explain why the resolution for AndroidTV on the 58H78G, I just acquired, is stuck at 1080p.

When setting up the TV on the first start, the interface looked like 1080p (poorly) upscaled - you could notice the logos and text not being sharp.

If I start Youtube app, it renders 4k content clearly but when I go back to AndroidTV it looks blurry.

I tried running Kodi which confirms the system it is running on, has a resolution of 1080p only (visible under the System information of Kodi), which makes AndroidTV fairly useless for any extra app that cannot recognize a 4K environment.

I tried a few others apps and it looks like there is no native 4K rendering on this TV which if true is the most disappointing marketing move I have yet to see. The point of that purchase was to collapse TV and smart player in one product. I was curious (and maybe worried) to see the kind of system on chip such a TV would have. While I understand the TV is classified as budget, it is sad to see such a limitation on the user experience.

I have an NVIDIA ShieldTV (running AndroidTV 8.2) that I connected to the Hisense on HDMI and that player displays its interface as a 4K resolution (showing on the on-screen input resolution notification).

I have even enabled the developer mode in Android to try some recommendations around changing the size of the window manager and density which did not change the actual resolution.

For reference, in debugging mode over the network:

xiaoyushan:/ $ wm size
Physical size: 1920x1080

And the dumpsys window output:

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
  Display: mDisplayId=0
    init=1920x1080 320dpi cur=1920x1080 app=1920x1080 rng=1080x1080-1920x1920
    deferred=false mLayoutNeeded=false mTouchExcludeRegion=SkRegion((0,0,1920,1080))

  mLayoutSeq=220

  Application tokens in top down Z order:
    mStackId=0
    mDeferRemoval=false
    mBounds=[0,0][1920,1080]
      taskId=3
        mBounds=[0,0][1920,1080]
        mdr=false
        appTokens=[AppWindowToken{fe005fb token=Token{1ba6b8a ActivityRecord{e75c1f5 u0 com.google.android.tvlauncher/.MainActivity t3}}}]
        mTempInsetBounds=[0,0][0,0]
          Activity #0 AppWindowToken{fe005fb token=Token{1ba6b8a ActivityRecord{e75c1f5 u0 com.google.android.tvlauncher/.MainActivity t3}}}
            windows=[Window{2a15143 u0 com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity}]
            windowType=2 hidden=false hasVisible=true
            app=true mVoiceInteraction=false
            task={taskId=3 appTokens=[AppWindowToken{fe005fb token=Token{1ba6b8a ActivityRecord{e75c1f5 u0 com.google.android.tvlauncher/.MainActivity t3}}}] mdr=false}
             mFillsParent=true mOrientation=0
            hiddenRequested=false mClientHidden=false reportedDrawn=true reportedVisible=true
            mNumInterestingWindows=1 mNumDrawnWindows=1 inPendingTransaction=false allDrawn=true lastAllDrawn=true)
            startingData=null removed=false firstWindowDrawn=true mIsExiting=false
            controller=AppWindowContainerController{ token=Token{1ba6b8a ActivityRecord{e75c1f5 u0 com.google.android.tvlauncher/.MainActivity t3}} mContainer=AppWindowToken{fe005fb token=Token{1ba6b8a ActivityRecord{e75c1f5 u0 com.google.android.tvlauncher/.MainActivity t3}}} mListener=ActivityRecord{e75c1f5 u0 com.google.android.tvlauncher/.MainActivity t3}}


  homeStack=Stack=0

  DockedStackDividerController
    mLastVisibility=false
    mMinimizedDock=false
    mAdjustedForIme=false
    mAdjustedForDivider=false

  PinnedStackController
    defaultBounds=[1367,778][1808,1026]
    movementBounds=[112,54][1808,1026]
    mIsImeShowing=false
    mImeHeight=0
    mIsShelfShowing=false
    mShelfHeight=0
    mReentrySnapFraction=-1.0
    mIsMinimized=false
    mActions=[]
   mDisplayInfo=DisplayInfo{"Built-in Screen", uniqueId "local:0", app 1920 x 1080, real 1920 x 1080, largest app 1920 x 1920, smallest app 1080 x 1080, mode 1, defaultMode 1, modes [{id=1, width=1920, height=1080, fps=60.000004}], colorMode 0, supportedColorModes [0], hdrCapabilities android.view.Display$HdrCapabilities@4a3d456a, rotation 0, density 320 (77.0 x 77.0) dpi, layerStack 0, appVsyncOff 2000000, presDeadline 11666666, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, removeMode 0}

  DisplayFrames w=1920 h=1080 r=0
    mStable=[0,0][1920,1080]
    mStableFullscreen=[0,0][1920,1080]
    mDock=[0,0][1920,1080]
    mCurrent=[0,0][1920,1080]
    mSystem=[0,0][1920,1080]
    mContent=[0,0][1920,1080]
    mVoiceContent=[0,0][1920,1080]
    mOverscan=[0,0][1920,1080]
    mRestrictedOverscan=[0,0][1920,1080]
    mRestricted=[0,0][1920,1080]
    mUnrestricted=[0,0][1920,1080]
    mDisplayInfoOverscan=[0,0][0,0]
    mRotatedDisplayInfoOverscan=[0,0][0,0]
    mDisplayCutout=com.android.server.wm.utils.WmDisplayCutout@3c1

WINDOW MANAGER TOKENS (dumpsys window tokens)
  All tokens:
  Display #0
  AppWindowToken{fe005fb token=Token{1ba6b8a ActivityRecord{e75c1f5 u0 com.google.android.tvlauncher/.MainActivity t3}}}
  WindowToken{5071fc5 android.os.BinderProxy@dce063c}
  WindowToken{3be1a7a android.os.Binder@6f016a5}
  WallpaperWindowToken{a74db89 token=android.os.Binder@61a0690}

The dumpsys display:

xiaoyushan:/ $ dumpsys display                                                                                                                                                                
DISPLAY MANAGER (dumpsys display)
  mOnlyCode=false
  mSafeMode=false
  mPendingTraversal=false
  mGlobalDisplayState=ON
  mNextNonDefaultDisplayId=1
  mDefaultViewport=DisplayViewport{valid=true, displayId=0, uniqueId='null', orientation=0, logicalFrame=Rect(0, 0 - 1920, 1080), physicalFrame=Rect(0, 0 - 1920, 1080), deviceWidth=1920, deviceHeight=1080}
  mExternalTouchViewport=DisplayViewport{valid=false, displayId=0, uniqueId='null', orientation=0, logicalFrame=Rect(0, 0 - 0, 0), physicalFrame=Rect(0, 0 - 0, 0), deviceWidth=0, deviceHeight=0}
  mVirtualTouchViewports=[]
  mDefaultDisplayDefaultColorMode=0
  mSingleDisplayDemoMode=false
  mWifiDisplayScanRequestCount=0
  mStableDisplaySize=Point(1920, 1080)

Display Adapters: size=3
  LocalDisplayAdapter
  VirtualDisplayAdapter
  OverlayDisplayAdapter
    mCurrentOverlaySetting=
    mOverlays: size=0

Display Devices: size=1
  DisplayDeviceInfo{"Built-in Screen": uniqueId="local:0", 1920 x 1080, modeId 1, defaultModeId 1, supportedModes [{id=1, width=1920, height=1080, fps=60.000004}], colorMode 0, supportedColorModes [0], HdrCapabilities android.view.Display$HdrCapabilities@4a3d456a, density 320, 77.0 x 77.0 dpi, appVsyncOff 2000000, presDeadline 11666666, touch INTERNAL, rotation 0, type BUILT_IN, state ON, FLAG_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
    mAdapter=LocalDisplayAdapter
    mUniqueId=local:0
    mDisplayToken=android.os.BinderProxy@1045b50
    mCurrentLayerStack=0
    mCurrentOrientation=0
    mCurrentLayerStackRect=Rect(0, 0 - 1920, 1080)
    mCurrentDisplayRect=Rect(0, 0 - 1920, 1080)
    mCurrentSurface=null
    mBuiltInDisplayId=0
    mActivePhysIndex=0
    mActiveModeId=1
    mActiveColorMode=0
    mState=ON
    mBrightness=102
    mBacklight=com.android.server.lights.LightsService$LightImpl@28d7149
    mDisplayInfos=
      PhysicalDisplayInfo{1920 x 1080, 60.000004 fps, density 2.0, 77.0 x 77.0 dpi, secure true, appVsyncOffset 2000000, bufferDeadline 11666666}
    mSupportedModes=
      DisplayModeRecord{mMode={id=1, width=1920, height=1080, fps=60.000004}}
    mSupportedColorModes=[0]

Logical Displays: size=1
  Display 0:
    mDisplayId=0
    mLayerStack=0
    mHasContent=true
    mRequestedMode=0
    mRequestedColorMode=0
    mDisplayOffset=(0, 0)
    mPrimaryDisplayDevice=Built-in Screen
    mBaseDisplayInfo=DisplayInfo{"Built-in Screen", uniqueId "local:0", app 1920 x 1080, real 1920 x 1080, largest app 1920 x 1080, smallest app 1920 x 1080, mode 1, defaultMode 1, modes [{id=1, width=1920, height=1080, fps=60.000004}], colorMode 0, supportedColorModes [0], hdrCapabilities android.view.Display$HdrCapabilities@4a3d456a, rotation 0, density 320 (77.0 x 77.0) dpi, layerStack 0, appVsyncOff 2000000, presDeadline 11666666, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, removeMode 0}
    mOverrideDisplayInfo=DisplayInfo{"Built-in Screen", uniqueId "local:0", app 1920 x 1080, real 1920 x 1080, largest app 1920 x 1920, smallest app 1080 x 1080, mode 1, defaultMode 1, modes [{id=1, width=1920, height=1080, fps=60.000004}], colorMode 0, supportedColorModes [0], hdrCapabilities android.view.Display$HdrCapabilities@4a3d456a, rotation 0, density 320 (77.0 x 77.0) dpi, layerStack 0, appVsyncOff 2000000, presDeadline 11666666, type BUILT_IN, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, removeMode 0}

Callbacks: size=50
  0: mPid=2818, mWifiDisplayScanRequested=false
  1: mPid=3715, mWifiDisplayScanRequested=false
  2: mPid=3731, mWifiDisplayScanRequested=false
  3: mPid=3751, mWifiDisplayScanRequested=false
  4: mPid=3784, mWifiDisplayScanRequested=false
  5: mPid=4113, mWifiDisplayScanRequested=false
  6: mPid=4140, mWifiDisplayScanRequested=false
  7: mPid=4251, mWifiDisplayScanRequested=false
  8: mPid=4274, mWifiDisplayScanRequested=false
  9: mPid=4286, mWifiDisplayScanRequested=false
  10: mPid=4302, mWifiDisplayScanRequested=false
  11: mPid=4314, mWifiDisplayScanRequested=false
  12: mPid=4334, mWifiDisplayScanRequested=false
  13: mPid=4345, mWifiDisplayScanRequested=false
  14: mPid=4366, mWifiDisplayScanRequested=false
  15: mPid=4375, mWifiDisplayScanRequested=false
  16: mPid=4391, mWifiDisplayScanRequested=false
  17: mPid=4410, mWifiDisplayScanRequested=false
  18: mPid=4421, mWifiDisplayScanRequested=false
  19: mPid=4436, mWifiDisplayScanRequested=false
  20: mPid=4499, mWifiDisplayScanRequested=false
  21: mPid=4525, mWifiDisplayScanRequested=false
  22: mPid=4605, mWifiDisplayScanRequested=false
  23: mPid=4615, mWifiDisplayScanRequested=false
  24: mPid=4687, mWifiDisplayScanRequested=false
  25: mPid=4727, mWifiDisplayScanRequested=false
  26: mPid=4962, mWifiDisplayScanRequested=false
  27: mPid=5026, mWifiDisplayScanRequested=false
  28: mPid=5375, mWifiDisplayScanRequested=false
  29: mPid=5626, mWifiDisplayScanRequested=false
  30: mPid=5666, mWifiDisplayScanRequested=false
  31: mPid=5818, mWifiDisplayScanRequested=false
  32: mPid=6369, mWifiDisplayScanRequested=false
  33: mPid=6519, mWifiDisplayScanRequested=false
  34: mPid=6566, mWifiDisplayScanRequested=false
  35: mPid=6695, mWifiDisplayScanRequested=false
  36: mPid=7022, mWifiDisplayScanRequested=false
  37: mPid=7353, mWifiDisplayScanRequested=false
  38: mPid=7394, mWifiDisplayScanRequested=false
  39: mPid=7503, mWifiDisplayScanRequested=false
  40: mPid=7552, mWifiDisplayScanRequested=false
  41: mPid=7903, mWifiDisplayScanRequested=false
  42: mPid=7928, mWifiDisplayScanRequested=false
  43: mPid=8089, mWifiDisplayScanRequested=false
  44: mPid=8358, mWifiDisplayScanRequested=false
  45: mPid=8377, mWifiDisplayScanRequested=false
  46: mPid=8404, mWifiDisplayScanRequested=false
  47: mPid=8431, mWifiDisplayScanRequested=false
  48: mPid=8888, mWifiDisplayScanRequested=false
  49: mPid=8899, mWifiDisplayScanRequested=false

Display Power Controller Locked State:
  mDisplayReadyLocked=true
  mPendingRequestLocked=policy=BRIGHT, useProximitySensor=false, screenBrightnessOverride=-1, useAutoBrightness=false, screenAutoBrightnessAdjustmentOverride=NaN, screenLowPowerBrightnessFactor=0.5, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=-1, dozeScreenState=UNKNOWN
  mPendingRequestChangedLocked=false
  mPendingWaitForNegativeProximityLocked=false
  mPendingUpdatePowerStateLocked=false

Display Power Controller Configuration:
  mScreenBrightnessDozeConfig=1
  mScreenBrightnessDimConfig=10
  mScreenBrightnessRangeMinimum=10
  mScreenBrightnessRangeMaximum=255
  mScreenBrightnessDefault=102
  mScreenBrightnessForVrRangeMinimum=79
  mScreenBrightnessForVrRangeMaximum=255
  mScreenBrightnessForVrDefault=86
  mUseSoftwareAutoBrightnessConfig=false
  mAllowAutoBrightnessWhileDozingConfig=false
  mBrightnessRampRateFast=180
  mBrightnessRampRateSlow=60
  mSkipScreenOnBrightnessRamp=false
  mColorFadeFadesConfig=false
  mColorFadeEnabled=false
  mDisplayBlanksAfterDozeConfig=false
  mBrightnessBucketsInDozeConfig=false

Display Power Controller Thread State:
  mPowerRequest=policy=BRIGHT, useProximitySensor=false, screenBrightnessOverride=-1, useAutoBrightness=false, screenAutoBrightnessAdjustmentOverride=NaN, screenLowPowerBrightnessFactor=0.5, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=-1, dozeScreenState=UNKNOWN
  mUnfinishedBusiness=false
  mWaitingForNegativeProximity=false
  mProximitySensor=null
  mProximitySensorEnabled=false
  mProximityThreshold=0.0
  mProximity=Unknown
  mPendingProximity=Unknown
  mPendingProximityDebounceTime=-1 (679943 ms ago)
  mScreenOffBecauseOfProximity=false
  mLastUserSetScreenBrightness=0
  mCurrentScreenBrightnessSetting=102
  mPendingScreenBrightnessSetting=-1
  mTemporaryScreenBrightness=-1
  mAutoBrightnessAdjustment=0.0
  mTemporaryAutoBrightnessAdjustment=NaN
  mPendingAutoBrightnessAdjustment=NaN
  mScreenBrightnessForVr=86
  mAppliedAutoBrightness=false
  mAppliedDimming=false
  mAppliedLowPower=false
  mAppliedScreenBrightnessOverride=false
  mAppliedTemporaryBrightness=false
  mDozing=false
  mSkipRampState=RAMP_STATE_SKIP_NONE
  mInitialAutoBrightness=0
  mScreenOnBlockStartRealTime=0
  mScreenOffBlockStartRealTime=0
  mPendingScreenOnUnblocker=null
  mPendingScreenOffUnblocker=null
  mPendingScreenOff=false
  mReportedToPolicy=REPORTED_TO_POLICY_SCREEN_ON
  mScreenBrightnessRampAnimator.isAnimating()=false

Display Power State:
  mScreenState=ON
  mScreenBrightness=102
  mScreenReady=true
  mScreenUpdatePending=false
  mColorFadePrepared=false
  mColorFadeLevel=1.0
  mColorFadeReady=true
  mColorFadeDrawPending=false

Photonic Modulator State:
  mPendingState=ON
  mPendingBacklight=102
  mActualState=ON
  mActualBacklight=102
  mStateChangeInProgress=false
  mBacklightChangeInProgress=false

BrightnessTracker state:
  mStarted=false
  mLastBatteryLevel=NaN
  mLastBrightness=-1.0
  mLastSensorReadings.size=0
  mEventsDirty=false
  mEvents.size=0
  mWriteBrightnessTrackerStateScheduled=false
  mSensorRegistered=false

PersistentDataStore
  mLoaded=true
  mDirty=false
  RememberedWifiDisplays:
  DisplayStates:
  StableDeviceValues:
      StableDisplayWidth=1920
      StableDisplayHeight=1080
  BrightnessConfigurations:

I am no expert but as I was browsing the full dumpsys output, I noticed that:

h/w composer state:
  h/w composer enabled
======Mstar HAL Dump infomation Begin======
Capabilities:
  Unknown
  SidebandStream

Hwcomposer Display Devices:
Hwcomposer Primary Display 0: Type Physical Power mode: Off  Vsync: Disable
    Color modes [active]: [0]
    1 Config (* active)
    * 1920 x 1080 @ 60.0 Hz, DPI: 77.0 x 77.0
    mGlobalTransform:[[1.000,0.000,0.000][0.000,1.000,0.000][0.000,0.000,1.000]]
    1 HWC Layer
-----------------------------------------------------------------------------------------------------------------------------------
HWC Layer :34 (unknow)
        Visible Region                  Surface Damage
        [0, 0, 1920, 1080]              [0, 0, 1920, 1080]
    Compostion Type : Device    Z = 0 Buffer handle/Fence = 0xf42d8b00/-1     Foramt = RGBA_8888     mPlaneAlpha = 1     Transform = None     Blend = None
     Source crop (l,t,r,b) = [0, 0, 1920, 1080]  Display frame (l,t,r,b) = [0, 0, 1920, 1080]
    layer buffer's memory type is CMA_MIU0_CONTIGUOUS
-----------------------------------------------------------------------------------------------------------------------------------
HWC Layer :0 (Client Target)
        Visible Region                  Surface Damage
        [0, 0, 1920, 1080]              None
    Compostion Type : Client Target    Z = 0 Buffer handle/Fence = 0xf42d8600/-1     Foramt = BGRA_8888     mPlaneAlpha = 1     Transform = None     Blend = Premultiplied
     Source crop (l,t,r,b) = [0, 0, 1920, 1080]  Display frame (l,t,r,b) = [0, 0, 1920, 1080]
-----------------------------------------------------------------------------------------------------------------------------------
curTimingWidth = 3840, curTimingHeight = 2160
panelWidth = 3840,panelHeight = 2160, panelHStart = 0
display region = 1920 x 1080
OSD mDisplayQueue size 0
Mi window 0: Mi window[0xf42a72b0] ,acquireFenceFd = -1,releaseFenceFd = 52,blending = 1 planeAlpha = 255 layerindex=0 bFrameBufferTarget=0,layer[0],handle = 20000,Layer custom size src:1920 
x 1080,dst [0,0,3840,2160],window handle = 40001,window rect[0,0,1920,1080],surface width x height :1920 x 1080,buffer type = 2,Color format = 7,pixel alpha = 1, is full flip = 0, Surface han
dle = 80006,bReArrange = 0,eColorFormat = 7,eMemoryType = 2, eOwner = 0,phyAddr = 2f83000,width x height = 1920 x 1080,pitch = 7680.
hwcursor idx[-1],op=0,alpha=0,layer[0]:hnd=0,customSize=[0x0,0,0,0,0].window:hnd=0,hLayer=0,W/H=[0x0],rect=[0,0,0,0],bufType=0,color=0.SrcSurf:hnd=0,memType=0,Owner=0,phyAddr=0,W/H/Pitch=[0,0
,0],DstSurf:hnd=0,memType=0,owner=0,phyAddr=0,W/H/Pitch=[0,0,0],mSrcRect=[0,0,0,0],mDstRect=[0,0,0,0]


======Mstar HAL Dump infomation end======
Allocated buffers:
0xd4d0e000: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xeeb57f00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0x1e02 | FramebufferSurface
0xeeb7b000: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xeeb7b700: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xeeb7ba00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xeeb7bc00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xeeb7bd00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xeeb7be00:   16.00 KiB |   64 (  64) x   64 |    1 |        1 | 0xf02 | com.android.systemui.ImageWallpaper#0
0xeeb7bf00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xf0d35d00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0x1e02 | FramebufferSurface
0xf0d35e00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
Total allocated (estimate): 81016.00 KB

Which seems to confirm everything is running at 1080p for the launcher.

If I issue a 'wm size 3840x2160' command, the physical resolution remains the same, only the window manager changes which does not address the problem:

$ wm size
Physical size: 1920x1080
Override size: 3840x2160

I tried the the 'wm density' but, as far as I can tell, this is only for the way the ratio of the rendering looks like. I experimented a bit however, that does not address the native resolution.

Then the hwComposer section reports the following:

Hwcomposer Display Devices:
Hwcomposer Primary Display 0: Type Physical Power mode: Off  Vsync: Disable
    Color modes [active]: [0]
    1 Config (* active)
    * 1920 x 1080 @ 60.0 Hz, DPI: 77.0 x 77.0
    mGlobalTransform:[[1.000,0.000,0.000][0.000,1.000,0.000][0.000,0.000,1.000]]
    1 HWC Layer
-----------------------------------------------------------------------------------------------------------------------------------
HWC Layer :34 (unknow)
        Visible Region                  Surface Damage
        [0, 0, 1920, 1080]              [0, 0, 3840, 2160]
    Compostion Type : Client    Z = 0 Buffer handle/Fence = 0xf42d8200/-1     Foramt = RGBA_8888     mPlaneAlpha = 1     Transform = None     Blend = None
     Source crop (l,t,r,b) = [0, 0, 3840, 2160]  Display frame (l,t,r,b) = [0, 0, 1920, 1080]
    layer buffer's memory type is CMA_MIU0_CONTIGUOUS
-----------------------------------------------------------------------------------------------------------------------------------
HWC Layer :0 (Client Target)
        Visible Region                  Surface Damage
        [0, 0, 1920, 1080]              None
    Compostion Type : Client Target    Z = 0 Buffer handle/Fence = 0xf42d8600/-1     Foramt = BGRA_8888     mPlaneAlpha = 1     Transform = None     Blend = Premultiplied
     Source crop (l,t,r,b) = [0, 0, 1920, 1080]  Display frame (l,t,r,b) = [0, 0, 1920, 1080]
-----------------------------------------------------------------------------------------------------------------------------------
curTimingWidth = 3840, curTimingHeight = 2160
panelWidth = 3840,panelHeight = 2160, panelHStart = 0
display region = 1920 x 1080
OSD mDisplayQueue size 0
Mi window 0: Mi window[0xf42a7390] ,acquireFenceFd = -1,releaseFenceFd = 55,blending = 2 planeAlpha = 255 layerindex=1 bFrameBufferTarget=1,layer[0],handle = 20000,Layer custom size src:1920 
x 1080,dst [0,0,3840,2160],window handle = 40001,window rect[0,0,1920,1080],surface width x height :1920 x 1080,buffer type = 2,Color format = 8,pixel alpha = 1, is full flip = 0, Surface han
dle = 80003,bReArrange = 0,eColorFormat = 8,eMemoryType = 2, eOwner = 0,phyAddr = 7fe9000,width x height = 1920 x 1080,pitch = 7680.
hwcursor idx[-1],op=0,alpha=0,layer[0]:hnd=0,customSize=[0x0,0,0,0,0].window:hnd=0,hLayer=0,W/H=[0x0],rect=[0,0,0,0],bufType=0,color=0.SrcSurf:hnd=0,memType=0,Owner=0,phyAddr=0,W/H/Pitch=[0,0
,0],DstSurf:hnd=0,memType=0,owner=0,phyAddr=0,W/H/Pitch=[0,0,0],mSrcRect=[0,0,0,0],mDstRect=[0,0,0,0]


======Mstar HAL Dump infomation end======
Allocated buffers:
0xd4d0e000: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xd4d0e500: 32400.00 KiB | 3840 (3840) x 2160 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xeeb57f00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0x1e02 | FramebufferSurface
0xeeb7b000: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xeeb7b700: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xeeb7ba00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xeeb7bc00: 32400.00 KiB | 3840 (3840) x 2160 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xeeb7bd00: 32400.00 KiB | 3840 (3840) x 2160 |    1 |        1 | 0xf02 | Sys2023:dream#0
0xeeb7be00:   16.00 KiB |   64 (  64) x   64 |    1 |        1 | 0xf02 | com.android.systemui.ImageWallpaper#0
0xf0d35d00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0x1e02 | FramebufferSurface
0xf0d35e00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
Total allocated (estimate): 153916.00 KB

And after a reboot (still showing resolution at 1080p while UI is trying to show 4K)

Hwcomposer Display Devices:
Hwcomposer Primary Display 0: Type Physical Power mode: Off  Vsync: Disable
    Color modes [active]: [0]
    1 Config (* active)
    * 1920 x 1080 @ 60.0 Hz, DPI: 77.0 x 77.0
    mGlobalTransform:[[1.000,0.000,0.000][0.000,1.000,0.000][0.000,0.000,1.000]]
    1 HWC Layer
-----------------------------------------------------------------------------------------------------------------------------------
HWC Layer :4 (unknow)
        Visible Region                  Surface Damage
        [0, 0, 1920, 1080]              [0, 0, 3840, 2160]
    Compostion Type : Client    Z = 0 Buffer handle/Fence = 0xe85d8500/-1     Foramt = RGBA_8888     mPlaneAlpha = 1     Transform = None     Blend = None
     Source crop (l,t,r,b) = [0, 0, 3840, 2160]  Display frame (l,t,r,b) = [0, 0, 1920, 1080]
    layer buffer's memory type is CMA_MIU0_CONTIGUOUS
-----------------------------------------------------------------------------------------------------------------------------------
HWC Layer :0 (Client Target)
        Visible Region                  Surface Damage
        [0, 0, 1920, 1080]              None
    Compostion Type : Client Target    Z = 0 Buffer handle/Fence = 0xe85d8600/-1     Foramt = BGRA_8888     mPlaneAlpha = 1     Transform = None     Blend = Premultiplied
     Source crop (l,t,r,b) = [0, 0, 1920, 1080]  Display frame (l,t,r,b) = [0, 0, 1920, 1080]
-----------------------------------------------------------------------------------------------------------------------------------
curTimingWidth = 3840, curTimingHeight = 2160
panelWidth = 3840,panelHeight = 2160, panelHStart = 0
display region = 1920 x 1080
OSD mDisplayQueue size 0
Mi window 0: Mi window[0xe85a72b0] ,acquireFenceFd = -1,releaseFenceFd = 55,blending = 2 planeAlpha = 255 layerindex=1 bFrameBufferTarget=1,layer[0],handle = 20000,Layer custom size src:1920 
x 1080,dst [0,0,3840,2160],window handle = 40001,window rect[0,0,1920,1080],surface width x height :1920 x 1080,buffer type = 2,Color format = 8,pixel alpha = 1, is full flip = 0, Surface han
dle = 80003,bReArrange = 0,eColorFormat = 8,eMemoryType = 2, eOwner = 0,phyAddr = 7fe9000,width x height = 1920 x 1080,pitch = 7680.
hwcursor idx[-1],op=0,alpha=0,layer[0]:hnd=0,customSize=[0x0,0,0,0,0].window:hnd=0,hLayer=0,W/H=[0x0],rect=[0,0,0,0],bufType=0,color=0.SrcSurf:hnd=0,memType=0,Owner=0,phyAddr=0,W/H/Pitch=[0,0
,0],DstSurf:hnd=0,memType=0,owner=0,phyAddr=0,W/H/Pitch=[0,0,0],mSrcRect=[0,0,0,0],mDstRect=[0,0,0,0]


======Mstar HAL Dump infomation end======
Allocated buffers:
0xc7e08600:   16.00 KiB |   64 (  64) x   64 |    1 |        1 | 0xf02 | com.android.systemui.ImageWallpaper#0
0xe7cd7c00: 32400.00 KiB | 3840 (3840) x 2160 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xe7cd7d00: 32400.00 KiB | 3840 (3840) x 2160 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xe7cd7e00: 32400.00 KiB | 3840 (3840) x 2160 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
0xe7cd7f00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0x1e02 | FramebufferSurface
0xe9eb5d00: 8100.00 KiB | 1920 (1920) x 1080 |    1 |        1 | 0x1e02 | FramebufferSurface
0xe9eb5e00: 32400.00 KiB | 3840 (3840) x 2160 |    1 |        1 | 0xf02 | com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity#0
Total allocated (estimate): 145816.00 KB

I am trying to understand whether the AndroidTV can run the launcher at 4K or whether the system on chip cannot handle that 4k resolution.

If anybody has any guidance on what else to check or try through ADB shell to confirm what I observed, that would be helpful.

BiggussDikkuss

The Android TV GUI interface is Max. resolution 1080p, because the Android TV OS itself has to cater to hardware configs both entry level and powerful like the Nvidia Shield.

If you also look at Stats for Nerds in the YouTube App it will also say Viewport “1920x1080”

It’s been that way since 2015. There is no fix or - reliable - wokaround.

4K video playback on a 4K TV running Android TV OS will be output at 4K, independent of the Graphic user interface 1080 resolution restriction.

Any externally HDMI connected media player will produce an onscreen Popup on a TV corresponding to the output resolution set in the Android devices display settings.

If the TV then displays 2160p that still does not mean the GUI used on the device is a true 4K resolution, but an upscaled 1080 > 2160p one. 4K video however will be output at 4K.