DisplayAnalyzer.h revision 35fc4846ba9657d6d2638e68d810618fedec7ecd
165efc253a628175c7afa95c431b746ea20052794Andy Qiu/*
265efc253a628175c7afa95c431b746ea20052794Andy Qiu * Copyright © 2012 Intel Corporation
365efc253a628175c7afa95c431b746ea20052794Andy Qiu * All rights reserved.
465efc253a628175c7afa95c431b746ea20052794Andy Qiu *
565efc253a628175c7afa95c431b746ea20052794Andy Qiu * Permission is hereby granted, free of charge, to any person obtaining a
665efc253a628175c7afa95c431b746ea20052794Andy Qiu * copy of this software and associated documentation files (the "Software"),
765efc253a628175c7afa95c431b746ea20052794Andy Qiu * to deal in the Software without restriction, including without limitation
865efc253a628175c7afa95c431b746ea20052794Andy Qiu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
965efc253a628175c7afa95c431b746ea20052794Andy Qiu * and/or sell copies of the Software, and to permit persons to whom the
1065efc253a628175c7afa95c431b746ea20052794Andy Qiu * Software is furnished to do so, subject to the following conditions:
1165efc253a628175c7afa95c431b746ea20052794Andy Qiu *
1265efc253a628175c7afa95c431b746ea20052794Andy Qiu * The above copyright notice and this permission notice (including the next
1365efc253a628175c7afa95c431b746ea20052794Andy Qiu * paragraph) shall be included in all copies or substantial portions of the
1465efc253a628175c7afa95c431b746ea20052794Andy Qiu * Software.
1565efc253a628175c7afa95c431b746ea20052794Andy Qiu *
1665efc253a628175c7afa95c431b746ea20052794Andy Qiu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1765efc253a628175c7afa95c431b746ea20052794Andy Qiu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1865efc253a628175c7afa95c431b746ea20052794Andy Qiu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1965efc253a628175c7afa95c431b746ea20052794Andy Qiu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2065efc253a628175c7afa95c431b746ea20052794Andy Qiu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2165efc253a628175c7afa95c431b746ea20052794Andy Qiu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
2265efc253a628175c7afa95c431b746ea20052794Andy Qiu * IN THE SOFTWARE.
2365efc253a628175c7afa95c431b746ea20052794Andy Qiu *
2465efc253a628175c7afa95c431b746ea20052794Andy Qiu * Authors:
2565efc253a628175c7afa95c431b746ea20052794Andy Qiu *    Jackie Li <yaodong.li@intel.com>
2665efc253a628175c7afa95c431b746ea20052794Andy Qiu *
2765efc253a628175c7afa95c431b746ea20052794Andy Qiu */
2865efc253a628175c7afa95c431b746ea20052794Andy Qiu#ifndef DISPLAY_ANALYZER_H
2965efc253a628175c7afa95c431b746ea20052794Andy Qiu#define DISPLAY_ANALYZER_H
3065efc253a628175c7afa95c431b746ea20052794Andy Qiu
31d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu#include <utils/threads.h>
32eb726af21649d79ed720bdf329e0849270995c45Andy Qiu#include <utils/Vector.h>
3365efc253a628175c7afa95c431b746ea20052794Andy Qiu
3465efc253a628175c7afa95c431b746ea20052794Andy Qiu
3565efc253a628175c7afa95c431b746ea20052794Andy Qiunamespace android {
3665efc253a628175c7afa95c431b746ea20052794Andy Qiunamespace intel {
3765efc253a628175c7afa95c431b746ea20052794Andy Qiu
3865efc253a628175c7afa95c431b746ea20052794Andy Qiu
3965efc253a628175c7afa95c431b746ea20052794Andy Qiuclass DisplayAnalyzer {
4065efc253a628175c7afa95c431b746ea20052794Andy Qiupublic:
4165efc253a628175c7afa95c431b746ea20052794Andy Qiu    DisplayAnalyzer();
4265efc253a628175c7afa95c431b746ea20052794Andy Qiu    virtual ~DisplayAnalyzer();
4365efc253a628175c7afa95c431b746ea20052794Andy Qiu
4465efc253a628175c7afa95c431b746ea20052794Andy Qiupublic:
4565efc253a628175c7afa95c431b746ea20052794Andy Qiu    bool initialize();
46e2ad4c047651d4442f6a0e002290016d45e9201afu jin    void deinitialize();
4765efc253a628175c7afa95c431b746ea20052794Andy Qiu    void analyzeContents(size_t numDisplays, hwc_display_contents_1_t** displays);
4865efc253a628175c7afa95c431b746ea20052794Andy Qiu    bool checkVideoExtendedMode();
495490411cb9330d4e92d59878da3693c33a948ad6Andy Qiu    bool isVideoExtendedModeEnabled();
5065efc253a628175c7afa95c431b746ea20052794Andy Qiu    bool isVideoLayer(hwc_layer_1_t &layer);
510131f123eba74813aca3eaaf99cd418b6b558416Andy Qiu    bool isVideoFullScreen(int device, hwc_layer_1_t &layer);
52eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool isVideoPlaying();
53eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool isOverlayAllowed();
5435fc4846ba9657d6d2638e68d810618fedec7ecdAshish Singhi    int  getVideoInstances();
55eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void postHotplugEvent(bool connected);
56b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie    void postVideoEvent(int instances, int instanceID, bool preparing, bool playing);
57eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void postBlankEvent(bool blank);
58d248396b4f48861e1e27c5e316c776121ab44938mamatha balguri    bool isPresentationLayer(hwc_layer_1_t &layer);
59ef111c2d5fb42bfcefca8e774837e12cc1940d80Ashish Singhi    bool isProtectedLayer(hwc_layer_1_t &layer);
6065efc253a628175c7afa95c431b746ea20052794Andy Qiu
6165efc253a628175c7afa95c431b746ea20052794Andy Qiuprivate:
62eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    enum DisplayEventType {
63eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        HOTPLUG_EVENT,
64eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        BLANK_EVENT,
65eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        VIDEO_EVENT,
66eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    };
67eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
68eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    struct Event {
69eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        int type;
70eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
71eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        struct VideoEvent {
72b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie            int instances;
73b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie            int instanceID;
74eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool preparing;
75eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool playing;
76eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        };
77eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
78eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        union {
79eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool connected;
80eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool blank;
81eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            VideoEvent videoEvent;
82eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        };
83eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    };
84eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    inline void postEvent(Event& e);
85eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void handlePendingEvents();
86eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void handleHotplugEvent(bool connected);
87eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void handleBlankEvent(bool blank);
88b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie    void handleVideoEvent(int instances, int instanceID, bool preparing, bool playing);
89eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
90eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void blankSecondaryDevice();
91eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void detectVideoExtendedMode();
92770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie    void detectTrickMode(hwc_display_contents_1_t *list);
93b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie    void handleModeSwitch();
94ab1610b6b232267dd2971ee05dd9dda2cfe2a6a1Lin Xie    inline void resetCompositionType(hwc_display_contents_1_t *content);
95770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie
96eb726af21649d79ed720bdf329e0849270995c45Andy Qiuprivate:
9765efc253a628175c7afa95c431b746ea20052794Andy Qiu    bool mInitialized;
985490411cb9330d4e92d59878da3693c33a948ad6Andy Qiu    bool mEnableVideoExtendedMode;
9965efc253a628175c7afa95c431b746ea20052794Andy Qiu    bool mVideoExtendedMode;
100770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie    bool mForceCloneMode;
101d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu    bool mBlankDevice;
102eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool mVideoPlaying;
103eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool mVideoPreparing;
104b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie    bool mVideoStateChanged;
105eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool mOverlayAllowed;
106b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie    int mVideoInstances;
107b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie    int mVideoInstanceId;
108eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    int mCachedNumDisplays;
109eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    hwc_display_contents_1_t** mCachedDisplays;
110eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    Vector<Event> mPendingEvents;
111eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    Mutex mEventMutex;
1124ffa9f40b823e4c99cd7a21598373969517d93a8Andy Qiu    Condition mEventHandledCondition;
11365efc253a628175c7afa95c431b746ea20052794Andy Qiu};
11465efc253a628175c7afa95c431b746ea20052794Andy Qiu
11565efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace intel
11665efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace android
11765efc253a628175c7afa95c431b746ea20052794Andy Qiu
11865efc253a628175c7afa95c431b746ea20052794Andy Qiu
11965efc253a628175c7afa95c431b746ea20052794Andy Qiu
12065efc253a628175c7afa95c431b746ea20052794Andy Qiu#endif /* DISPLAY_ANALYZER_H */
121