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