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