DisplayAnalyzer.h revision b7e04bcc10f0b8aaa698b1ccae40e87664ebef18
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 isOverlayAllowed(); 5335fc4846ba9657d6d2638e68d810618fedec7ecdAshish Singhi int getVideoInstances(); 54eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void postHotplugEvent(bool connected); 55b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe void postVideoEvent(int instanceID, int state); 56eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void postBlankEvent(bool blank); 57d248396b4f48861e1e27c5e316c776121ab44938mamatha balguri bool isPresentationLayer(hwc_layer_1_t &layer); 58ef111c2d5fb42bfcefca8e774837e12cc1940d80Ashish Singhi bool isProtectedLayer(hwc_layer_1_t &layer); 5965efc253a628175c7afa95c431b746ea20052794Andy Qiu 6065efc253a628175c7afa95c431b746ea20052794Andy Qiuprivate: 61eb726af21649d79ed720bdf329e0849270995c45Andy Qiu enum DisplayEventType { 62eb726af21649d79ed720bdf329e0849270995c45Andy Qiu HOTPLUG_EVENT, 63eb726af21649d79ed720bdf329e0849270995c45Andy Qiu BLANK_EVENT, 64eb726af21649d79ed720bdf329e0849270995c45Andy Qiu VIDEO_EVENT, 65b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe TIMING_EVENT, 66eb726af21649d79ed720bdf329e0849270995c45Andy Qiu }; 67eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 68eb726af21649d79ed720bdf329e0849270995c45Andy Qiu struct Event { 69eb726af21649d79ed720bdf329e0849270995c45Andy Qiu int type; 70eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 71eb726af21649d79ed720bdf329e0849270995c45Andy Qiu struct VideoEvent { 72b58f29390918c0df3bd6d0731bf98daf57511b9fLin Xie int instanceID; 73b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe int state; 74eb726af21649d79ed720bdf329e0849270995c45Andy Qiu }; 75eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 76eb726af21649d79ed720bdf329e0849270995c45Andy Qiu union { 77b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe bool bValue; 78eb726af21649d79ed720bdf329e0849270995c45Andy Qiu VideoEvent videoEvent; 79eb726af21649d79ed720bdf329e0849270995c45Andy Qiu }; 80eb726af21649d79ed720bdf329e0849270995c45Andy Qiu }; 81eb726af21649d79ed720bdf329e0849270995c45Andy Qiu inline void postEvent(Event& e); 82b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe inline bool getEvent(Event& e); 83eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void handlePendingEvents(); 84eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void handleHotplugEvent(bool connected); 85eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void handleBlankEvent(bool blank); 86b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe void handleVideoEvent(int instanceID, int state); 87b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe void handleTimingEvent(); 88eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 89eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void blankSecondaryDevice(); 90eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void detectVideoExtendedMode(); 91770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie void detectTrickMode(hwc_display_contents_1_t *list); 92b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe bool hasProtectedLayer(); 93ab1610b6b232267dd2971ee05dd9dda2cfe2a6a1Lin Xie inline void resetCompositionType(hwc_display_contents_1_t *content); 94770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie 95eb726af21649d79ed720bdf329e0849270995c45Andy Qiuprivate: 96b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe // Video playback state, must match defintion in Multi Display Service 97b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe enum 98b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe { 99b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe VIDEO_PLAYBACK_IDLE, 100b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe VIDEO_PLAYBACK_STARTING, 101b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe VIDEO_PLAYBACK_STARTED, 102b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe VIDEO_PLAYBACK_STOPPING, 103b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe VIDEO_PLAYBACK_STOPPED, 104b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe }; 105b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe 106b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpeprivate: 10765efc253a628175c7afa95c431b746ea20052794Andy Qiu bool mInitialized; 1085490411cb9330d4e92d59878da3693c33a948ad6Andy Qiu bool mEnableVideoExtendedMode; 10965efc253a628175c7afa95c431b746ea20052794Andy Qiu bool mVideoExtendedMode; 110770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie bool mForceCloneMode; 111d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu bool mBlankDevice; 112b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe // map video instance ID to video state 113b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe KeyedVector<int, int> mVideoStateMap; 114eb726af21649d79ed720bdf329e0849270995c45Andy Qiu bool mOverlayAllowed; 115eb726af21649d79ed720bdf329e0849270995c45Andy Qiu int mCachedNumDisplays; 116eb726af21649d79ed720bdf329e0849270995c45Andy Qiu hwc_display_contents_1_t** mCachedDisplays; 117eb726af21649d79ed720bdf329e0849270995c45Andy Qiu Vector<Event> mPendingEvents; 118eb726af21649d79ed720bdf329e0849270995c45Andy Qiu Mutex mEventMutex; 1194ffa9f40b823e4c99cd7a21598373969517d93a8Andy Qiu Condition mEventHandledCondition; 12065efc253a628175c7afa95c431b746ea20052794Andy Qiu}; 12165efc253a628175c7afa95c431b746ea20052794Andy Qiu 12265efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace intel 12365efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace android 12465efc253a628175c7afa95c431b746ea20052794Andy Qiu 12565efc253a628175c7afa95c431b746ea20052794Andy Qiu 12665efc253a628175c7afa95c431b746ea20052794Andy Qiu 12765efc253a628175c7afa95c431b746ea20052794Andy Qiu#endif /* DISPLAY_ANALYZER_H */ 128