107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani/* 235bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare * Copyright (c) 2012-2014,2016 Linux Foundation. All rights reserved. 307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * 407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * Redistribution and use in source and binary forms, with or without 507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * modification, are permitted provided that the following conditions are 607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * met: 707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * * Redistributions of source code must retain the above copyright 807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * notice, this list of conditions and the following disclaimer. 907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * * Redistributions in binary form must reproduce the above 1007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * copyright notice, this list of conditions and the following 1107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * disclaimer in the documentation and/or other materials provided 1207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * with the distribution. 1307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * * Neither the name of Linux Foundation nor the names of its 1407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * contributors may be used to endorse or promote products derived 1507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * from this software without specific prior written permission. 1607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * 1707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 2007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani */ 2907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 3007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#ifndef LOG_TAG 3107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#define LOG_TAG "qsfdump" 3207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#endif 3307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#define LOG_NDEBUG 0 3407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <hwc_utils.h> 3507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <hwc_dump_layers.h> 3607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <cutils/log.h> 3707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <sys/stat.h> 3807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <comptype.h> 3907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#ifdef QTI_BSP 4007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// Ignore W(float)conversion errors for external headers 4107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#pragma GCC diagnostic push 4207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#pragma GCC diagnostic ignored "-Wconversion" 4307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#pragma GCC diagnostic ignored "-Wfloat-conversion" 4407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <SkBitmap.h> 4507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <SkImageEncoder.h> 4607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#pragma GCC diagnostic pop 4707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#endif 4807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#ifdef STDC_FORMAT_MACROS 4907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <inttypes.h> 5007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#endif 5107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 5207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaninamespace qhwc { 5307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 5407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// MAX_ALLOWED_FRAMEDUMPS must be capped to (LONG_MAX - 1) 5507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// 60fps => 216000 frames per hour 5607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani// Below setting of 216000 * 24 * 7 => 1 week or 168 hours of capture. 5707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani enum { 5807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani MAX_ALLOWED_FRAMEDUMPS = (216000 * 24 * 7) 5907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani }; 6007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 6107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanibool HwcDebug::sDumpEnable = false; 6207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 6307bbf1e89c031a5d41a7561433e832d396c311a5Prashant MalaniHwcDebug::HwcDebug(uint32_t dpy): 6407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimRaw(0), 6507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrRaw(1), 6607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimPng(0), 6707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrPng(1), 6807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDpy(dpy) { 6907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char dumpPropStr[PROPERTY_VALUE_MAX]; 7007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if(mDpy) { 7107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani strlcpy(mDisplayName, "external", sizeof(mDisplayName)); 7207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } else { 7307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani strlcpy(mDisplayName, "primary", sizeof(mDisplayName)); 7407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 7507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani snprintf(mDumpPropKeyDisplayType, sizeof(mDumpPropKeyDisplayType), 7607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "debug.sf.dump.%s", (char *)mDisplayName); 7707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 7807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if ((property_get("debug.sf.dump.enable", dumpPropStr, NULL) > 0)) { 7907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if(!strncmp(dumpPropStr, "true", strlen("true"))) { 8007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani sDumpEnable = true; 8107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 8207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 8307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 8407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 8507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid HwcDebug::dumpLayers(hwc_display_contents_1_t* list) 8607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 8707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Check need for dumping layers for debugging. 8807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (UNLIKELY(sDumpEnable) && UNLIKELY(needToDumpLayers()) && LIKELY(list)) { 8907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani logHwcProps(list->flags); 9007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani for (size_t i = 0; i < list->numHwLayers; i++) { 9107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani logLayer(i, list->hwLayers); 9207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpLayer(i, list->hwLayers); 9307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 9407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 9507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 9607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 9707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanibool HwcDebug::needToDumpLayers() 9807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 9907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bool bDumpLayer = false; 10007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char dumpPropStr[PROPERTY_VALUE_MAX]; 10107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Enable primary dump and disable external dump by default. 10207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bool bDumpEnable = !mDpy; 10307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani time_t timeNow; 10407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tm dumpTime; 10507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 10607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Override the bDumpEnable based on the property value, if the property 10707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // is present in the build.prop file. 10807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if ((property_get(mDumpPropKeyDisplayType, dumpPropStr, NULL) > 0)) { 10907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if(!strncmp(dumpPropStr, "true", strlen("true"))) 11007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bDumpEnable = true; 11107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani else 11207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bDumpEnable = false; 11307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 11407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 11507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (false == bDumpEnable) 11607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return false; 11707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 11807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani time(&timeNow); 11907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani localtime_r(&timeNow, &dumpTime); 12007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 12107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if ((property_get("debug.sf.dump.png", dumpPropStr, NULL) > 0) && 12207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (strncmp(dumpPropStr, mDumpPropStrPng, PROPERTY_VALUE_MAX - 1))) { 12307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Strings exist & not equal implies it has changed, so trigger a dump 12407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani strlcpy(mDumpPropStrPng, dumpPropStr, sizeof(mDumpPropStrPng)); 12507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimPng = atoi(dumpPropStr); 12607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (mDumpCntLimPng > MAX_ALLOWED_FRAMEDUMPS) { 12707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGW("Warning: Using debug.sf.dump.png %d (= max)", 12807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani MAX_ALLOWED_FRAMEDUMPS); 12907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimPng = MAX_ALLOWED_FRAMEDUMPS; 13007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 13107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimPng = (mDumpCntLimPng < 0) ? 0: mDumpCntLimPng; 13207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (mDumpCntLimPng) { 13307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani snprintf(mDumpDirPng, sizeof(mDumpDirPng), 13407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "/data/sfdump.png.%04d.%02d.%02d.%02d.%02d.%02d", 13507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpTime.tm_year + 1900, dumpTime.tm_mon + 1, 13607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpTime.tm_mday, dumpTime.tm_hour, 13707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpTime.tm_min, dumpTime.tm_sec); 13807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (0 == mkdir(mDumpDirPng, 0777)) 13907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrPng = 0; 14007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani else { 14107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGE("Error: %s. Failed to create sfdump directory: %s", 14207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani strerror(errno), mDumpDirPng); 14307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrPng = mDumpCntLimPng + 1; 14407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 14507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 14607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 14707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 14807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (mDumpCntrPng <= mDumpCntLimPng) 14907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrPng++; 15007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 15107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if ((property_get("debug.sf.dump", dumpPropStr, NULL) > 0) && 15207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (strncmp(dumpPropStr, mDumpPropStrRaw, PROPERTY_VALUE_MAX - 1))) { 15307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Strings exist & not equal implies it has changed, so trigger a dump 15407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani strlcpy(mDumpPropStrRaw, dumpPropStr, sizeof(mDumpPropStrRaw)); 15507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimRaw = atoi(dumpPropStr); 15607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (mDumpCntLimRaw > MAX_ALLOWED_FRAMEDUMPS) { 15707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGW("Warning: Using debug.sf.dump %d (= max)", 15807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani MAX_ALLOWED_FRAMEDUMPS); 15907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimRaw = MAX_ALLOWED_FRAMEDUMPS; 16007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 16107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimRaw = (mDumpCntLimRaw < 0) ? 0: mDumpCntLimRaw; 16207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (mDumpCntLimRaw) { 16307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani snprintf(mDumpDirRaw, sizeof(mDumpDirRaw), 16407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "/data/sfdump.raw.%04d.%02d.%02d.%02d.%02d.%02d", 16507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpTime.tm_year + 1900, dumpTime.tm_mon + 1, 16607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpTime.tm_mday, dumpTime.tm_hour, 16707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpTime.tm_min, dumpTime.tm_sec); 16807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (0 == mkdir(mDumpDirRaw, 0777)) 16907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrRaw = 0; 17007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani else { 17107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGE("Error: %s. Failed to create sfdump directory: %s", 17207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani strerror(errno), mDumpDirRaw); 17307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrRaw = mDumpCntLimRaw + 1; 17407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 17507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 17607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 17707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 17807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (mDumpCntrRaw <= mDumpCntLimRaw) 17907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrRaw++; 18007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 18107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bDumpLayer = (mDumpCntLimPng || mDumpCntLimRaw)? true : false; 18207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return bDumpLayer; 18307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 18407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 18507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid HwcDebug::logHwcProps(uint32_t listFlags) 18607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 18707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani static int hwcModuleCompType = -1; 18807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani static int sMdpCompMaxLayers = 0; 18907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani static String8 hwcModuleCompTypeLog(""); 19007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (-1 == hwcModuleCompType) { 19107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // One time stuff 19207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char mdpCompPropStr[PROPERTY_VALUE_MAX]; 19307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (property_get("debug.mdpcomp.maxlayer", mdpCompPropStr, NULL) > 0) { 19407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani sMdpCompMaxLayers = atoi(mdpCompPropStr); 19507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 19607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwcModuleCompType = 19707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani qdutils::QCCompositionType::getInstance().getCompositionType(); 19807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwcModuleCompTypeLog.appendFormat("%s%s%s%s%s%s", 19907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Is hwc module composition type now a bit-field?! 20007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (hwcModuleCompType == qdutils::COMPOSITION_TYPE_GPU)? 20107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[GPU]": "", 20207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (hwcModuleCompType & qdutils::COMPOSITION_TYPE_MDP)? 20307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[MDP]": "", 20407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (hwcModuleCompType & qdutils::COMPOSITION_TYPE_C2D)? 20507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[C2D]": "", 20607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (hwcModuleCompType & qdutils::COMPOSITION_TYPE_CPU)? 20707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[CPU]": "", 20807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (hwcModuleCompType & qdutils::COMPOSITION_TYPE_DYN)? 20907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[DYN]": "", 21007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (hwcModuleCompType >= (qdutils::COMPOSITION_TYPE_DYN << 1))? 21107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[???]": ""); 21207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 21307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGI("Display[%s] Layer[*] %s-HwcModuleCompType, %d-layer MdpComp %s", 21407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDisplayName, hwcModuleCompTypeLog.string(), sMdpCompMaxLayers, 21507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (listFlags & HWC_GEOMETRY_CHANGED)? "[HwcList Geometry Changed]": ""); 21607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 21707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 21807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid HwcDebug::logLayer(size_t layerIndex, hwc_layer_1_t hwLayers[]) 21907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 22007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (NULL == hwLayers) { 22107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGE("Display[%s] Layer[%zu] Error. No hwc layers to log.", 22207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDisplayName, layerIndex); 22307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return; 22407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 22507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 22607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwc_layer_1_t *layer = &hwLayers[layerIndex]; 22707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf); 22807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwc_rect_t displayFrame = layer->displayFrame; 22907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani size_t numHwcRects = layer->visibleRegionScreen.numRects; 23007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwc_rect_t const *hwcRects = layer->visibleRegionScreen.rects; 23107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani private_handle_t *hnd = (private_handle_t *)layer->handle; 23207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 23307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char pixFormatStr[32] = "None"; 23407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani String8 hwcVisRegsScrLog("[None]"); 23507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 23607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani for (size_t i = 0 ; (hwcRects && (i < numHwcRects)); i++) { 23707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (0 == i) 23807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwcVisRegsScrLog.clear(); 23907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwcVisRegsScrLog.appendFormat("[%dl, %dt, %dr, %db]", 24007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwcRects[i].left, hwcRects[i].top, 24107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwcRects[i].right, hwcRects[i].bottom); 24207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 24307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 24407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (hnd) 24535bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare getHalPixelFormatStr(hnd->format, pixFormatStr, sizeof(pixFormatStr)); 24607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 24707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Log Line 1 24807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGI("Display[%s] Layer[%zu] SrcBuff[%dx%d] SrcCrop[%dl, %dt, %dr, %db] " 24907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "DispFrame[%dl, %dt, %dr, %db] VisRegsScr%s", mDisplayName, layerIndex, 25007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (hnd)? getWidth(hnd) : -1, (hnd)? getHeight(hnd) : -1, 25107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani sourceCrop.left, sourceCrop.top, 25207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani sourceCrop.right, sourceCrop.bottom, 25307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani displayFrame.left, displayFrame.top, 25407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani displayFrame.right, displayFrame.bottom, 25507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwcVisRegsScrLog.string()); 25607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani // Log Line 2 25707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGI("Display[%s] Layer[%zu] LayerCompType = %s, Format = %s, " 25807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "Orientation = %s, Flags = %s%s%s, Hints = %s%s%s, " 25907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "Blending = %s%s%s", mDisplayName, layerIndex, 26007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->compositionType == HWC_FRAMEBUFFER)? "Framebuffer(GPU)": 26107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->compositionType == HWC_OVERLAY)? "Overlay": 26207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->compositionType == HWC_BACKGROUND)? "Background":"???", 26307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani pixFormatStr, 26407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->transform == 0)? "ROT_0": 26507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->transform == HWC_TRANSFORM_FLIP_H)? "FLIP_H": 26607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->transform == HWC_TRANSFORM_FLIP_V)? "FLIP_V": 26707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->transform == HWC_TRANSFORM_ROT_90)? "ROT_90": 26807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "ROT_INVALID", 26907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->flags)? "": "[None]", 27007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->flags & HWC_SKIP_LAYER)? "[Skip layer]":"", 27107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->flags & qhwc::HWC_MDPCOMP)? "[MDP Comp]":"", 27207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->hints)? "":"[None]", 27307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->hints & HWC_HINT_TRIPLE_BUFFER)? "[Triple Buffer]":"", 27407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->hints & HWC_HINT_CLEAR_FB)? "[Clear FB]":"", 27507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->blending == HWC_BLENDING_NONE)? "[None]":"", 27607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->blending == HWC_BLENDING_PREMULT)? "[PreMult]":"", 27707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani (layer->blending == HWC_BLENDING_COVERAGE)? "[Coverage]":""); 27807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 27907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 28007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid HwcDebug::dumpLayer(size_t layerIndex, hwc_layer_1_t hwLayers[]) 28107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 28207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char dumpLogStrPng[128] = ""; 28307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char dumpLogStrRaw[128] = ""; 28407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bool needDumpPng = (mDumpCntrPng <= mDumpCntLimPng)? true:false; 28507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bool needDumpRaw = (mDumpCntrRaw <= mDumpCntLimRaw)? true:false; 28607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 28707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (needDumpPng) { 28807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani snprintf(dumpLogStrPng, sizeof(dumpLogStrPng), 28907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[png-dump-frame: %03d of %03d]", mDumpCntrPng, 29007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimPng); 29107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 29207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (needDumpRaw) { 29307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani snprintf(dumpLogStrRaw, sizeof(dumpLogStrRaw), 29407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "[raw-dump-frame: %03d of %03d]", mDumpCntrRaw, 29507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntLimRaw); 29607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 29707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 29807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (!(needDumpPng || needDumpRaw)) 29907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return; 30007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 30107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (NULL == hwLayers) { 30207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGE("Display[%s] Layer[%zu] %s%s Error: No hwc layers to dump.", 30307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDisplayName, layerIndex, dumpLogStrRaw, dumpLogStrPng); 30407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return; 30507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 30607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 30707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani hwc_layer_1_t *layer = &hwLayers[layerIndex]; 30807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani private_handle_t *hnd = (private_handle_t *)layer->handle; 30907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char pixFormatStr[32] = "None"; 31007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 31107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (NULL == hnd) { 31207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGI("Display[%s] Layer[%zu] %s%s Skipping dump: Bufferless layer.", 31307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDisplayName, layerIndex, dumpLogStrRaw, dumpLogStrPng); 31407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return; 31507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 31607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 31735bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare getHalPixelFormatStr(hnd->format, pixFormatStr, sizeof(pixFormatStr)); 31807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#ifdef QTI_BSP 31907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (needDumpPng && hnd->base) { 32007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bool bResult = false; 32107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char dumpFilename[PATH_MAX]; 32207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani SkBitmap *tempSkBmp = new SkBitmap(); 32307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani SkColorType tempSkBmpColor = kUnknown_SkColorType; 32407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani snprintf(dumpFilename, sizeof(dumpFilename), 32507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "%s/sfdump%03d.layer%zu.%s.png", mDumpDirPng, 32607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpCntrPng, layerIndex, mDisplayName); 32707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 32807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani switch (hnd->format) { 32907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGBA_8888: 33007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGBX_8888: 33107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tempSkBmpColor = kRGBA_8888_SkColorType; 33207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 33307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_BGRA_8888: 33407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tempSkBmpColor = kBGRA_8888_SkColorType; 33507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 33607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGB_565: 33707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tempSkBmpColor = kRGB_565_SkColorType; 33807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 33907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGB_888: 34007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani default: 34107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tempSkBmpColor = kUnknown_SkColorType; 34207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 34307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 34407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (kUnknown_SkColorType != tempSkBmpColor) { 34507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tempSkBmp->setInfo(SkImageInfo::Make(getWidth(hnd), getHeight(hnd), 34607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tempSkBmpColor, kUnknown_SkAlphaType), 0); 34707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani tempSkBmp->setPixels((void*)hnd->base); 34807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bResult = SkImageEncoder::EncodeFile(dumpFilename, 34907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *tempSkBmp, SkImageEncoder::kPNG_Type, 100); 35007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGI("Display[%s] Layer[%zu] %s Dump to %s: %s", 35107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDisplayName, layerIndex, dumpLogStrPng, 35207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpFilename, bResult ? "Success" : "Fail"); 35307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } else { 35407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGI("Display[%s] Layer[%zu] %s Skipping dump: Unsupported layer" 35507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani " format %s for png encoder", 35607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDisplayName, layerIndex, dumpLogStrPng, pixFormatStr); 35707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 35807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani delete tempSkBmp; // Calls SkBitmap::freePixels() internally. 35907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 36007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#endif 36107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (needDumpRaw && hnd->base) { 36207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani char dumpFilename[PATH_MAX]; 36307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bool bResult = false; 36407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani snprintf(dumpFilename, sizeof(dumpFilename), 36507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani "%s/sfdump%03d.layer%zu.%dx%d.%s.%s.raw", 36607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDumpDirRaw, mDumpCntrRaw, 36707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani layerIndex, getWidth(hnd), getHeight(hnd), 36807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani pixFormatStr, mDisplayName); 36907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani FILE* fp = fopen(dumpFilename, "w+"); 37007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (NULL != fp) { 37107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani bResult = (bool) fwrite((void*)hnd->base, hnd->size, 1, fp); 37207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani fclose(fp); 37307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 37407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani ALOGI("Display[%s] Layer[%zu] %s Dump to %s: %s", 37507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani mDisplayName, layerIndex, dumpLogStrRaw, 37607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani dumpFilename, bResult ? "Success" : "Fail"); 37707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 37807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 37907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 38035bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayarevoid HwcDebug::getHalPixelFormatStr(int format, char pixFormatStr[], size_t arraySize) 38107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{ 38207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani if (!pixFormatStr) 38307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani return; 38407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 38507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani switch(format) { 38607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGBA_8888: 38735bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "RGBA_8888", arraySize); 38807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 38907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGBX_8888: 39035bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "RGBX_8888", arraySize); 39107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 39207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGB_888: 39335bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "RGB_888", arraySize); 39407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 39507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RGB_565: 39635bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "RGB_565", arraySize); 39707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 39807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_BGRA_8888: 39935bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "BGRA_8888", arraySize); 40007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 40107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YV12: 40235bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YV12", arraySize); 40307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 40407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCbCr_422_SP: 40535bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCbCr_422_SP_NV16", arraySize); 40607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 40707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCrCb_420_SP: 40835bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCrCb_420_SP_NV21", arraySize); 40907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 41007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCbCr_422_I: 41135bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCbCr_422_I_YUY2", arraySize); 41207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 41307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCrCb_422_I: 41435bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCrCb_422_I_YVYU", arraySize); 41507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 41607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: 41735bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "NV12_ENCODEABLE", arraySize); 41807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 41907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: 42007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani strlcpy(pixFormatStr, "YCbCr_420_SP_TILED_TILE_4x2", 42135bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare arraySize); 42207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 42307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCbCr_420_SP: 42435bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCbCr_420_SP", arraySize); 42507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 42607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO: 42735bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCrCb_420_SP_ADRENO", arraySize); 42807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 42907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCrCb_422_SP: 43035bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCrCb_422_SP", arraySize); 43107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 43207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_R_8: 43335bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "R_8", arraySize); 43407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 43507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_RG_88: 43635bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "RG_88", arraySize); 43707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 43807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_INTERLACE: 43935bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "INTERLACE", arraySize); 44007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 44107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS: 44235bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare strlcpy(pixFormatStr, "YCbCr_420_SP_VENUS", arraySize); 44307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 44407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani default: 44535bc51c90d4db20eeae2c2e807f5e045328cb8c2Sachin Bhayare snprintf(pixFormatStr, arraySize, "Unknown0x%X", format); 44607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani break; 44707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani } 44807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} 44907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 45007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} // namespace qhwc 45107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani 452