• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 2015 - 2016, The Linux Foundation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *     * Redistributions of source code must retain the above copyright
8 *       notice, this list of conditions and the following disclaimer.
9 *     * Redistributions in binary form must reproduce the above
10 *       copyright notice, this list of conditions and the following
11 *       disclaimer in the documentation and/or other materials provided
12 *       with the distribution.
13 *     * Neither the name of The Linux Foundation nor the names of its
14 *       contributors may be used to endorse or promote products derived
15 *       from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29 
30 #include <utils/debug.h>
31 #include "hw_virtual.h"
32 
33 #define __CLASS__ "HWVirtual"
34 
35 namespace sdm {
36 
Create(HWInterface ** intf,HWInfoInterface * hw_info_intf,BufferSyncHandler * buffer_sync_handler)37 DisplayError HWVirtual::Create(HWInterface **intf, HWInfoInterface *hw_info_intf,
38                                BufferSyncHandler *buffer_sync_handler) {
39   DisplayError error = kErrorNone;
40   HWVirtual *hw_virtual = NULL;
41 
42   hw_virtual = new HWVirtual(buffer_sync_handler, hw_info_intf);
43   error = hw_virtual->Init();
44   if (error != kErrorNone) {
45     delete hw_virtual;
46   } else {
47     *intf = hw_virtual;
48   }
49 
50   return error;
51 }
52 
Destroy(HWInterface * intf)53 DisplayError HWVirtual::Destroy(HWInterface *intf) {
54   HWVirtual *hw_virtual = static_cast<HWVirtual *>(intf);
55   hw_virtual->Deinit();
56   delete hw_virtual;
57 
58   return kErrorNone;
59 }
60 
HWVirtual(BufferSyncHandler * buffer_sync_handler,HWInfoInterface * hw_info_intf)61 HWVirtual::HWVirtual(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf)
62   : HWDevice(buffer_sync_handler) {
63   HWDevice::device_type_ = kDeviceVirtual;
64   HWDevice::device_name_ = "Virtual Display Device";
65   HWDevice::hw_info_intf_ = hw_info_intf;
66 }
67 
Init()68 DisplayError HWVirtual::Init() {
69   return HWDevice::Init();
70 }
71 
Validate(HWLayers * hw_layers)72 DisplayError HWVirtual::Validate(HWLayers *hw_layers) {
73   HWDevice::ResetDisplayParams();
74   return HWDevice::Validate(hw_layers);
75 }
76 
GetMixerAttributes(HWMixerAttributes * mixer_attributes)77 DisplayError HWVirtual::GetMixerAttributes(HWMixerAttributes *mixer_attributes) {
78   if (!mixer_attributes) {
79     return kErrorParameters;
80   }
81 
82   mixer_attributes->width = display_attributes_.x_pixels;
83   mixer_attributes->height = display_attributes_.y_pixels;
84   mixer_attributes_.split_left = display_attributes_.is_device_split ?
85       (display_attributes_.x_pixels / 2) : mixer_attributes_.width;
86 
87   return kErrorNone;
88 }
89 
SetDisplayAttributes(const HWDisplayAttributes & display_attributes)90 DisplayError HWVirtual::SetDisplayAttributes(const HWDisplayAttributes &display_attributes) {
91   if (display_attributes.x_pixels == 0 || display_attributes.y_pixels == 0) {
92     return kErrorParameters;
93   }
94 
95   display_attributes_ = display_attributes;
96 
97   if (display_attributes_.x_pixels > hw_resource_.max_mixer_width) {
98     display_attributes_.is_device_split = true;
99   }
100 
101   return kErrorNone;
102 }
103 
104 }  // namespace sdm
105 
106