blob: 79e09f7f5cd9f52a7ac663cb26fbcfd8f8227ddd [file] [log] [blame]
Naseer Ahmed29a26812012-06-14 00:56:20 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 * Copyright (C) 2012, Code Aurora Forum. All rights reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#include "hwc_utils.h"
Naseer Ahmeda87da602012-07-01 23:54:19 -070019#include "mdp_version.h"
Naseer Ahmed29a26812012-06-14 00:56:20 -070020
21namespace qhwc {
22void initContext(hwc_context_t *ctx)
23{
24 //XXX: target specific initializations here
25 openFramebufferDevice(ctx);
26 ctx->mOverlay = overlay::Overlay::getInstance();
27 ctx->qbuf = new QueuedBufferStore();
Naseer Ahmeda87da602012-07-01 23:54:19 -070028 ctx->mdpVersion = qdutils::MDPVersion::getInstance().getMDPVersion();
29 ctx->hasOverlay = qdutils::MDPVersion::getInstance().hasOverlay();
30 ALOGI("MDP version: %d",ctx->mdpVersion);
Naseer Ahmed29a26812012-06-14 00:56:20 -070031
32}
33
34void closeContext(hwc_context_t *ctx)
35{
36 if(ctx->mOverlay) {
37 delete ctx->mOverlay;
38 ctx->mOverlay = NULL;
39 }
40 if(ctx->fbDev) {
41 framebuffer_close(ctx->fbDev);
42 ctx->fbDev = NULL;
43 }
44
45 if(ctx->qbuf) {
46 delete ctx->qbuf;
47 ctx->qbuf = NULL;
48 }
49}
50
51// Opens Framebuffer device
52void openFramebufferDevice(hwc_context_t *ctx) {
53 hw_module_t const *module;
54 if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) {
55 framebuffer_open(module, &(ctx->fbDev));
56 }
57}
58
59void dumpLayer(hwc_layer_t const* l)
60{
61 ALOGD("\ttype=%d, flags=%08x, handle=%p, tr=%02x, blend=%04x, {%d,%d,%d,%d}"
62 ", {%d,%d,%d,%d}",
63 l->compositionType, l->flags, l->handle, l->transform, l->blending,
64 l->sourceCrop.left,
65 l->sourceCrop.top,
66 l->sourceCrop.right,
67 l->sourceCrop.bottom,
68 l->displayFrame.left,
69 l->displayFrame.top,
70 l->displayFrame.right,
71 l->displayFrame.bottom);
72}
73
74void getLayerStats(hwc_context_t *ctx, const hwc_layer_list_t *list)
75{
76 int yuvBufCount = 0;
77 int layersNotUpdatingCount = 0;
78 for (size_t i=0 ; i<list->numHwLayers; i++) {
79 private_handle_t *hnd = (private_handle_t *)list->hwLayers[i].handle;
80 if (isYuvBuffer(hnd)) {
81 yuvBufCount++;
82 }
83 }
84 // Number of video/camera layers drawable with overlay
85 ctx->yuvBufferCount = yuvBufCount;
86 ctx->numHwLayers = list->numHwLayers;
87 return;
88}
89
90void handleYUV(hwc_context_t *ctx, hwc_layer_t *layer)
91{
92 private_handle_t *hnd =
93 (private_handle_t *)layer->handle;
94 //XXX: Handle targets not using overlay
95 if(prepareOverlay(ctx, layer)) {
Naseer Ahmeda87da602012-07-01 23:54:19 -070096 layer->compositionType = HWC_OVERLAY;
Naseer Ahmed29a26812012-06-14 00:56:20 -070097 layer->hints |= HWC_HINT_CLEAR_FB;
98 }
99}
100};//namespace