hwc_utils.h revision 7c958d445fe88a82eedbd1b887cd1e474a7526b1
129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Copyright (C) 2010 The Android Open Source Project 329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Copyright (C) 2012, Code Aurora Forum. All rights reserved. 429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * you may not use this file except in compliance with the License. 729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * You may obtain a copy of the License at 829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Unless required by applicable law or agreed to in writing, software 1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 1329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * See the License for the specific language governing permissions and 1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * limitations under the License. 1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifndef HWC_UTILS_H 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define HWC_UTILS_H 2072cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <hardware/hwcomposer.h> 2272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed#include <gralloc_priv.h> 2329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2431da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#define ALIGN_TO(x, align) (((x) + ((align)-1)) & ~((align)-1)) 2529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) 2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) 2731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#define FINAL_TRANSFORM_MASK 0x000F 2829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2972cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed//Fwrd decls 3029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct hwc_context_t; 3172cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedstruct framebuffer_device_t; 3272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 3372cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmednamespace overlay { 3472cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedclass Overlay; 3572cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed} 3672cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 3729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace qhwc { 3872cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed//fwrd decl 3972cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedclass QueuedBufferStore; 4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmedenum external_display_type { 4231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed EXT_TYPE_NONE, 4331da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed EXT_TYPE_HDMI, 4431da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed EXT_TYPE_WIFI 4531da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed}; 4631da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmedenum HWCCompositionType { 4731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed HWC_USE_GPU = HWC_FRAMEBUFFER, // This layer is to be handled by 4831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed // Surfaceflinger 4931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed HWC_USE_OVERLAY = HWC_OVERLAY, // This layer is to be handled by the overlay 5031da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed HWC_USE_COPYBIT // This layer is to be handled by copybit 5131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed}; 5231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 537c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmedenum { 547c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed HWC_MDPCOMP = 0x00000002, 557c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed HWC_LAYER_RESERVED_0 = 0x00000004, 567c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed HWC_LAYER_RESERVED_1 = 0x00000008 577c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed}; 587c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed 5931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 6072cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedclass ExternalDisplay; 6172cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedclass CopybitEngine; 6229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// ----------------------------------------------------------------------------- 6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// Utility functions - implemented in hwc_utils.cpp 6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedvoid dumpLayer(hwc_layer_t const* l); 6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedvoid getLayerStats(hwc_context_t *ctx, const hwc_layer_list_t *list); 6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedvoid initContext(hwc_context_t *ctx); 6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedvoid closeContext(hwc_context_t *ctx); 68f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed//Crops source buffer against destination and FB boundaries 69f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedvoid calculate_crop_rects(hwc_rect_t& crop, hwc_rect_t& dst, 70f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed const int fbWidth, const int fbHeight); 7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 7229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// Inline utility functions 7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline bool isSkipLayer(const hwc_layer_t* l) { 7429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (UNLIKELY(l && (l->flags & HWC_SKIP_LAYER))); 7529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 7629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 7729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// Returns true if the buffer is yuv 7829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline bool isYuvBuffer(const private_handle_t* hnd) { 7929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (hnd && (hnd->bufferType == BUFFER_TYPE_VIDEO)); 8029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 8129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 8229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//Return true if buffer is marked locked 8329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline bool isBufferLocked(const private_handle_t* hnd) { 8429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (hnd && (private_handle_t::PRIV_FLAGS_HWC_LOCK & hnd->flags)); 8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 8631da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 8772cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed// Initialize uevent thread 8872cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedvoid init_uevent_thread(hwc_context_t* ctx); 8929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 907c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmedinline void getLayerResolution(const hwc_layer_t* layer, 917c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed int& width, int& height) 927c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed{ 937c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed hwc_rect_t displayFrame = layer->displayFrame; 947c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed width = displayFrame.right - displayFrame.left; 957c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed height = displayFrame.bottom - displayFrame.top; 967c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed} 97f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed}; //qhwc namespace 9829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 9929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// ----------------------------------------------------------------------------- 10029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// HWC context 10129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// This structure contains overall state 10229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct hwc_context_t { 10329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed hwc_composer_device_t device; 10429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int numHwLayers; 105a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed int mdpVersion; 106a87da60090f55b823ee999930b381daa3dbda67eNaseer Ahmed bool hasOverlay; 107f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed int overlayInUse; 10829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 10929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed //Framebuffer device 11072cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed framebuffer_device_t *mFbDev; 11131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 11231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed //Copybit Engine 11331da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed qhwc::CopybitEngine* mCopybitEngine; 11429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 11529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed //Overlay object - NULL for non overlay devices 11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed overlay::Overlay *mOverlay; 11729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed //QueuedBufferStore to hold buffers for overlay 11929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed qhwc::QueuedBufferStore *qbuf; 1200c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 1210c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed // External display related information 12272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed qhwc::ExternalDisplay *mExtDisplay; 12372cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 12429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 12529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 12629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif //HWC_UTILS_H 127