1140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan/* 2140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * Copyright (C) 2010 The Android Open Source Project 3140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * Copyright (C) 2012-2014, The Linux Foundation. All rights reserved. 4140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * 5140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * Not a Contribution, Apache license notifications and license are retained 6140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * for attribution purposes only. 7140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * 8140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * Licensed under the Apache License, Version 2.0 (the "License"); 9140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * you may not use this file except in compliance with the License. 10140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * You may obtain a copy of the License at 11140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * 12140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * http://www.apache.org/licenses/LICENSE-2.0 13140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * 14140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * Unless required by applicable law or agreed to in writing, software 15140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * distributed under the License is distributed on an "AS IS" BASIS, 16140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * See the License for the specific language governing permissions and 18140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan * limitations under the License. 19140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan */ 20140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan 21140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan#ifndef HWC_VIRTUAL 22140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan#define HWC_VIRTUAL 23140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan 24140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan#include <hwc_utils.h> 25f1ea15e3c689d155626a56b870ee78cf4041b28dTatenda Chipeperekwa#include <virtual.h> 26140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan 27140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnannamespace qhwc { 28140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnannamespace ovutils = overlay::utils; 29140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan 30140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan// Base and abstract class for VDS and V4L2 wfd design. 31140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnanclass HWCVirtualBase { 32140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnanpublic: 33140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan explicit HWCVirtualBase(){}; 34140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual ~HWCVirtualBase(){}; 35140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // instantiates and returns the pointer to VDS or V4L2 object. 36e21110177d7605c4668bad3e2de85c8bb2a531f7Raj kamal static HWCVirtualBase* getObject(bool isVDSEnabled); 37140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual int prepare(hwc_composer_device_1 *dev, 38140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan hwc_display_contents_1_t* list) = 0; 39140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual int set(hwc_context_t *ctx, hwc_display_contents_1_t *list) = 0; 40140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual void init(hwc_context_t *ctx) = 0; 41140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual void destroy(hwc_context_t *ctx, size_t numDisplays, 42140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan hwc_display_contents_1_t** displays) = 0; 43f1ea15e3c689d155626a56b870ee78cf4041b28dTatenda Chipeperekwa virtual void pause(hwc_context_t* ctx, int dpy) = 0; 44f1ea15e3c689d155626a56b870ee78cf4041b28dTatenda Chipeperekwa virtual void resume(hwc_context_t* ctx, int dpy) = 0; 45140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan}; 46140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan 47140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnanclass HWCVirtualVDS : public HWCVirtualBase { 48140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnanpublic: 49140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan explicit HWCVirtualVDS(){}; 50140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual ~HWCVirtualVDS(){}; 51140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // Chooses composition type and configures pipe for each layer in virtual 52140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // display list 53140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual int prepare(hwc_composer_device_1 *dev, 54140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan hwc_display_contents_1_t* list); 55140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // Queues the buffer for each layer in virtual display list and call display 56140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // commit. 57140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual int set(hwc_context_t *ctx, hwc_display_contents_1_t *list); 58140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // instantiates mdpcomp, copybit and fbupdate objects and initialize those 59140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // objects for virtual display during virtual display connect. 60140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual void init(hwc_context_t *ctx); 61140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // Destroys mdpcomp, copybit and fbupdate objects and for virtual display 62140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // during virtual display disconnect. 63140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual void destroy(hwc_context_t *ctx, size_t numDisplays, 64140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan hwc_display_contents_1_t** displays); 65f1ea15e3c689d155626a56b870ee78cf4041b28dTatenda Chipeperekwa virtual void pause(hwc_context_t* ctx, int dpy); 66f1ea15e3c689d155626a56b870ee78cf4041b28dTatenda Chipeperekwa virtual void resume(hwc_context_t* ctx, int dpy); 67140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan}; 68140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan 69140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnanclass HWCVirtualV4L2 : public HWCVirtualBase { 70140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnanpublic: 71140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan explicit HWCVirtualV4L2(){}; 72140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual ~HWCVirtualV4L2(){}; 73140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // Chooses composition type and configures pipe for each layer in virtual 74140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // display list 75140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual int prepare(hwc_composer_device_1 *dev, 76140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan hwc_display_contents_1_t* list); 77140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // Queues the buffer for each layer in virtual display list and call 78140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // display commit. 79140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan virtual int set(hwc_context_t *ctx, hwc_display_contents_1_t *list); 80140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // instantiates mdpcomp, copybit and fbupdate objects and initialize those 81140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // objects for virtual display during virtual display connect. This function 82140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // is no-op for V4L2 design 83404047f2c61687024048b04374ea736285ddded1Arun Kumar K.R virtual void init(hwc_context_t *) {}; 84140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // Destroys mdpcomp, copybit and fbupdate objects and for virtual display 85140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan // during virtual display disconnect. This function is no-op for V4L2 design 86404047f2c61687024048b04374ea736285ddded1Arun Kumar K.R virtual void destroy(hwc_context_t *, size_t , 87404047f2c61687024048b04374ea736285ddded1Arun Kumar K.R hwc_display_contents_1_t** ) {}; 88f1ea15e3c689d155626a56b870ee78cf4041b28dTatenda Chipeperekwa virtual void pause(hwc_context_t* ctx, int dpy); 89f1ea15e3c689d155626a56b870ee78cf4041b28dTatenda Chipeperekwa virtual void resume(hwc_context_t* ctx, int dpy); 90140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan}; 91140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan 92140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan}; //namespace 93140ee6411106722dae886dc8c5b104b72d64dee0Ramkumar Radhakrishnan#endif 94