10c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed/* 20c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Copyright (C) 2010 The Android Open Source Project 356f610dd235b577725198e9341caae92379fdf23Saurabh Shah * Copyright (C) 2012, The Linux Foundation. All rights reserved. 40c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * 50c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Not a Contribution, Apache license notifications and license are 60c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * retained for attribution purposes only. 70c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * 80c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 90c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * you may not use this file except in compliance with the License. 100c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * You may obtain a copy of the License at 110c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * 120c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 130c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * 140c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * Unless required by applicable law or agreed to in writing, software 150c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 160c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 170c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * See the License for the specific language governing permissions and 180c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed * limitations under the License. 190c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed */ 20d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed#ifndef HWC_FBUPDATE_H 21d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed#define HWC_FBUPDATE_H 220c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed#include "hwc_utils.h" 2372cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed#include "overlay.h" 240c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 250c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) 260c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) 270c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 280c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmednamespace qhwc { 29d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmednamespace ovutils = overlay::utils; 30d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed 316457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah//Framebuffer update Interface 326457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahclass IFBUpdate { 336457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahpublic: 346457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah explicit IFBUpdate(const int& dpy) : mDpy(dpy) {} 356457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah virtual ~IFBUpdate() {}; 366457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah // Sets up members and prepares overlay if conditions are met 3785530ac7d0a1a8961320ca9c7de6adafcff3be08Saurabh Shah virtual bool prepare(hwc_context_t *ctx, hwc_display_contents_1 *list, 3885530ac7d0a1a8961320ca9c7de6adafcff3be08Saurabh Shah int fbZorder) = 0; 396457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah // Draws layer 406195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed virtual bool draw(hwc_context_t *ctx, private_handle_t *hnd) = 0; 416457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah //Reset values 426457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah virtual void reset(); 436457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah //Factory method that returns a low-res or high-res version 44828e828437e9d6dd027819c2bbea21f0c13597d5Saurabh Shah static IFBUpdate *getObject(const int& width, const int& rightSplit, 45828e828437e9d6dd027819c2bbea21f0c13597d5Saurabh Shah const int& dpy); 4685530ac7d0a1a8961320ca9c7de6adafcff3be08Saurabh Shah 476457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahprotected: 486457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah const int mDpy; // display to update 496457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah bool mModeOn; // if prepare happened 506457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah}; 516457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah 526457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah//Low resolution (<= 2048) panel handler. 536457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahclass FBUpdateLowRes : public IFBUpdate { 546457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahpublic: 556457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah explicit FBUpdateLowRes(const int& dpy); 566457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah virtual ~FBUpdateLowRes() {}; 5785530ac7d0a1a8961320ca9c7de6adafcff3be08Saurabh Shah bool prepare(hwc_context_t *ctx, hwc_display_contents_1 *list, 58828e828437e9d6dd027819c2bbea21f0c13597d5Saurabh Shah int fbZorder); 596195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed bool draw(hwc_context_t *ctx, private_handle_t *hnd); 606457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah void reset(); 616457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahprivate: 6285530ac7d0a1a8961320ca9c7de6adafcff3be08Saurabh Shah bool configure(hwc_context_t *ctx, hwc_display_contents_1 *list, 63828e828437e9d6dd027819c2bbea21f0c13597d5Saurabh Shah int fbZorder); 646457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah ovutils::eDest mDest; //pipe to draw on 656457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah}; 666457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah 676457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah//High resolution (> 2048) panel handler. 686457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahclass FBUpdateHighRes : public IFBUpdate { 696457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahpublic: 706457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah explicit FBUpdateHighRes(const int& dpy); 716457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah virtual ~FBUpdateHighRes() {}; 7285530ac7d0a1a8961320ca9c7de6adafcff3be08Saurabh Shah bool prepare(hwc_context_t *ctx, hwc_display_contents_1 *list, 73828e828437e9d6dd027819c2bbea21f0c13597d5Saurabh Shah int fbZorder); 746195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed bool draw(hwc_context_t *ctx, private_handle_t *hnd); 756457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah void reset(); 766457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahprivate: 7785530ac7d0a1a8961320ca9c7de6adafcff3be08Saurabh Shah bool configure(hwc_context_t *ctx, hwc_display_contents_1 *list, 78828e828437e9d6dd027819c2bbea21f0c13597d5Saurabh Shah int fbZorder); 796457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah ovutils::eDest mDestLeft; //left pipe to draw on 806457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah ovutils::eDest mDestRight; //right pipe to draw on 810c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed}; 820c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 830c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed}; //namespace qhwc 840c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed 85d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed#endif //HWC_FBUPDATE_H 86