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