1 /*
2  * Copyright (C) 2018 The Android Open Source Project
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 
17 #ifndef HARDWARE_GOOGLE_MEDIA_C2_V1_0_UTILS_INPUTSURFACE_H
18 #define HARDWARE_GOOGLE_MEDIA_C2_V1_0_UTILS_INPUTSURFACE_H
19 
20 #include <codec2/hidl/1.0/ComponentStore.h>
21 
22 #include <hardware/google/media/c2/1.0/IInputSurface.h>
23 #include <hardware/google/media/c2/1.0/IComponent.h>
24 
25 #include <android/hardware/graphics/bufferqueue/1.0/IGraphicBufferProducer.h>
26 #include <android/hardware/graphics/bufferqueue/1.0/IProducerListener.h>
27 #include <android/hardware/graphics/common/1.0/types.h>
28 #include <android/hardware/media/1.0/types.h>
29 
30 #include <gui/IGraphicBufferProducer.h>
31 #include <media/stagefright/bqhelper/GraphicBufferSource.h>
32 
33 #include <hidl/HidlSupport.h>
34 #include <hidl/Status.h>
35 
36 class C2ReflectorHelper;
37 
38 namespace hardware {
39 namespace google {
40 namespace media {
41 namespace c2 {
42 namespace V1_0 {
43 namespace utils {
44 
45 using ::android::hardware::hidl_handle;
46 using ::android::hardware::hidl_string;
47 using ::android::hardware::hidl_vec;
48 using ::android::hardware::Return;
49 using ::android::hardware::Void;
50 using ::android::sp;
51 
52 using ::android::hardware::graphics::common::V1_0::PixelFormat;
53 using ::android::hardware::media::V1_0::AnwBuffer;
54 
55 struct InputSurface : public IInputSurface {
56 
57     typedef ::android::hidl::base::V1_0::IBase IBase;
58 
59     typedef ::android::hardware::graphics::bufferqueue::V1_0::
60             IProducerListener HProducerListener;
61 
62     typedef ::android::
63             IGraphicBufferProducer BGraphicBufferProducer;
64 
65     typedef ::android::hardware::graphics::bufferqueue::V1_0::
66             IGraphicBufferProducer HGraphicBufferProducer;
67 
68     typedef ::android::
69             GraphicBufferSource GraphicBufferSource;
70 
71 // Type disambiguation
72 
73     typedef ::hardware::google::media::c2::V1_0::Status Status;
74 
75 // New methods from IInputSurface
76 
77     virtual Return<void> connectToComponent(
78             const sp<IComponent>& component,
79             connectToComponent_cb _hidl_cb) override;
80 
81     virtual Return<sp<IConfigurable>> getConfigurable() override;
82 
83 // Methods derived from IGraphicBufferProducer
84 
85     virtual Return<void> requestBuffer(
86             int32_t slot,
87             requestBuffer_cb _hidl_cb) override;
88 
89     virtual Return<int32_t> setMaxDequeuedBufferCount(
90             int32_t maxDequeuedBuffers) override;
91 
92     virtual Return<int32_t> setAsyncMode(
93             bool async) override;
94 
95     virtual Return<void> dequeueBuffer(
96             uint32_t width,
97             uint32_t height,
98             PixelFormat format,
99             uint32_t usage,
100             bool getFrameTimestamps,
101             dequeueBuffer_cb _hidl_cb) override;
102 
103     virtual Return<int32_t> detachBuffer(
104             int32_t slot) override;
105 
106     virtual Return<void> detachNextBuffer(
107             detachNextBuffer_cb _hidl_cb) override;
108 
109     virtual Return<void> attachBuffer(
110             const AnwBuffer& buffer,
111             attachBuffer_cb _hidl_cb) override;
112 
113     virtual Return<void> queueBuffer(
114             int32_t slot,
115             const QueueBufferInput& input,
116             queueBuffer_cb _hidl_cb) override;
117 
118     virtual Return<int32_t> cancelBuffer(
119             int32_t slot,
120             const hidl_handle& fence) override;
121 
122     virtual Return<void> query(
123             int32_t what,
124             query_cb _hidl_cb) override;
125 
126     virtual Return<void> connect(
127             const sp<HProducerListener>& listener,
128             int32_t api,
129             bool producerControlledByApp,
130             connect_cb _hidl_cb) override;
131 
132     virtual Return<int32_t> disconnect(
133             int32_t api,
134             DisconnectMode mode) override;
135 
136     virtual Return<int32_t> setSidebandStream(
137             const hidl_handle& stream) override;
138 
139     virtual Return<void> allocateBuffers(
140             uint32_t width,
141             uint32_t height,
142             PixelFormat format,
143             uint32_t usage) override;
144 
145     virtual Return<int32_t> allowAllocation(
146             bool allow) override;
147 
148     virtual Return<int32_t> setGenerationNumber(
149             uint32_t generationNumber) override;
150 
151     virtual Return<void> getConsumerName(
152             getConsumerName_cb _hidl_cb) override;
153 
154     virtual Return<int32_t> setSharedBufferMode(
155             bool sharedBufferMode) override;
156 
157     virtual Return<int32_t> setAutoRefresh(
158             bool autoRefresh) override;
159 
160     virtual Return<int32_t> setDequeueTimeout(
161             int64_t timeoutNs) override;
162 
163     virtual Return<void> getLastQueuedBuffer(
164             getLastQueuedBuffer_cb _hidl_cb) override;
165 
166     virtual Return<void> getFrameTimestamps(
167             getFrameTimestamps_cb _hidl_cb) override;
168 
169     virtual Return<void> getUniqueId(
170             getUniqueId_cb _hidl_cb) override;
171 
172     class ConfigurableImpl;
173 
174 protected:
175     sp<ComponentStore> mStore;
176     sp<HGraphicBufferProducer> mBase;
177     sp<GraphicBufferSource> mSource;
178     std::shared_ptr<ConfigurableImpl> mHelper;
179     sp<CachedConfigurable> mConfigurable;
180 
181     InputSurface(
182             const sp<ComponentStore>& store,
183             const std::shared_ptr<C2ReflectorHelper>& reflector,
184             const sp<HGraphicBufferProducer>& base,
185             const sp<GraphicBufferSource>& source);
186 
187     virtual ~InputSurface() override = default;
188 
189     friend struct ComponentStore;
190 };
191 
192 
193 }  // namespace utils
194 }  // namespace V1_0
195 }  // namespace c2
196 }  // namespace media
197 }  // namespace google
198 }  // namespace hardware
199 
200 #endif  // HARDWARE_GOOGLE_MEDIA_C2_V1_0_UTILS_INPUTSURFACE_H
201