hwc_utils.h revision befc466069680cb8a65b1f22ad44723d949128c8
1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
2befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Copyright (C) 2010 The Android Open Source Project
3befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Copyright (C) 2012, Code Aurora Forum. All rights reserved.
4befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *
5befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License");
6befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * you may not use this file except in compliance with the License.
7befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * You may obtain a copy of the License at
8befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *
9befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *      http://www.apache.org/licenses/LICENSE-2.0
10befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *
11befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Unless required by applicable law or agreed to in writing, software
12befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS,
13befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * See the License for the specific language governing permissions and
15befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * limitations under the License.
16befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */
17befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
18befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#ifndef HWC_UTILS_H
19befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define HWC_UTILS_H
20befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <cutils/log.h>
21befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <gralloc_priv.h>
22befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/hwcomposer.h>
23befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/hardware.h>
24befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/gralloc.h>
25befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <stdlib.h>
26befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <string.h>
27befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <fb_priv.h>
28befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <overlay.h>
29befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <qcom_ui.h>
30befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <genlock.h>
31befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include "hwc_qbuf.h"
32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
33befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define ALIGN(x, align)     (((x) + ((align)-1)) & ~((align)-1))
34befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define LIKELY( exp )       (__builtin_expect( (exp) != 0, true  ))
35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define UNLIKELY( exp )     (__builtin_expect( (exp) != 0, false ))
36befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
37befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct hwc_context_t;
38befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace qhwc {
39befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
40befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
41befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Utility functions - implemented in hwc_utils.cpp
42befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid dumpLayer(hwc_layer_t const* l);
43befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid getLayerStats(hwc_context_t *ctx, const hwc_layer_list_t *list);
44befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid handleYUV(hwc_context_t *ctx, hwc_layer_t *layer);
45befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid initContext(hwc_context_t *ctx);
46befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid closeContext(hwc_context_t *ctx);
47befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid openFramebufferDevice(hwc_context_t *ctx);
48befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
49befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Inline utility functions
50befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isSkipLayer(const hwc_layer_t* l) {
51befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (UNLIKELY(l && (l->flags & HWC_SKIP_LAYER)));
52befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
53befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
54befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Returns true if the buffer is yuv
55befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isYuvBuffer(const private_handle_t* hnd) {
56befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (hnd && (hnd->bufferType == BUFFER_TYPE_VIDEO));
57befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
58befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
59befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//Return true if buffer is marked locked
60befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isBufferLocked(const private_handle_t* hnd) {
61befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (hnd && (private_handle_t::PRIV_FLAGS_HWC_LOCK & hnd->flags));
62befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
63befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
64befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
65befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Overlay specific functions - inline or implemented in hwc_overlay.cpp
66befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool prepareOverlay(hwc_context_t *ctx, hwc_layer_t *layer);
67befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//XXX: Refine draw functions
68befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedbool drawLayerUsingOverlay(hwc_context_t *ctx, hwc_layer_t *layer);
69befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//XXX: Refine
70befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid cleanOverlays(hwc_context_t *ctx );
71befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid setOverlayState(hwc_context_t* ctx, ovutils::eOverlayState state);
72befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
73befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
74befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Copybit specific functions - inline or implemented in hwc_copybit.cpp
75befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
76befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
77befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
78befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
79befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// HDMI specific functions - inline or implemented in hwc_hdmi.cpp
80befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
81befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
82befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
83befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed} //qhwc namespace
84befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
85befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
86befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
87befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
88befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// HWC context
89befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// This structure contains overall state
90befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct hwc_context_t {
91befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    hwc_composer_device_t device;
92befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    // Layer variables
93befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int yuvBufferCount;
94befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int hdmiEnabled;
95befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int numHwLayers;
96befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    bool skipComposition;
97befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
98befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //Framebuffer device
99befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    framebuffer_device_t *fbDev;
100befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
101befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //Overlay object - NULL for non overlay devices
102befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    overlay::Overlay *mOverlay;
103befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
104befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //QueuedBufferStore to hold buffers for overlay
105befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    qhwc::QueuedBufferStore *qbuf;
106befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
107befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
108befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
109befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
110befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
111befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif //HWC_UTILS_H
112