OSDN Git Service

Add full color range support
[android-x86/external-IA-Hardware-Composer.git] / wsi / drm / drmbuffer.h
1 /*
2 // Copyright (c) 2016 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16 #ifndef WSI_DRMBUFFER_H_
17 #define WSI_DRMBUFFER_H_
18
19 #include <platformdefines.h>
20
21 #include "framebuffermanager.h"
22 #include "overlaybuffer.h"
23
24 #define METADATA(x) image_.handle_->meta_data_.x
25
26 namespace hwcomposer {
27
28 class NativeBufferHandler;
29
30 class DrmBuffer : public OverlayBuffer {
31  public:
32   DrmBuffer(DrmBuffer&& rhs) = default;
33   DrmBuffer& operator=(DrmBuffer&& other) = default;
34
35   DrmBuffer() = default;
36
37   ~DrmBuffer() override;
38
39   void InitializeFromNativeHandle(
40       HWCNativeHandle handle, ResourceManager* buffer_manager,
41       FrameBufferManager* frame_buffer_manager) override;
42
43   uint32_t GetDataSpace() const override {
44     return METADATA(dataspace_);
45   }
46
47   uint32_t GetWidth() const override {
48     return METADATA(width_);
49   }
50
51   uint32_t GetHeight() const override {
52     return METADATA(height_);
53   }
54
55   uint32_t GetFormat() const override {
56     return format_;
57   }
58
59   HWCLayerType GetUsage() const override {
60     return METADATA(usage_);
61   }
62
63   uint32_t GetFb() const override {
64     return image_.drm_fd_;
65   }
66
67   uint32_t GetPrimeFD() const override {
68     return METADATA(prime_fds_[0]);
69   }
70
71   const uint32_t* GetPitches() const override {
72     return METADATA(pitches_);
73   }
74
75   const uint32_t* GetOffsets() const override {
76     return METADATA(offsets_);
77   }
78
79   uint32_t GetTilingMode() const override {
80     return METADATA(tiling_mode_);
81   }
82
83   void SetDataSpace(uint32_t dataspace) override {
84     METADATA(dataspace_) = dataspace;
85   }
86
87   bool GetInterlace() override {
88     return METADATA(is_interlaced_);
89   }
90
91   void SetInterlace(bool isInterlaced) override {
92     METADATA(is_interlaced_) = isInterlaced;
93   }
94
95   const ResourceHandle& GetGpuResource(GpuDisplay egl_display,
96                                        bool external_import) override;
97
98   const ResourceHandle& GetGpuResource() override;
99
100   const MediaResourceHandle& GetMediaResource(MediaDisplay display,
101                                               uint32_t width,
102                                               uint32_t height) override;
103
104   bool CreateFrameBuffer() override;
105
106   bool CreateFrameBufferWithModifier(uint64_t modifier) override;
107
108   HWCNativeHandle GetOriginalHandle() const override {
109     return original_handle_;
110   }
111
112   void SetOriginalHandle(HWCNativeHandle handle) override;
113
114   void Dump() override;
115
116  private:
117   void Initialize(const HwcMeta& meta);
118   uint32_t format_ = 0;
119   uint32_t frame_buffer_format_ = 0;
120   uint32_t previous_width_ = 0;   // For Media usage.
121   uint32_t previous_height_ = 0;  // For Media usage.
122   ResourceManager* resource_manager_ = 0;
123   ResourceHandle image_;
124   MediaResourceHandle media_image_;
125   HWCNativeHandle original_handle_;
126   FrameBufferManager* fb_manager_ = NULL;
127 };
128
129 }  // namespace hwcomposer
130 #endif  // WSI_DRMBUFFER_H_