Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ebb7a72 authored by Huihong Luo's avatar Huihong Luo
Browse files

Update HDCP for external displays

So the secure flag of Display object in Display Manager (DM) can
be set correctly. HWC calls the onSync method as a workaround,
to notify SurfaceFlinger (SF) about hdcp changes, SF in turn sends
an event to DM, DM will then fetch and update display info.

Bug: 280818362
Test: manual
Change-Id: I29ce0337865b51c0fc7bf7c2d7fdd4cd6d66ef46
parent 141aab9c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -344,6 +344,10 @@ void Choreographer::dispatchNullEvent(nsecs_t, PhysicalDisplayId) {
    handleRefreshRateUpdates();
}

void Choreographer::dispatchHdcpLevelsChanged(PhysicalDisplayId, int32_t, int32_t) {
    LOG_ALWAYS_FATAL("dispatchHdcpLevelsChanged was called but was never registered");
}

void Choreographer::handleMessage(const Message& message) {
    switch (message.what) {
        case MSG_SCHEDULE_CALLBACKS:
+5 −0
Original line number Diff line number Diff line
@@ -195,6 +195,11 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp,
                    dispatchFrameRateOverrides(ev.header.timestamp, ev.header.displayId,
                                               std::move(mFrameRateOverrides));
                    break;
                case DisplayEventReceiver::DISPLAY_EVENT_HDCP_LEVELS_CHANGE:
                    dispatchHdcpLevelsChanged(ev.header.displayId,
                                              ev.hdcpLevelsChange.connectedLevel,
                                              ev.hdcpLevelsChange.maxLevel);
                    break;
                default:
                    ALOGW("dispatcher %p ~ ignoring unknown event type %#x", this, ev.header.type);
                    break;
+0 −1
Original line number Diff line number Diff line
@@ -3117,7 +3117,6 @@ status_t SurfaceComposerClient::removeWindowInfosListener(
            ->removeWindowInfosListener(windowInfosListener,
                                        ComposerServiceAIDL::getComposerService());
}

// ----------------------------------------------------------------------------

status_t ScreenshotClient::captureDisplay(const DisplayCaptureArgs& captureArgs,
+1 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ public:
    MOCK_METHOD2(dispatchNullEvent, void(nsecs_t, PhysicalDisplayId));
    MOCK_METHOD3(dispatchFrameRateOverrides,
                 void(nsecs_t, PhysicalDisplayId, std::vector<FrameRateOverride>));
    MOCK_METHOD3(dispatchHdcpLevelsChanged, void(PhysicalDisplayId, int32_t, int32_t));
};

} // namespace android
+2 −0
Original line number Diff line number Diff line
@@ -116,6 +116,8 @@ private:
    void dispatchNullEvent(nsecs_t, PhysicalDisplayId) override;
    void dispatchFrameRateOverrides(nsecs_t timestamp, PhysicalDisplayId displayId,
                                    std::vector<FrameRateOverride> overrides) override;
    void dispatchHdcpLevelsChanged(PhysicalDisplayId displayId, int32_t connectedLevel,
                                   int32_t maxLevel) override;

    void scheduleCallbacks();

Loading