1054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* 2054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Copyright (c) 2012-2014, Linux Foundation. All rights reserved. 3054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 4054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Redistribution and use in source and binary forms, with or without 5054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * modification, are permitted provided that the following conditions are 6054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * met: 7054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * * Redistributions of source code must retain the above copyright 8054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * notice, this list of conditions and the following disclaimer. 9054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * * Redistributions in binary form must reproduce the above 10054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * copyright notice, this list of conditions and the following 11054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * disclaimer in the documentation and/or other materials provided 12054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * with the distribution. 13054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * * Neither the name of Linux Foundation nor the names of its 14054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * contributors may be used to endorse or promote products derived 15054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * from this software without specific prior written permission. 16054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 17054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin */ 29054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 30054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifndef LOG_TAG 31054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define LOG_TAG "qsfdump" 32054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 33054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define LOG_NDEBUG 0 34054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <hwc_utils.h> 35054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <hwc_dump_layers.h> 36054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <cutils/log.h> 37054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <sys/stat.h> 38054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <comptype.h> 39054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifdef QCOM_BSP 40054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin// Ignore Wconversion errors for external headers 41054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#pragma GCC diagnostic push 42054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#pragma GCC diagnostic ignored "-Wconversion" 43054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <SkBitmap.h> 44054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <SkImageEncoder.h> 45054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#pragma GCC diagnostic pop 46054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 47054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifdef STDC_FORMAT_MACROS 48054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <inttypes.h> 49054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 50054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 51054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinnamespace qhwc { 52054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 53054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin// MAX_ALLOWED_FRAMEDUMPS must be capped to (LONG_MAX - 1) 54054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin// 60fps => 216000 frames per hour 55054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin// Below setting of 216000 * 24 * 7 => 1 week or 168 hours of capture. 56054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin enum { 57054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin MAX_ALLOWED_FRAMEDUMPS = (216000 * 24 * 7) 58054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin }; 59054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 60054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinbool HwcDebug::sDumpEnable = false; 61054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 62054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinHwcDebug::HwcDebug(uint32_t dpy): 63054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimRaw(0), 64054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrRaw(1), 65054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimPng(0), 66054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrPng(1), 67054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDpy(dpy) { 68054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char dumpPropStr[PROPERTY_VALUE_MAX]; 69054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if(mDpy) { 70054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(mDisplayName, "external", sizeof(mDisplayName)); 71054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } else { 72054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(mDisplayName, "primary", sizeof(mDisplayName)); 73054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 74054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(mDumpPropKeyDisplayType, sizeof(mDumpPropKeyDisplayType), 75054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "debug.sf.dump.%s", (char *)mDisplayName); 76054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 77054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if ((property_get("debug.sf.dump.enable", dumpPropStr, NULL) > 0)) { 78054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if(!strncmp(dumpPropStr, "true", strlen("true"))) { 79054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin sDumpEnable = true; 80054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 81054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 82054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 83054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 84054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinvoid HwcDebug::dumpLayers(hwc_display_contents_1_t* list) 85054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{ 86054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Check need for dumping layers for debugging. 87054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (UNLIKELY(sDumpEnable) && UNLIKELY(needToDumpLayers()) && LIKELY(list)) { 88054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin logHwcProps(list->flags); 89054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin for (size_t i = 0; i < list->numHwLayers; i++) { 90054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin logLayer(i, list->hwLayers); 91054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpLayer(i, list->hwLayers); 92054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 93054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 94054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 95054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 96054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinbool HwcDebug::needToDumpLayers() 97054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{ 98054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool bDumpLayer = false; 99054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char dumpPropStr[PROPERTY_VALUE_MAX]; 100054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Enable primary dump and disable external dump by default. 101054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool bDumpEnable = !mDpy; 102054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin time_t timeNow; 103054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tm dumpTime; 104054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 105054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Override the bDumpEnable based on the property value, if the property 106054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // is present in the build.prop file. 107054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if ((property_get(mDumpPropKeyDisplayType, dumpPropStr, NULL) > 0)) { 108054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if(!strncmp(dumpPropStr, "true", strlen("true"))) 109054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bDumpEnable = true; 110054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin else 111054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bDumpEnable = false; 112054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 113054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 114054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (false == bDumpEnable) 115054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin return false; 116054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 117054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin time(&timeNow); 118054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin localtime_r(&timeNow, &dumpTime); 119054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 120054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if ((property_get("debug.sf.dump.png", dumpPropStr, NULL) > 0) && 121054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (strncmp(dumpPropStr, mDumpPropStrPng, PROPERTY_VALUE_MAX - 1))) { 122054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Strings exist & not equal implies it has changed, so trigger a dump 123054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(mDumpPropStrPng, dumpPropStr, sizeof(mDumpPropStrPng)); 124054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimPng = atoi(dumpPropStr); 125054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (mDumpCntLimPng > MAX_ALLOWED_FRAMEDUMPS) { 126054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGW("Warning: Using debug.sf.dump.png %d (= max)", 127054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin MAX_ALLOWED_FRAMEDUMPS); 128054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimPng = MAX_ALLOWED_FRAMEDUMPS; 129054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 130054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimPng = (mDumpCntLimPng < 0) ? 0: mDumpCntLimPng; 131054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (mDumpCntLimPng) { 132054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(mDumpDirPng, sizeof(mDumpDirPng), 133054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "/data/sfdump.png.%04d.%02d.%02d.%02d.%02d.%02d", 134054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpTime.tm_year + 1900, dumpTime.tm_mon + 1, 135054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpTime.tm_mday, dumpTime.tm_hour, 136054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpTime.tm_min, dumpTime.tm_sec); 137054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (0 == mkdir(mDumpDirPng, 0777)) 138054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrPng = 0; 139054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin else { 140054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGE("Error: %s. Failed to create sfdump directory: %s", 141054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strerror(errno), mDumpDirPng); 142054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrPng = mDumpCntLimPng + 1; 143054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 144054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 145054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 146054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 147054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (mDumpCntrPng <= mDumpCntLimPng) 148054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrPng++; 149054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 150054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if ((property_get("debug.sf.dump", dumpPropStr, NULL) > 0) && 151054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (strncmp(dumpPropStr, mDumpPropStrRaw, PROPERTY_VALUE_MAX - 1))) { 152054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Strings exist & not equal implies it has changed, so trigger a dump 153054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(mDumpPropStrRaw, dumpPropStr, sizeof(mDumpPropStrRaw)); 154054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimRaw = atoi(dumpPropStr); 155054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (mDumpCntLimRaw > MAX_ALLOWED_FRAMEDUMPS) { 156054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGW("Warning: Using debug.sf.dump %d (= max)", 157054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin MAX_ALLOWED_FRAMEDUMPS); 158054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimRaw = MAX_ALLOWED_FRAMEDUMPS; 159054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 160054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimRaw = (mDumpCntLimRaw < 0) ? 0: mDumpCntLimRaw; 161054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (mDumpCntLimRaw) { 162054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(mDumpDirRaw, sizeof(mDumpDirRaw), 163054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "/data/sfdump.raw.%04d.%02d.%02d.%02d.%02d.%02d", 164054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpTime.tm_year + 1900, dumpTime.tm_mon + 1, 165054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpTime.tm_mday, dumpTime.tm_hour, 166054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpTime.tm_min, dumpTime.tm_sec); 167054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (0 == mkdir(mDumpDirRaw, 0777)) 168054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrRaw = 0; 169054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin else { 170054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGE("Error: %s. Failed to create sfdump directory: %s", 171054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strerror(errno), mDumpDirRaw); 172054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrRaw = mDumpCntLimRaw + 1; 173054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 174054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 175054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 176054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 177054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (mDumpCntrRaw <= mDumpCntLimRaw) 178054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrRaw++; 179054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 180054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bDumpLayer = (mDumpCntLimPng || mDumpCntLimRaw)? true : false; 181054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin return bDumpLayer; 182054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 183054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 184054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinvoid HwcDebug::logHwcProps(uint32_t listFlags) 185054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{ 186054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static int hwcModuleCompType = -1; 187054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static int sMdpCompMaxLayers = 0; 188054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static String8 hwcModuleCompTypeLog(""); 189054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (-1 == hwcModuleCompType) { 190054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // One time stuff 191054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char mdpCompPropStr[PROPERTY_VALUE_MAX]; 192054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (property_get("debug.mdpcomp.maxlayer", mdpCompPropStr, NULL) > 0) { 193054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin sMdpCompMaxLayers = atoi(mdpCompPropStr); 194054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 195054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwcModuleCompType = 196054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin qdutils::QCCompositionType::getInstance().getCompositionType(); 197054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwcModuleCompTypeLog.appendFormat("%s%s%s%s%s%s", 198054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Is hwc module composition type now a bit-field?! 199054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (hwcModuleCompType == qdutils::COMPOSITION_TYPE_GPU)? 200054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[GPU]": "", 201054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (hwcModuleCompType & qdutils::COMPOSITION_TYPE_MDP)? 202054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[MDP]": "", 203054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (hwcModuleCompType & qdutils::COMPOSITION_TYPE_C2D)? 204054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[C2D]": "", 205054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (hwcModuleCompType & qdutils::COMPOSITION_TYPE_CPU)? 206054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[CPU]": "", 207054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (hwcModuleCompType & qdutils::COMPOSITION_TYPE_DYN)? 208054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[DYN]": "", 209054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (hwcModuleCompType >= (qdutils::COMPOSITION_TYPE_DYN << 1))? 210054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[???]": ""); 211054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 212054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGI("Display[%s] Layer[*] %s-HwcModuleCompType, %d-layer MdpComp %s", 213054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDisplayName, hwcModuleCompTypeLog.string(), sMdpCompMaxLayers, 214054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (listFlags & HWC_GEOMETRY_CHANGED)? "[HwcList Geometry Changed]": ""); 215054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 216054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 217054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinvoid HwcDebug::logLayer(size_t layerIndex, hwc_layer_1_t hwLayers[]) 218054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{ 219054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (NULL == hwLayers) { 220054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGE("Display[%s] Layer[%zu] Error. No hwc layers to log.", 221054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDisplayName, layerIndex); 222054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin return; 223054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 224054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 225054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwc_layer_1_t *layer = &hwLayers[layerIndex]; 226054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf); 227054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwc_rect_t displayFrame = layer->displayFrame; 228054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin size_t numHwcRects = layer->visibleRegionScreen.numRects; 229054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwc_rect_t const *hwcRects = layer->visibleRegionScreen.rects; 230054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin private_handle_t *hnd = (private_handle_t *)layer->handle; 231054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 232054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char pixFormatStr[32] = "None"; 233054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin String8 hwcVisRegsScrLog("[None]"); 234054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 235054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin for (size_t i = 0 ; (hwcRects && (i < numHwcRects)); i++) { 236054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (0 == i) 237054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwcVisRegsScrLog.clear(); 238054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwcVisRegsScrLog.appendFormat("[%dl, %dt, %dr, %db]", 239054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwcRects[i].left, hwcRects[i].top, 240054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwcRects[i].right, hwcRects[i].bottom); 241054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 242054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 243054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (hnd) 244054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin getHalPixelFormatStr(hnd->format, pixFormatStr); 245054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 246054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Log Line 1 247054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGI("Display[%s] Layer[%zu] SrcBuff[%dx%d] SrcCrop[%dl, %dt, %dr, %db] " 248054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "DispFrame[%dl, %dt, %dr, %db] VisRegsScr%s", mDisplayName, layerIndex, 249054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (hnd)? getWidth(hnd) : -1, (hnd)? getHeight(hnd) : -1, 250054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin sourceCrop.left, sourceCrop.top, 251054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin sourceCrop.right, sourceCrop.bottom, 252054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin displayFrame.left, displayFrame.top, 253054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin displayFrame.right, displayFrame.bottom, 254054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwcVisRegsScrLog.string()); 255054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin // Log Line 2 256054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGI("Display[%s] Layer[%zu] LayerCompType = %s, Format = %s, " 257054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "Orientation = %s, Flags = %s%s%s, Hints = %s%s%s, " 258054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "Blending = %s%s%s", mDisplayName, layerIndex, 259054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->compositionType == HWC_FRAMEBUFFER)? "Framebuffer(GPU)": 260054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->compositionType == HWC_OVERLAY)? "Overlay": 261054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->compositionType == HWC_BACKGROUND)? "Background":"???", 262054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin pixFormatStr, 263054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->transform == 0)? "ROT_0": 264054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->transform == HWC_TRANSFORM_FLIP_H)? "FLIP_H": 265054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->transform == HWC_TRANSFORM_FLIP_V)? "FLIP_V": 266054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->transform == HWC_TRANSFORM_ROT_90)? "ROT_90": 267054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "ROT_INVALID", 268054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->flags)? "": "[None]", 269054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->flags & HWC_SKIP_LAYER)? "[Skip layer]":"", 270054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->flags & qhwc::HWC_MDPCOMP)? "[MDP Comp]":"", 271054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->hints)? "":"[None]", 272054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->hints & HWC_HINT_TRIPLE_BUFFER)? "[Triple Buffer]":"", 273054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->hints & HWC_HINT_CLEAR_FB)? "[Clear FB]":"", 274054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->blending == HWC_BLENDING_NONE)? "[None]":"", 275054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->blending == HWC_BLENDING_PREMULT)? "[PreMult]":"", 276054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin (layer->blending == HWC_BLENDING_COVERAGE)? "[Coverage]":""); 277054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 278054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 279054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinvoid HwcDebug::dumpLayer(size_t layerIndex, hwc_layer_1_t hwLayers[]) 280054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{ 281054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char dumpLogStrPng[128] = ""; 282054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char dumpLogStrRaw[128] = ""; 283054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool needDumpPng = (mDumpCntrPng <= mDumpCntLimPng)? true:false; 284054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool needDumpRaw = (mDumpCntrRaw <= mDumpCntLimRaw)? true:false; 285054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 286054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (needDumpPng) { 287054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(dumpLogStrPng, sizeof(dumpLogStrPng), 288054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[png-dump-frame: %03d of %03d]", mDumpCntrPng, 289054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimPng); 290054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 291054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (needDumpRaw) { 292054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(dumpLogStrRaw, sizeof(dumpLogStrRaw), 293054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "[raw-dump-frame: %03d of %03d]", mDumpCntrRaw, 294054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntLimRaw); 295054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 296054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 297054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (!(needDumpPng || needDumpRaw)) 298054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin return; 299054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 300054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (NULL == hwLayers) { 301054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGE("Display[%s] Layer[%zu] %s%s Error: No hwc layers to dump.", 302054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDisplayName, layerIndex, dumpLogStrRaw, dumpLogStrPng); 303054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin return; 304054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 305054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 306054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin hwc_layer_1_t *layer = &hwLayers[layerIndex]; 307054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin private_handle_t *hnd = (private_handle_t *)layer->handle; 308054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char pixFormatStr[32] = "None"; 309054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 310054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (NULL == hnd) { 311054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGI("Display[%s] Layer[%zu] %s%s Skipping dump: Bufferless layer.", 312054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDisplayName, layerIndex, dumpLogStrRaw, dumpLogStrPng); 313054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin return; 314054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 315054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 316054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin getHalPixelFormatStr(hnd->format, pixFormatStr); 317054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifdef QCOM_BSP 318054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (needDumpPng && hnd->base) { 319054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool bResult = false; 320054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char dumpFilename[PATH_MAX]; 321054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin SkBitmap *tempSkBmp = new SkBitmap(); 322054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin SkColorType tempSkBmpColor = kUnknown_SkColorType; 323054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(dumpFilename, sizeof(dumpFilename), 324054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "%s/sfdump%03d.layer%zu.%s.png", mDumpDirPng, 325054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpCntrPng, layerIndex, mDisplayName); 326054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 327054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin switch (hnd->format) { 328054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBA_8888: 329054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBX_8888: 330054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tempSkBmpColor = kRGBA_8888_SkColorType; 331054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 332054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_BGRA_8888: 333054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tempSkBmpColor = kBGRA_8888_SkColorType; 334054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 335054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGB_565: 336054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tempSkBmpColor = kRGB_565_SkColorType; 337054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 338054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBA_5551: 339054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBA_4444: 340054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGB_888: 341054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin default: 342054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tempSkBmpColor = kUnknown_SkColorType; 343054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 344054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 345054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (kUnknown_SkColorType != tempSkBmpColor) { 346054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tempSkBmp->setInfo(SkImageInfo::Make(getWidth(hnd), getHeight(hnd), 347054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tempSkBmpColor, kIgnore_SkAlphaType), 0); 348054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin tempSkBmp->setPixels((void*)hnd->base); 349054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bResult = SkImageEncoder::EncodeFile(dumpFilename, 350054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *tempSkBmp, SkImageEncoder::kPNG_Type, 100); 351054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGI("Display[%s] Layer[%zu] %s Dump to %s: %s", 352054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDisplayName, layerIndex, dumpLogStrPng, 353054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpFilename, bResult ? "Success" : "Fail"); 354054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } else { 355054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGI("Display[%s] Layer[%zu] %s Skipping dump: Unsupported layer" 356054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin " format %s for png encoder", 357054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDisplayName, layerIndex, dumpLogStrPng, pixFormatStr); 358054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 359054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin delete tempSkBmp; // Calls SkBitmap::freePixels() internally. 360054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 361054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 362054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (needDumpRaw && hnd->base) { 363054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin char dumpFilename[PATH_MAX]; 364054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bool bResult = false; 365054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(dumpFilename, sizeof(dumpFilename), 366054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin "%s/sfdump%03d.layer%zu.%dx%d.%s.%s.raw", 367054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDumpDirRaw, mDumpCntrRaw, 368054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin layerIndex, getWidth(hnd), getHeight(hnd), 369054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin pixFormatStr, mDisplayName); 370054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin FILE* fp = fopen(dumpFilename, "w+"); 371054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (NULL != fp) { 372054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin bResult = (bool) fwrite((void*)hnd->base, hnd->size, 1, fp); 373054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin fclose(fp); 374054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 375054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin ALOGI("Display[%s] Layer[%zu] %s Dump to %s: %s", 376054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin mDisplayName, layerIndex, dumpLogStrRaw, 377054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin dumpFilename, bResult ? "Success" : "Fail"); 378054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 379054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 380054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 381054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinvoid HwcDebug::getHalPixelFormatStr(int format, char pixFormatStr[]) 382054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{ 383054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin if (!pixFormatStr) 384054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin return; 385054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 386054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin switch(format) { 387054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBA_8888: 388054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "RGBA_8888", sizeof(pixFormatStr)); 389054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 390054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBX_8888: 391054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "RGBX_8888", sizeof(pixFormatStr)); 392054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 393054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGB_888: 394054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "RGB_888", sizeof(pixFormatStr)); 395054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 396054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGB_565: 397054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "RGB_565", sizeof(pixFormatStr)); 398054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 399054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_BGRA_8888: 400054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "BGRA_8888", sizeof(pixFormatStr)); 401054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 402054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBA_5551: 403054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "RGBA_5551", sizeof(pixFormatStr)); 404054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 405054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RGBA_4444: 406054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "RGBA_4444", sizeof(pixFormatStr)); 407054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 408054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YV12: 409054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YV12", sizeof(pixFormatStr)); 410054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 411054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCbCr_422_SP: 412054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCbCr_422_SP_NV16", sizeof(pixFormatStr)); 413054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 414054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCrCb_420_SP: 415054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCrCb_420_SP_NV21", sizeof(pixFormatStr)); 416054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 417054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCbCr_422_I: 418054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCbCr_422_I_YUY2", sizeof(pixFormatStr)); 419054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 420054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCrCb_422_I: 421054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCrCb_422_I_YVYU", sizeof(pixFormatStr)); 422054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 423054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: 424054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "NV12_ENCODEABLE", sizeof(pixFormatStr)); 425054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 426054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: 427054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCbCr_420_SP_TILED_TILE_4x2", 428054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin sizeof(pixFormatStr)); 429054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 430054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCbCr_420_SP: 431054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCbCr_420_SP", sizeof(pixFormatStr)); 432054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 433054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO: 434054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCrCb_420_SP_ADRENO", sizeof(pixFormatStr)); 435054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 436054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCrCb_422_SP: 437054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCrCb_422_SP", sizeof(pixFormatStr)); 438054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 439054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_R_8: 440054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "R_8", sizeof(pixFormatStr)); 441054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 442054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_RG_88: 443054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "RG_88", sizeof(pixFormatStr)); 444054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 445054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_INTERLACE: 446054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "INTERLACE", sizeof(pixFormatStr)); 447054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 448054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS: 449054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin strlcpy(pixFormatStr, "YCbCr_420_SP_VENUS", sizeof(pixFormatStr)); 450054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 451054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin default: 452054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin size_t len = sizeof(pixFormatStr); 453054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin snprintf(pixFormatStr, len, "Unknown0x%X", format); 454054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin break; 455054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin } 456054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 457054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 458054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} // namespace qhwc 459054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 460