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