DisplayAnalyzer.h revision 4ffa9f40b823e4c99cd7a21598373969517d93a8
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);
51bd5ed146ffeb236f3c5cc20b2ebaf6a850b54007Lin Xie    bool isVideoEmbedded(hwc_layer_1_t &layer);
52eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool isVideoPlaying();
53eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool isOverlayAllowed();
54eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void postHotplugEvent(bool connected);
55eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void postVideoEvent(bool preparing, bool playing);
56eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void postBlankEvent(bool blank);
5765efc253a628175c7afa95c431b746ea20052794Andy Qiu
5865efc253a628175c7afa95c431b746ea20052794Andy Qiuprivate:
59eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    enum DisplayEventType {
60eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        HOTPLUG_EVENT,
61eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        BLANK_EVENT,
62eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        VIDEO_EVENT,
63eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    };
64eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
65eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    struct Event {
66eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        int type;
67eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
68eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        struct VideoEvent {
69eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool preparing;
70eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool playing;
71eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        };
72eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
73eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        union {
74eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool connected;
75eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            bool blank;
76eb726af21649d79ed720bdf329e0849270995c45Andy Qiu            VideoEvent videoEvent;
77eb726af21649d79ed720bdf329e0849270995c45Andy Qiu        };
78eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    };
79eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    inline void postEvent(Event& e);
80eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void handlePendingEvents();
81eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void handleHotplugEvent(bool connected);
82eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void handleBlankEvent(bool blank);
83eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void handleVideoEvent(bool preparing, bool playing);
84eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
85eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void blankSecondaryDevice();
86eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    void detectVideoExtendedMode();
87770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie    void detectTrickMode(hwc_display_contents_1_t *list);
88770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie
89eb726af21649d79ed720bdf329e0849270995c45Andy Qiuprivate:
9065efc253a628175c7afa95c431b746ea20052794Andy Qiu    bool mInitialized;
915490411cb9330d4e92d59878da3693c33a948ad6Andy Qiu    bool mEnableVideoExtendedMode;
9265efc253a628175c7afa95c431b746ea20052794Andy Qiu    bool mVideoExtendedMode;
93770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie    bool mForceCloneMode;
94d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu    bool mBlankDevice;
95eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool mVideoPlaying;
96eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool mVideoPreparing;
97eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    bool mOverlayAllowed;
98eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    int mCachedNumDisplays;
99eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    hwc_display_contents_1_t** mCachedDisplays;
100eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    Vector<Event> mPendingEvents;
101eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    Mutex mEventMutex;
1024ffa9f40b823e4c99cd7a21598373969517d93a8Andy Qiu    Condition mEventHandledCondition;
10365efc253a628175c7afa95c431b746ea20052794Andy Qiu};
10465efc253a628175c7afa95c431b746ea20052794Andy Qiu
10565efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace intel
10665efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace android
10765efc253a628175c7afa95c431b746ea20052794Andy Qiu
10865efc253a628175c7afa95c431b746ea20052794Andy Qiu
10965efc253a628175c7afa95c431b746ea20052794Andy Qiu
11065efc253a628175c7afa95c431b746ea20052794Andy Qiu#endif /* DISPLAY_ANALYZER_H */
111