Loading services/surfaceflinger/BufferLayer.cpp +8 −3 Original line number Diff line number Diff line Loading @@ -803,6 +803,13 @@ bool BufferLayer::getOpacityForFormat(uint32_t format) { return true; } bool BufferLayer::isHdrY410() const { // pixel format is HDR Y410 masquerading as RGBA_1010102 return (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ && mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA && getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102); } void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityTransform) const { ATRACE_CALL(); const State& s(getDrawingState()); Loading Loading @@ -856,9 +863,7 @@ void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityT getColor()); engine.setSourceDataSpace(mCurrentDataSpace); if (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ && mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA && getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102) { if (isHdrY410()) { engine.setSourceY410BT2020(true); } Loading services/surfaceflinger/BufferLayer.h +2 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,8 @@ public: bool isBufferLatched() const override { return mRefreshPending; } void setDefaultBufferSize(uint32_t w, uint32_t h) override; bool isHdrY410() const override; void setPerFrameData(const sp<const DisplayDevice>& display) override; bool isOpaque(const Layer::State& s) const override; Loading services/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -315,6 +315,8 @@ protected: public: virtual void setDefaultBufferSize(uint32_t /*w*/, uint32_t /*h*/) {} virtual bool isHdrY410() const { return false; } void setGeometry(const sp<const DisplayDevice>& display, uint32_t z); void forceClientComposition(int32_t displayId); bool getForceClientComposition(int32_t displayId); Loading services/surfaceflinger/SurfaceFlinger.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -1950,12 +1950,13 @@ void SurfaceFlinger::setUpHWComposer() { displayId, result); } for (auto& layer : display->getVisibleLayersSortedByZ()) { if ((layer->getDataSpace() == Dataspace::BT2020_PQ || if (layer->isHdrY410()) { layer->forceClientComposition(displayId); } else if ((layer->getDataSpace() == Dataspace::BT2020_PQ || layer->getDataSpace() == Dataspace::BT2020_ITU_PQ) && !display->hasHDR10Support()) { layer->forceClientComposition(displayId); } if ((layer->getDataSpace() == Dataspace::BT2020_HLG || } else if ((layer->getDataSpace() == Dataspace::BT2020_HLG || layer->getDataSpace() == Dataspace::BT2020_ITU_HLG) && !display->hasHLGSupport()) { layer->forceClientComposition(displayId); Loading Loading
services/surfaceflinger/BufferLayer.cpp +8 −3 Original line number Diff line number Diff line Loading @@ -803,6 +803,13 @@ bool BufferLayer::getOpacityForFormat(uint32_t format) { return true; } bool BufferLayer::isHdrY410() const { // pixel format is HDR Y410 masquerading as RGBA_1010102 return (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ && mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA && getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102); } void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityTransform) const { ATRACE_CALL(); const State& s(getDrawingState()); Loading Loading @@ -856,9 +863,7 @@ void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityT getColor()); engine.setSourceDataSpace(mCurrentDataSpace); if (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ && mConsumer->getCurrentApi() == NATIVE_WINDOW_API_MEDIA && getBE().compositionInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102) { if (isHdrY410()) { engine.setSourceY410BT2020(true); } Loading
services/surfaceflinger/BufferLayer.h +2 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,8 @@ public: bool isBufferLatched() const override { return mRefreshPending; } void setDefaultBufferSize(uint32_t w, uint32_t h) override; bool isHdrY410() const override; void setPerFrameData(const sp<const DisplayDevice>& display) override; bool isOpaque(const Layer::State& s) const override; Loading
services/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -315,6 +315,8 @@ protected: public: virtual void setDefaultBufferSize(uint32_t /*w*/, uint32_t /*h*/) {} virtual bool isHdrY410() const { return false; } void setGeometry(const sp<const DisplayDevice>& display, uint32_t z); void forceClientComposition(int32_t displayId); bool getForceClientComposition(int32_t displayId); Loading
services/surfaceflinger/SurfaceFlinger.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -1950,12 +1950,13 @@ void SurfaceFlinger::setUpHWComposer() { displayId, result); } for (auto& layer : display->getVisibleLayersSortedByZ()) { if ((layer->getDataSpace() == Dataspace::BT2020_PQ || if (layer->isHdrY410()) { layer->forceClientComposition(displayId); } else if ((layer->getDataSpace() == Dataspace::BT2020_PQ || layer->getDataSpace() == Dataspace::BT2020_ITU_PQ) && !display->hasHDR10Support()) { layer->forceClientComposition(displayId); } if ((layer->getDataSpace() == Dataspace::BT2020_HLG || } else if ((layer->getDataSpace() == Dataspace::BT2020_HLG || layer->getDataSpace() == Dataspace::BT2020_ITU_HLG) && !display->hasHLGSupport()) { layer->forceClientComposition(displayId); Loading