summaryrefslogtreecommitdiff
path: root/libqdutils
diff options
context:
space:
mode:
authorNaseer Ahmed <naseer@codeaurora.org>2012-08-02 13:46:08 -0700
committerIliyan Malchev <malchev@google.com>2012-08-14 14:18:23 -0700
commit5b6708ac87dc9681b3dd142b82702a8b995c6e22 (patch)
tree0b067736a1c3045cff52467d98afeeaa6cec6a4a /libqdutils
parentb90d091c75095399d38f96901357902b827c7647 (diff)
downloaddisplay-5b6708ac87dc9681b3dd142b82702a8b995c6e22.tar.gz
hwc: Update to new API
* Updates HWC to use the Jellybean MR1 API * Remove qcom_ui which was using parts of the old API Change-Id: I663363547b193d2318aae88f2256a9baed1e3d4b
Diffstat (limited to 'libqdutils')
-rw-r--r--libqdutils/qcom_ui.cpp863
-rw-r--r--libqdutils/qcom_ui.h324
2 files changed, 0 insertions, 1187 deletions
diff --git a/libqdutils/qcom_ui.cpp b/libqdutils/qcom_ui.cpp
deleted file mode 100644
index d060439a..00000000
--- a/libqdutils/qcom_ui.cpp
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
-
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of Code Aurora Forum, Inc. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <cutils/log.h>
-#include <cutils/memory.h>
-#include <qcom_ui.h>
-#include <utils/comptype.h>
-#include <gralloc_priv.h>
-#include <alloc_controller.h>
-#include <memalloc.h>
-#include <errno.h>
-#include <EGL/eglext.h>
-#include <sys/stat.h>
-#include <SkBitmap.h>
-#include <SkImageEncoder.h>
-#include <Transform.h>
-
-using gralloc::IMemAlloc;
-using gralloc::IonController;
-using gralloc::alloc_data;
-using android::sp;
-namespace {
-
-static android::sp<gralloc::IAllocController> sAlloc = 0;
-
-int reallocate_memory(native_handle_t *buffer_handle, int mReqSize, int usage)
-{
- int ret = 0;
-
-#ifndef NON_QCOM_TARGET
- if (sAlloc == 0) {
- sAlloc = gralloc::IAllocController::getInstance(true);
- }
- if (sAlloc == 0) {
- LOGE("sAlloc is still NULL");
- return -EINVAL;
- }
-
- // Dealloc the old memory
- private_handle_t *hnd = (private_handle_t *)buffer_handle;
- sp<IMemAlloc> memalloc = sAlloc->getAllocator(hnd->flags);
- ret = memalloc->free_buffer((void*)hnd->base, hnd->size, hnd->offset, hnd->fd);
-
- if (ret) {
- LOGE("%s: free_buffer failed", __FUNCTION__);
- return -1;
- }
-
- // Realloc new memory
- alloc_data data;
- data.base = 0;
- data.fd = -1;
- data.offset = 0;
- data.size = mReqSize;
- data.align = getpagesize();
- data.uncached = true;
- int allocFlags = usage;
-
- switch (hnd->format) {
- case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED:
- case (HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED^HAL_PIXEL_FORMAT_INTERLACE): {
- data.align = 8192;
- } break;
- default: break;
- }
- ret = sAlloc->allocate(data, allocFlags, 0);
- if (ret == 0) {
- hnd->fd = data.fd;
- hnd->base = (int)data.base;
- hnd->offset = data.offset;
- hnd->size = data.size;
- } else {
- LOGE("%s: allocate failed", __FUNCTION__);
- return -EINVAL;
- }
-#endif
- return ret;
-}
-}; // ANONYNMOUS NAMESPACE
-
-/*
- * Gets the number of arguments required for this operation.
- *
- * @param: operation whose argument count is required.
- *
- * @return -EINVAL if the operation is invalid.
- */
-int getNumberOfArgsForOperation(int operation) {
- int num_args = -EINVAL;
- switch(operation) {
- case NATIVE_WINDOW_SET_BUFFERS_SIZE:
- num_args = 1;
- break;
- case NATIVE_WINDOW_UPDATE_BUFFERS_GEOMETRY:
- num_args = 3;
- break;
- case NATIVE_WINDOW_SET_PIXEL_ASPECT_RATIO:
- num_args = 2;
- break;
- default: LOGE("%s: invalid operation(0x%x)", __FUNCTION__, operation);
- break;
- };
- return num_args;
-}
-
-/*
- * Checks if the format is supported by the GPU.
- *
- * @param: format to check
- *
- * @return true if the format is supported by the GPU.
- */
-bool isGPUSupportedFormat(int format) {
- if (format == HAL_PIXEL_FORMAT_YV12) {
- // We check the YV12 formats, since some Qcom specific formats
- // could have the bits set.
- return true;
- } else if ((format == HAL_PIXEL_FORMAT_RGB_888) ||
- (format == HAL_PIXEL_FORMAT_YCrCb_422_SP) ||
- (format == HAL_PIXEL_FORMAT_YCbCr_422_SP)){
- return false;
- } else if (format & INTERLACE_MASK) {
- // Interlaced content
- return false;
- } else if (format & S3D_FORMAT_MASK) {
- // S3D Formats are not supported by the GPU
- return false;
- }
- return true;
-}
-
-/*
- * Function to check if the allocated buffer is of the correct size.
- * Reallocate the buffer with the correct size, if the size doesn't
- * match
- *
- * @param: handle of the allocated buffer
- * @param: requested size for the buffer
- * @param: usage flags
- *
- * return 0 on success
- */
-int checkBuffer(native_handle_t *buffer_handle, int size, int usage)
-{
- // If the client hasn't set a size, return
- if (0 >= size) {
- return 0;
- }
-
- // Validate the handle
- if (private_handle_t::validate(buffer_handle)) {
- LOGE("%s: handle is invalid", __FUNCTION__);
- return -EINVAL;
- }
-
- // Obtain the private_handle from the native handle
- private_handle_t *hnd = reinterpret_cast<private_handle_t*>(buffer_handle);
- if (hnd->size != size) {
- return reallocate_memory(hnd, size, usage);
- }
- return 0;
-}
-
-/*
- * Checks if memory needs to be reallocated for this buffer.
- *
- * @param: Geometry of the current buffer.
- * @param: Required Geometry.
- * @param: Geometry of the updated buffer.
- *
- * @return True if a memory reallocation is required.
- */
-bool needNewBuffer(const qBufGeometry currentGeometry,
- const qBufGeometry requiredGeometry,
- const qBufGeometry updatedGeometry)
-{
- // If the current buffer info matches the updated info,
- // we do not require any memory allocation.
- if (updatedGeometry.width && updatedGeometry.height &&
- updatedGeometry.format) {
- return false;
- }
- if (currentGeometry.width != requiredGeometry.width ||
- currentGeometry.height != requiredGeometry.height ||
- currentGeometry.format != requiredGeometry.format) {
- // Current and required geometry do not match. Allocation
- // required.
- return true;
- }
- return false;
-}
-
-/*
- * Update the geometry of this buffer without reallocation.
- *
- * @param: buffer whose geometry needs to be updated.
- * @param: Updated width
- * @param: Updated height
- * @param: Updated format
- */
-int updateBufferGeometry(sp<GraphicBuffer> buffer, const qBufGeometry updatedGeometry)
-{
- if (buffer == 0) {
- LOGE("%s: graphic buffer is NULL", __FUNCTION__);
- return -EINVAL;
- }
-
- if (!updatedGeometry.width || !updatedGeometry.height ||
- !updatedGeometry.format) {
- // No update required. Return.
- return 0;
- }
- if (buffer->width == updatedGeometry.width &&
- buffer->height == updatedGeometry.height &&
- buffer->format == updatedGeometry.format) {
- // The buffer has already been updated. Return.
- return 0;
- }
-
- // Validate the handle
- if (private_handle_t::validate(buffer->handle)) {
- LOGE("%s: handle is invalid", __FUNCTION__);
- return -EINVAL;
- }
- buffer->width = updatedGeometry.width;
- buffer->height = updatedGeometry.height;
- buffer->format = updatedGeometry.format;
- private_handle_t *hnd = (private_handle_t*)(buffer->handle);
- if (hnd) {
- hnd->width = updatedGeometry.width;
- hnd->height = updatedGeometry.height;
- hnd->format = updatedGeometry.format;
- } else {
- LOGE("%s: hnd is NULL", __FUNCTION__);
- return -EINVAL;
- }
-
- return 0;
-}
-
-/* Update the S3D format of this buffer.
- *
- * @param: buffer whosei S3D format needs to be updated.
- * @param: Updated buffer S3D format
- */
-int updateBufferS3DFormat(sp<GraphicBuffer> buffer, const int s3dFormat)
-{
- if (buffer == 0) {
- LOGE("%s: graphic buffer is NULL", __FUNCTION__);
- return -EINVAL;
- }
-
- buffer->format |= s3dFormat;
- return 0;
-}
-/*
- * Updates the flags for the layer
- *
- * @param: Attribute
- * @param: Identifies if the attribute was enabled or disabled.
- *
- * @return: -EINVAL if the attribute is invalid
- */
-int updateLayerQcomFlags(eLayerAttrib attribute, bool enable, int& currentFlags)
-{
- int ret = 0;
- switch (attribute) {
- case LAYER_UPDATE_STATUS: {
- if (enable)
- currentFlags |= LAYER_UPDATING;
- else
- currentFlags &= ~LAYER_UPDATING;
- } break;
- case LAYER_ASYNCHRONOUS_STATUS: {
- if (enable)
- currentFlags |= LAYER_ASYNCHRONOUS;
- else
- currentFlags &= ~LAYER_ASYNCHRONOUS;
- } break;
- default: LOGE("%s: invalid attribute(0x%x)", __FUNCTION__, attribute);
- break;
- }
- return ret;
-}
-
-/*
- * Gets the per frame HWC flags for this layer.
- *
- * @param: current hwcl flags
- * @param: current layerFlags
- *
- * @return: the per frame flags.
- */
-int getPerFrameFlags(int hwclFlags, int layerFlags) {
- int flags = hwclFlags;
- if (layerFlags & LAYER_UPDATING)
- flags &= ~HWC_LAYER_NOT_UPDATING;
- else
- flags |= HWC_LAYER_NOT_UPDATING;
-
- if (layerFlags & LAYER_ASYNCHRONOUS)
- flags |= HWC_LAYER_ASYNCHRONOUS;
- else
- flags &= ~HWC_LAYER_ASYNCHRONOUS;
-
- return flags;
-}
-
-
-/*
- * Checks if FB is updated by this composition type
- *
- * @param: composition type
- * @return: true if FB is updated, false if not
- */
-
-bool isUpdatingFB(HWCCompositionType compositionType)
-{
- switch(compositionType)
- {
- case HWC_USE_COPYBIT:
- return true;
- default:
- LOGE("%s: invalid composition type(%d)", __FUNCTION__, compositionType);
- return false;
- };
-}
-
-/*
- * Clear Region implementation for C2D/MDP versions.
- *
- * @param: region to be cleared
- * @param: EGL Display
- * @param: EGL Surface
- *
- * @return 0 on success
- */
-int qcomuiClearRegion(Region region, EGLDisplay dpy, EGLSurface sur)
-{
- int ret = 0;
- int compositionType = QCCompositionType::getInstance().getCompositionType();
-
- if (compositionType & COMPOSITION_TYPE_GPU ||
- (compositionType == COMPOSITION_TYPE_DYN|COMPOSITION_TYPE_C2D))
- {
- // For GPU or DYN comp. with C2D, return an error, so that SF can use
- // the GPU to draw the wormhole.
- return -1;
- }
-
- android_native_buffer_t *renderBuffer = (android_native_buffer_t *)
- eglGetRenderBufferANDROID(dpy, sur);
- if (!renderBuffer) {
- LOGE("%s: eglGetRenderBufferANDROID returned NULL buffer",
- __FUNCTION__);
- return -1;
- }
- private_handle_t *fbHandle = (private_handle_t *)renderBuffer->handle;
- if(!fbHandle) {
- LOGE("%s: Framebuffer handle is NULL", __FUNCTION__);
- return -1;
- }
-
- int bytesPerPixel = 4;
- if (HAL_PIXEL_FORMAT_RGB_565 == fbHandle->format) {
- bytesPerPixel = 2;
- }
-
- Region::const_iterator it = region.begin();
- Region::const_iterator const end = region.end();
- const int32_t stride = renderBuffer->stride*bytesPerPixel;
- while (it != end) {
- const Rect& r = *it++;
- uint8_t* dst = (uint8_t*) fbHandle->base +
- (r.left + r.top*renderBuffer->stride)*bytesPerPixel;
- int w = r.width()*bytesPerPixel;
- int h = r.height();
- do {
- if(4 == bytesPerPixel)
- android_memset32((uint32_t*)dst, 0, w);
- else
- android_memset16((uint16_t*)dst, 0, w);
- dst += stride;
- } while(--h);
- }
- return 0;
-}
-
-/*
- * Handles the externalDisplay event
- * HDMI has highest priority compared to WifiDisplay
- * Based on the current and the new display type, decides the
- * external display to be enabled
- *
- * @param: disp - external display type(wfd/hdmi)
- * @param: value - external event(0/1)
- * @param: currdispType - Current enabled external display Type
- * @return: external display type to be enabled
- *
- */
-external_display_type handleEventHDMI(external_display_type disp, int value,
- external_display_type currDispType)
-{
- external_display_type retDispType = currDispType;
- switch(disp) {
- case EXT_TYPE_HDMI:
- if(value)
- retDispType = EXT_TYPE_HDMI;
- else
- retDispType = EXT_TYPE_NONE;
- break;
- case EXT_TYPE_WIFI:
- if(currDispType != EXT_TYPE_HDMI) {
- if(value)
- retDispType = EXT_TYPE_WIFI;
- else
- retDispType = EXT_TYPE_NONE;
- }
- break;
- default:
- LOGE("%s: Unknown External Display Type!!");
- break;
- }
- return retDispType;
-}
-
-// Using global variables for layer dumping since "property_set("debug.sf.dump",
-// property)" does not work.
-int sfdump_countlimit_raw = 0;
-int sfdump_counter_raw = 1;
-char sfdump_propstr_persist_raw[PROPERTY_VALUE_MAX] = "";
-char sfdumpdir_raw[256] = "";
-int sfdump_countlimit_png = 0;
-int sfdump_counter_png = 1;
-char sfdump_propstr_persist_png[PROPERTY_VALUE_MAX] = "";
-char sfdumpdir_png[256] = "";
-
-bool needToDumpLayers()
-{
- bool bDumpLayer = false;
- char sfdump_propstr[PROPERTY_VALUE_MAX];
- time_t timenow;
- tm sfdump_time;
-
- time(&timenow);
- localtime_r(&timenow, &sfdump_time);
-
- if ((property_get("debug.sf.dump.png", sfdump_propstr, NULL) > 0) &&
- (strncmp(sfdump_propstr, sfdump_propstr_persist_png,
- PROPERTY_VALUE_MAX - 1))) {
- // Strings exist & not equal implies it has changed, so trigger a dump
- strncpy(sfdump_propstr_persist_png, sfdump_propstr,
- PROPERTY_VALUE_MAX - 1);
- sfdump_countlimit_png = atoi(sfdump_propstr);
- sfdump_countlimit_png = (sfdump_countlimit_png < 0) ? 0:
- (sfdump_countlimit_png >= LONG_MAX) ? (LONG_MAX - 1):
- sfdump_countlimit_png;
- if (sfdump_countlimit_png) {
- sprintf(sfdumpdir_png,"/data/sfdump.png%04d%02d%02d.%02d%02d%02d",
- sfdump_time.tm_year + 1900, sfdump_time.tm_mon + 1,
- sfdump_time.tm_mday, sfdump_time.tm_hour,
- sfdump_time.tm_min, sfdump_time.tm_sec);
- if (0 == mkdir(sfdumpdir_png, 0777))
- sfdump_counter_png = 0;
- else
- LOGE("sfdump: Error: %s. Failed to create sfdump directory"
- ": %s", strerror(errno), sfdumpdir_png);
- }
- }
-
- if (sfdump_counter_png <= sfdump_countlimit_png)
- sfdump_counter_png++;
-
- if ((property_get("debug.sf.dump", sfdump_propstr, NULL) > 0) &&
- (strncmp(sfdump_propstr, sfdump_propstr_persist_raw,
- PROPERTY_VALUE_MAX - 1))) {
- // Strings exist & not equal implies it has changed, so trigger a dump
- strncpy(sfdump_propstr_persist_raw, sfdump_propstr,
- PROPERTY_VALUE_MAX - 1);
- sfdump_countlimit_raw = atoi(sfdump_propstr);
- sfdump_countlimit_raw = (sfdump_countlimit_raw < 0) ? 0:
- (sfdump_countlimit_raw >= LONG_MAX) ? (LONG_MAX - 1):
- sfdump_countlimit_raw;
- if (sfdump_countlimit_raw) {
- sprintf(sfdumpdir_raw,"/data/sfdump.raw%04d%02d%02d.%02d%02d%02d",
- sfdump_time.tm_year + 1900, sfdump_time.tm_mon + 1,
- sfdump_time.tm_mday, sfdump_time.tm_hour,
- sfdump_time.tm_min, sfdump_time.tm_sec);
- if (0 == mkdir(sfdumpdir_raw, 0777))
- sfdump_counter_raw = 0;
- else
- LOGE("sfdump: Error: %s. Failed to create sfdump directory"
- ": %s", strerror(errno), sfdumpdir_raw);
- }
- }
-
- if (sfdump_counter_raw <= sfdump_countlimit_raw)
- sfdump_counter_raw++;
-
- bDumpLayer = (sfdump_countlimit_png || sfdump_countlimit_raw)? true : false;
- return bDumpLayer;
-}
-
-inline void getHalPixelFormatStr(int format, char pixelformatstr[])
-{
- if (!pixelformatstr)
- return;
-
- switch(format) {
- case HAL_PIXEL_FORMAT_RGBA_8888:
- strcpy(pixelformatstr, "RGBA_8888");
- break;
- case HAL_PIXEL_FORMAT_RGBX_8888:
- strcpy(pixelformatstr, "RGBX_8888");
- break;
- case HAL_PIXEL_FORMAT_RGB_888:
- strcpy(pixelformatstr, "RGB_888");
- break;
- case HAL_PIXEL_FORMAT_RGB_565:
- strcpy(pixelformatstr, "RGB_565");
- break;
- case HAL_PIXEL_FORMAT_BGRA_8888:
- strcpy(pixelformatstr, "BGRA_8888");
- break;
- case HAL_PIXEL_FORMAT_RGBA_5551:
- strcpy(pixelformatstr, "RGBA_5551");
- break;
- case HAL_PIXEL_FORMAT_RGBA_4444:
- strcpy(pixelformatstr, "RGBA_4444");
- break;
- case HAL_PIXEL_FORMAT_YV12:
- strcpy(pixelformatstr, "YV12");
- break;
- case HAL_PIXEL_FORMAT_YCbCr_422_SP:
- strcpy(pixelformatstr, "YCbCr_422_SP_NV16");
- break;
- case HAL_PIXEL_FORMAT_YCrCb_420_SP:
- strcpy(pixelformatstr, "YCrCb_420_SP_NV21");
- break;
- case HAL_PIXEL_FORMAT_YCbCr_422_I:
- strcpy(pixelformatstr, "YCbCr_422_I_YUY2");
- break;
- case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
- strcpy(pixelformatstr, "NV12_ENCODEABLE");
- break;
- case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED:
- strcpy(pixelformatstr, "YCbCr_420_SP_TILED_TILE_4x2");
- break;
- case HAL_PIXEL_FORMAT_YCbCr_420_SP:
- strcpy(pixelformatstr, "YCbCr_420_SP");
- break;
- case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
- strcpy(pixelformatstr, "YCrCb_420_SP_ADRENO");
- break;
- case HAL_PIXEL_FORMAT_YCrCb_422_SP:
- strcpy(pixelformatstr, "YCrCb_422_SP");
- break;
- case HAL_PIXEL_FORMAT_R_8:
- strcpy(pixelformatstr, "R_8");
- break;
- case HAL_PIXEL_FORMAT_RG_88:
- strcpy(pixelformatstr, "RG_88");
- break;
- case HAL_PIXEL_FORMAT_INTERLACE:
- strcpy(pixelformatstr, "INTERLACE");
- break;
- default:
- sprintf(pixelformatstr, "Unknown0x%X", format);
- break;
- }
-}
-
-void dumpLayer(int moduleCompositionType, int listFlags, size_t layerIndex,
- hwc_layer_t hwLayers[])
-{
- char dumplogstr_png[128] = "";
- char dumplogstr_raw[128] = "";
- if (sfdump_counter_png <= sfdump_countlimit_png) {
- sprintf(dumplogstr_png, "[png-dump-frame: %03d of %03d] ",
- sfdump_counter_png, sfdump_countlimit_png);
- }
- if (sfdump_counter_raw <= sfdump_countlimit_raw) {
- sprintf(dumplogstr_raw, "[raw-dump-frame: %03d of %03d]",
- sfdump_counter_raw, sfdump_countlimit_raw);
- }
- if (NULL == hwLayers) {
- LOGE("sfdump: Error.%s%sLayer[%d] No hwLayers to dump.",
- dumplogstr_raw, dumplogstr_png, layerIndex);
- return;
- }
- hwc_layer *layer = &hwLayers[layerIndex];
- hwc_rect_t sourceCrop = layer->sourceCrop;
- hwc_rect_t displayFrame = layer->displayFrame;
- private_handle_t *hnd = (private_handle_t *)layer->handle;
- char pixelformatstr[32] = "None";
- uint32_t transform = layer->transform & FINAL_TRANSFORM_MASK;
-
- if (hnd)
- getHalPixelFormatStr(hnd->format, pixelformatstr);
-
- LOGE("sfdump: %s%s[%s]-Composition, Layer[%d] SrcBuff[%dx%d] "
- "SrcCrop[%dl, %dt, %dr, %db] "
- "DispFrame[%dl, %dt, %dr, %db] Composition-type = %s, Format = %s, "
- "Orientation = %s, Flags = %s%s%s%s%s%s%s%s%s%s",
- dumplogstr_raw, dumplogstr_png,
- (moduleCompositionType == COMPOSITION_TYPE_GPU)? "GPU":
- (moduleCompositionType == COMPOSITION_TYPE_MDP)? "MDP":
- (moduleCompositionType == COMPOSITION_TYPE_C2D)? "C2D":
- (moduleCompositionType == COMPOSITION_TYPE_CPU)? "CPU":
- (moduleCompositionType == COMPOSITION_TYPE_DYN)? "DYN": "???",
- layerIndex,
- (hnd)? hnd->width : -1, (hnd)? hnd->height : -1,
- sourceCrop.left, sourceCrop.top,
- sourceCrop.right, sourceCrop.bottom,
- displayFrame.left, displayFrame.top,
- displayFrame.right, displayFrame.bottom,
- (layer->compositionType == HWC_FRAMEBUFFER)? "Framebuffer (OpenGL ES)":
- (layer->compositionType == HWC_OVERLAY)? "Overlay":
- (layer->compositionType == HWC_USE_COPYBIT)? "Copybit": "???",
- pixelformatstr,
- (transform == Transform::ROT_0)? "ROT_0":
- (transform == Transform::FLIP_H)? "FLIP_H":
- (transform == Transform::FLIP_V)? "FLIP_V":
- (transform == Transform::ROT_90)? "ROT_90":
- (transform == Transform::ROT_180)? "ROT_180":
- (transform == Transform::ROT_270)? "ROT_270":
- (transform == Transform::ROT_INVALID)? "ROT_INVALID":"???",
- (layer->flags == 0)? "[None]":"",
- (layer->flags & HWC_SKIP_LAYER)? "[Skip layer]":"",
- (layer->flags & HWC_LAYER_NOT_UPDATING)? "[Layer not updating]":"",
- (layer->flags & HWC_COMP_BYPASS)? "[Bypass]":"",
- (layer->flags & HWC_BYPASS_RESERVE_0)? "[Bypass Reserve 0]":"",
- (layer->flags & HWC_BYPASS_RESERVE_1)? "[Bypass Reserve 1]":"",
- (listFlags & HWC_GEOMETRY_CHANGED)? "[List: Geometry Changed]":"",
- (listFlags & HWC_SKIP_COMPOSITION)? "[List: Skip Composition]":"");
-
- if (NULL == hnd) {
- LOGE("sfdump: %s%sLayer[%d] private-handle is invalid.",
- dumplogstr_raw, dumplogstr_png, layerIndex);
- return;
- }
-
- if ((sfdump_counter_png <= sfdump_countlimit_png) && hnd->base) {
- bool bResult = false;
- char sfdumpfile_name[256];
- SkBitmap *tempSkBmp = new SkBitmap();
- SkBitmap::Config tempSkBmpConfig = SkBitmap::kNo_Config;
- sprintf(sfdumpfile_name, "%s/sfdump%03d_layer%d.png", sfdumpdir_png,
- sfdump_counter_png, layerIndex);
-
- switch (hnd->format) {
- case HAL_PIXEL_FORMAT_RGBA_8888:
- case HAL_PIXEL_FORMAT_RGBX_8888:
- case HAL_PIXEL_FORMAT_BGRA_8888:
- tempSkBmpConfig = SkBitmap::kARGB_8888_Config;
- break;
- case HAL_PIXEL_FORMAT_RGB_565:
- case HAL_PIXEL_FORMAT_RGBA_5551:
- case HAL_PIXEL_FORMAT_RGBA_4444:
- tempSkBmpConfig = SkBitmap::kRGB_565_Config;
- break;
- case HAL_PIXEL_FORMAT_RGB_888:
- default:
- tempSkBmpConfig = SkBitmap::kNo_Config;
- break;
- }
- if (SkBitmap::kNo_Config != tempSkBmpConfig) {
- tempSkBmp->setConfig(tempSkBmpConfig, hnd->width, hnd->height);
- tempSkBmp->setPixels((void*)hnd->base);
- bResult = SkImageEncoder::EncodeFile(sfdumpfile_name,
- *tempSkBmp, SkImageEncoder::kPNG_Type, 100);
- LOGE("sfdump: %sDumped Layer[%d] to %s: %s", dumplogstr_png,
- layerIndex, sfdumpfile_name, bResult ? "Success" : "Fail");
- }
- else {
- LOGE("sfdump: %sSkipping Layer[%d] dump: Unsupported layer "
- "format %s for png encoder.", dumplogstr_png, layerIndex,
- pixelformatstr);
- }
- delete tempSkBmp; // Calls SkBitmap::freePixels() internally.
- }
-
- if ((sfdump_counter_raw <= sfdump_countlimit_raw) && hnd->base) {
- char sfdumpfile_name[256];
- bool bResult = false;
- sprintf(sfdumpfile_name, "%s/sfdump%03d_layer%d_%dx%d_%s.raw",
- sfdumpdir_raw,
- sfdump_counter_raw, layerIndex, hnd->width, hnd->height,
- pixelformatstr);
- FILE* fp = fopen(sfdumpfile_name, "w+");
- if (fp != NULL) {
- bResult = (bool) fwrite((void*)hnd->base, hnd->size, 1, fp);
- fclose(fp);
- }
- LOGE("sfdump: %s Dumped Layer[%d] to %s: %s", dumplogstr_raw,
- layerIndex, sfdumpfile_name, bResult ? "Success" : "Fail");
- }
-}
-
-bool needsAspectRatio (int wRatio, int hRatio) {
- return ((wRatio != DEFAULT_WIDTH_RATIO) || (hRatio != DEFAULT_HEIGHT_RATIO));
-}
-
-void applyPixelAspectRatio (int wRatio, int hRatio, int orientation, int maxWidth,
- int maxHeight, Rect& visibleRect, GLfloat mVertices[][2]) {
-
- if ((wRatio == 0) || (hRatio == 0))
- return;
-
- float wDelta = 0;
- float hDelta = 0;
- float aspectRatio;
- float displayRatio;
- float new_width, new_height;
- float old_width = abs(visibleRect.right - visibleRect.left);
- float old_height = abs(visibleRect.bottom - visibleRect.top);
-
- if (orientation == Transform::ROT_INVALID) {
- // During animation, no defined orientation, rely on mTransformedBounds
- if (old_width >= old_height)
- orientation = Transform::ROT_0;
- else
- orientation = Transform::ROT_90;
- }
-
- switch (orientation) {
-
- case Transform::ROT_0:
- case Transform::ROT_180:
-
- // Calculated Aspect Ratio = Original Aspect Ratio x Pixel Aspect Ratio
- aspectRatio = (old_width * wRatio) / (old_height * hRatio);
- displayRatio = (float)maxWidth / (float)maxHeight;
-
- if (aspectRatio >= displayRatio) {
- new_height = old_width / aspectRatio;
- if (new_height > maxHeight) {
- new_height = maxHeight;
- new_width = new_height * aspectRatio;
- wDelta = (new_width - old_width) / 2;
- }
- hDelta = (new_height - old_height) / 2;
- } else {
- new_width = old_height * aspectRatio;
- if (new_width > maxWidth) {
- new_width = maxWidth;
- new_height = new_width / aspectRatio;
- hDelta = (new_height - old_height) / 2;
- }
- wDelta = (new_width - old_width) / 2;
- }
-
- if (hDelta != 0) {
- visibleRect.top -= hDelta;
- visibleRect.bottom += hDelta;
-
- // Set mVertices for GPU fallback (During rotation)
- if (orientation == Transform::ROT_0) {
- mVertices[1][1] = mVertices[2][1] = visibleRect.top;
- mVertices[0][1] = mVertices[3][1] = visibleRect.bottom;
- } else {
- mVertices[0][1] = mVertices[3][1] = visibleRect.top;
- mVertices[1][1] = mVertices[2][1] = visibleRect.bottom;
- }
- }
-
- if (wDelta != 0) {
- visibleRect.left -= wDelta;
- visibleRect.right += wDelta;
-
- // Set mVertices for GPU fallback (During rotation)
- mVertices[0][0] = mVertices[1][0] = visibleRect.left;
- mVertices[2][0] = mVertices[3][0] = visibleRect.right;
- }
- break;
-
- case Transform::ROT_90:
- case Transform::ROT_270:
-
- // Calculated Aspect Ratio = Original Aspect Ratio x Pixel Aspect Ratio
- aspectRatio = (old_height * wRatio) / (old_width * hRatio);
- displayRatio = (float)maxHeight / (float)maxWidth;
-
- if (aspectRatio >= displayRatio) {
- new_height = old_width * aspectRatio;
- if (new_height > maxHeight) {
- new_height = maxHeight;
- new_width = new_height / aspectRatio;
- wDelta = (new_width - old_width) / 2;
- }
- hDelta = (new_height - old_height) / 2;
- } else {
- new_width = old_height / aspectRatio;
- if (new_width > maxWidth) {
- new_width = maxWidth;
- new_height = new_width * aspectRatio;
- hDelta = (new_height - old_height) / 2;
- }
- wDelta = (new_width - old_width) / 2;
- }
-
- if (hDelta != 0) {
- visibleRect.top -= hDelta;
- visibleRect.bottom += hDelta;
-
- // Set mVertices for GPU fallback (During rotation)
- if (orientation == Transform::ROT_90) {
- mVertices[2][1] = mVertices[3][1] = visibleRect.top;
- mVertices[0][1] = mVertices[1][1] = visibleRect.bottom;
- } else {
- mVertices[0][1] = mVertices[1][1] = visibleRect.top;
- mVertices[2][1] = mVertices[3][1] = visibleRect.bottom;
- }
- }
-
- if (wDelta != 0) {
- visibleRect.left -= wDelta;
- visibleRect.right += wDelta;
-
- // Set mVertices for GPU fallback (During rotation)
- if (orientation == Transform::ROT_90) {
- mVertices[1][0] = mVertices[2][0] = visibleRect.left;
- mVertices[0][0] = mVertices[3][0] = visibleRect.right;
- } else {
- mVertices[0][0] = mVertices[3][0] = visibleRect.left;
- mVertices[1][0] = mVertices[2][0] = visibleRect.right;
- }
- }
- break;
-
- default: // Handled above.
- break;
-
- }
-}
-
-
diff --git a/libqdutils/qcom_ui.h b/libqdutils/qcom_ui.h
deleted file mode 100644
index 6a96978f..00000000
--- a/libqdutils/qcom_ui.h
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
-
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of Code Aurora Forum, Inc. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef INCLUDE_LIBQCOM_UI
-#define INCLUDE_LIBQCOM_UI
-
-#include <cutils/native_handle.h>
-#include <ui/GraphicBuffer.h>
-#include <hardware/hwcomposer.h>
-#include <ui/Region.h>
-#include <EGL/egl.h>
-#include <GLES/gl.h>
-#include <utils/Singleton.h>
-#include <cutils/properties.h>
-
-using namespace android;
-using android::sp;
-using android::GraphicBuffer;
-
-#define HWC_BYPASS_INDEX_MASK 0x00000030
-#define DEFAULT_WIDTH_RATIO 1
-#define DEFAULT_HEIGHT_RATIO 1
-
-/*
- * Qcom specific Native Window perform operations
- */
-enum {
- NATIVE_WINDOW_SET_BUFFERS_SIZE = 0x10000000,
- NATIVE_WINDOW_UPDATE_BUFFERS_GEOMETRY = 0x20000000,
- NATIVE_WINDOW_SET_S3D_FORMAT = 0x40000000,
- NATIVE_WINDOW_SET_PIXEL_ASPECT_RATIO = 0x80000000,
-};
-
-/*
- * Layer Attributes
- */
-enum eLayerAttrib {
- LAYER_UPDATE_STATUS,
- LAYER_ASYNCHRONOUS_STATUS,
-};
-
-/*
- * Layer Flags
- */
-enum {
- LAYER_UPDATING = 1<<0,
- LAYER_ASYNCHRONOUS = 1<<1,
-};
-
-/*
- * Layer Transformation - refers to Layer::setGeometry()
- */
-#define SHIFT_SRC_TRANSFORM 4
-#define SRC_TRANSFORM_MASK 0x00F0
-#define FINAL_TRANSFORM_MASK 0x000F
-
-/*
- * Flags set by the layer and sent to HWC
- */
-enum {
- HWC_LAYER_NOT_UPDATING = 0x00000002,
- HWC_LAYER_ASYNCHRONOUS = 0x00000004,
- HWC_COMP_BYPASS = 0x10000000,
- HWC_USE_EXT_ONLY = 0x20000000, //Layer displayed on external only
- HWC_USE_EXT_BLOCK = 0x40000000, //Layer displayed on external only
- HWC_BYPASS_RESERVE_0 = 0x00000010,
- HWC_BYPASS_RESERVE_1 = 0x00000020,
-};
-
-/* Events to the Display HAL perform function
- As of now used for external display related such as
- connect, disconnect, orientation, video started etc.,
- */
-enum {
- EVENT_EXTERNAL_DISPLAY, // External display on/off Event
- EVENT_VIDEO_OVERLAY, // Video Overlay start/stop Event
- EVENT_ORIENTATION_CHANGE, // Orientation Change Event
- EVENT_OVERLAY_STATE_CHANGE, // Overlay State Change Event
- EVENT_OPEN_SECURE_START, // Start of secure session setup config by stagefright
- EVENT_OPEN_SECURE_END, // End of secure session setup config by stagefright
- EVENT_CLOSE_SECURE_START, // Start of secure session teardown config
- EVENT_CLOSE_SECURE_END, // End of secure session teardown config
- EVENT_RESET_POSTBUFFER, // Reset post framebuffer mutex
- EVENT_WAIT_POSTBUFFER, // Wait until post framebuffer returns
-};
-
-// Video information sent to framebuffer HAl
-// used for handling UI mirroring.
-enum {
- VIDEO_OVERLAY_ENDED = 0,
- VIDEO_2D_OVERLAY_STARTED,
- VIDEO_3D_OVERLAY_STARTED
-};
-
-// Information about overlay state change
-enum {
- OVERLAY_STATE_CHANGE_START = 0,
- OVERLAY_STATE_CHANGE_END
-};
-
-/*
- * Structure to hold the buffer geometry
- */
-struct qBufGeometry {
- int width;
- int height;
- int format;
- void set(int w, int h, int f) {
- width = w;
- height = h;
- format = f;
- }
-};
-
-#if 0
-class QCBaseLayer
-{
- // int mS3DFormat;
- int32_t mComposeS3DFormat;
- public:
- QCBaseLayer()
- {
- mComposeS3DFormat = 0;
- }
- enum { // S3D formats
- eS3D_SIDE_BY_SIDE = 0x10000,
- eS3D_TOP_BOTTOM = 0x20000
- };
- /*
- virtual status_t setStereoscopic3DFormat(int format) { mS3DFormat = format; return 0; }
- virtual int getStereoscopic3DFormat() const { return mS3DFormat; }
- */
- void setS3DComposeFormat (int32_t hints)
- {
- if (hints & HWC_HINT_DRAW_S3D_SIDE_BY_SIDE)
- mComposeS3DFormat = eS3D_SIDE_BY_SIDE;
- else if (hints & HWC_HINT_DRAW_S3D_TOP_BOTTOM)
- mComposeS3DFormat = eS3D_TOP_BOTTOM;
- else
- mComposeS3DFormat = 0;
- }
- int32_t needsS3DCompose () const { return mComposeS3DFormat; }
-};
-#endif
-
-/*
- * Function to check if the allocated buffer is of the correct size.
- * Reallocate the buffer with the correct size, if the size doesn't
- * match
- *
- * @param: handle of the allocated buffer
- * @param: requested size for the buffer
- * @param: usage flags
- *
- * return 0 on success
- */
-int checkBuffer(native_handle_t *buffer_handle, int size, int usage);
-
-/*
- * Checks if the format is supported by the GPU.
- *
- * @param: format to check
- *
- * @return true if the format is supported by the GPU.
- */
-bool isGPUSupportedFormat(int format);
-
-
-/*
- * Gets the number of arguments required for this operation.
- *
- * @param: operation whose argument count is required.
- *
- * @return -EINVAL if the operation is invalid.
- */
-int getNumberOfArgsForOperation(int operation);
-
-/*
- * Checks if memory needs to be reallocated for this buffer.
- *
- * @param: Geometry of the current buffer.
- * @param: Required Geometry.
- * @param: Geometry of the updated buffer.
- *
- * @return True if a memory reallocation is required.
- */
-bool needNewBuffer(const qBufGeometry currentGeometry,
- const qBufGeometry requiredGeometry,
- const qBufGeometry updatedGeometry);
-
-/*
- * Update the geometry of this buffer without reallocation.
- *
- * @param: buffer whose geometry needs to be updated.
- * @param: Updated buffer geometry
- */
-int updateBufferGeometry(sp<GraphicBuffer> buffer, const qBufGeometry bufGeometry);
-
-/*
- * Update the S3D format of this buffer.
- *
- * @param: buffer whosei S3D format needs to be updated.
- * @param: Updated buffer S3D format
- */
-int updateBufferS3DFormat(sp<GraphicBuffer> buffer, const int s3dFormat);
-
-/*
- * Updates the flags for the layer
- *
- * @param: Attribute
- * @param: Identifies if the attribute was enabled or disabled.
- * @param: current Layer flags.
- *
- * @return: Flags for the layer
- */
-int updateLayerQcomFlags(eLayerAttrib attribute, bool enable, int& currentFlags);
-
-/*
- * Gets the per frame HWC flags for this layer.
- *
- * @param: current hwcl flags
- * @param: current layerFlags
- *
- * @return: the per frame flags.
- */
-int getPerFrameFlags(int hwclFlags, int layerFlags);
-
-/*
- * Checks if FB is updated by this composition type
- *
- * @param: composition type
- * @return: true if FB is updated, false if not
- */
-
-bool isUpdatingFB(HWCCompositionType compositionType);
-
-/*
- * Clear region implementation for C2D/MDP versions.
- *
- * @param: region to be cleared
- * @param: EGL Display
- * @param: EGL Surface
- *
- * @return 0 on success
- */
-int qcomuiClearRegion(Region region, EGLDisplay dpy, EGLSurface sur);
-
-/*
- * Handles the externalDisplay event
- * HDMI has highest priority compared to WifiDisplay
- * Based on the current and the new display event, decides the
- * external display to be enabled
- *
- * @param: newEvent - new external event
- * @param: currEvent - currently enabled external event
- * @return: external display to be enabled
- *
- */
-external_display_type handleEventHDMI(external_display_type disp, int value,
- external_display_type currDispType);
-/*
- * Checks if layers need to be dumped based on system property "debug.sf.dump"
- * for raw dumps and "debug.sf.dump.png" for png dumps.
- *
- * For example, to dump 25 frames in raw format, do,
- * adb shell setprop debug.sf.dump 25
- * Layers are dumped in a time-stamped location: /data/sfdump*.
- *
- * To dump 10 frames in png format, do,
- * adb shell setprop debug.sf.dump.png 10
- * To dump another 25 or so frames in raw format, do,
- * adb shell setprop debug.sf.dump 26
- *
- * To turn off logcat logging of layer-info, set both properties to 0,
- * adb shell setprop debug.sf.dump.png 0
- * adb shell setprop debug.sf.dump 0
- *
- * @return: true if layers need to be dumped (or logcat-ed).
- */
-bool needToDumpLayers();
-
-/*
- * Dumps a layer's info into logcat and its buffer into raw/png files.
- *
- * @param: moduleCompositionType - Composition type set in hwcomposer module.
- * @param: listFlags - Flags used in hwcomposer's list.
- * @param: layerIndex - Index of layer being dumped.
- * @param: hwLayers - Address of hwc_layer_t to log and dump.
- *
- */
-void dumpLayer(int moduleCompositionType, int listFlags, size_t layerIndex,
- hwc_layer_t hwLayers[]);
-
-bool needsAspectRatio (int wRatio, int hRatio);
-void applyPixelAspectRatio (int wRatio, int hRatio, int orientation, int fbWidth,
- int fbHeight, Rect& visibleRect, GLfloat vertices[][2]);
-
-#endif // INCLUDE_LIBQCOM_UI