1f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed/*
2f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * Copyright (C) 2010 The Android Open Source Project
3f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * Copyright (C) 2012, Code Aurora Forum. All rights reserved.
4f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed *
5f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License");
6f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * you may not use this file except in compliance with the License.
7f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * You may obtain a copy of the License at
8f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed *
9f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed *      http://www.apache.org/licenses/LICENSE-2.0
10f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed *
11f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * Unless required by applicable law or agreed to in writing, software
12f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS,
13f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * See the License for the specific language governing permissions and
15f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed * limitations under the License.
16f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed */
17f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#ifndef HWC_VIDEO_H
18f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#define HWC_VIDEO_H
19f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#include "hwc_utils.h"
20f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed
21f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#define LIKELY( exp )       (__builtin_expect( (exp) != 0, true  ))
22f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#define UNLIKELY( exp )     (__builtin_expect( (exp) != 0, false ))
23f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed
24f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmednamespace qhwc {
25f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed//Feature for using overlay to display videos.
26f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedclass VideoOverlay {
27f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedpublic:
28f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed    //Sets up members and prepares overlay if conditions are met
293e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah    static bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list,
303e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah            int dpy);
31f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed    //Draws layer if this feature is on
323e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah    static bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list,
333e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah            int dpy);
344c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed    //resets values
354c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed    static void reset();
36f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedprivate:
37f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed    //Choose an appropriate overlay state based on conditions
383e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah    static void chooseState(hwc_context_t *ctx, int dpy,
393e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah        hwc_layer_1_t *yuvLayer);
404c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed    //Configures overlay for video prim and ext
413e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah    static bool configure(hwc_context_t *ctx, int dpy,
423e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah            hwc_layer_1_t *yuvlayer);
43f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed    //Marks layer flags if this feature is used
443e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah    static void markFlags(hwc_layer_1_t *yuvLayer);
45f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed    //The chosen overlay state.
46c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah    static ovutils::eOverlayState sState[HWC_NUM_DISPLAY_TYPES];
47f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed    //Flags if this feature is on.
48c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah    static bool sIsModeOn[HWC_NUM_DISPLAY_TYPES];
49f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed};
50f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed
514c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmedinline void VideoOverlay::reset() {
52c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah    for(uint32_t i = 0; i < HWC_NUM_DISPLAY_TYPES; i++) {
53c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah        sIsModeOn[i] = false;
54c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah        sState[i] = ovutils::OV_CLOSED;
55c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah    }
564c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed}
57f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed}; //namespace qhwc
58f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed
59f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#endif //HWC_VIDEO_H
60