blob: 54b9078624018a841f572378f58f4047939bcc33 [file] [log] [blame]
Pawin Vongmasaeeac97b2017-01-18 05:03:07 -08001/*
2 * Copyright 2016, 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 ANDROID_HARDWARE_MEDIA_OMX_V1_0_WOMXBUFFERPRODUCER_H
18#define ANDROID_HARDWARE_MEDIA_OMX_V1_0_WOMXBUFFERPRODUCER_H
19
Pawin Vongmasaeeac97b2017-01-18 05:03:07 -080020#include <hidl/MQDescriptor.h>
21#include <hidl/Status.h>
Pawin Vongmasa0d3a5ed2017-02-22 03:19:35 -080022
23#include <binder/Binder.h>
Pawin Vongmasaeeac97b2017-01-18 05:03:07 -080024#include <gui/IGraphicBufferProducer.h>
25#include <gui/IProducerListener.h>
Pawin Vongmasa0d3a5ed2017-02-22 03:19:35 -080026
27#include <android/hardware/media/omx/1.0/IOmxBufferProducer.h>
Pawin Vongmasaeeac97b2017-01-18 05:03:07 -080028
29namespace android {
30namespace hardware {
31namespace media {
32namespace omx {
33namespace V1_0 {
34namespace utils {
35
36using ::android::hardware::graphics::common::V1_0::PixelFormat;
37using ::android::hardware::media::omx::V1_0::IOmxBufferProducer;
38using ::android::hardware::media::omx::V1_0::IOmxProducerListener;
39using ::android::hardware::media::omx::V1_0::Status;
40using ::android::hardware::media::V1_0::AnwBuffer;
41using ::android::hidl::base::V1_0::IBase;
42using ::android::hardware::hidl_array;
43using ::android::hardware::hidl_memory;
44using ::android::hardware::hidl_string;
45using ::android::hardware::hidl_vec;
46using ::android::hardware::Return;
47using ::android::hardware::Void;
48using ::android::sp;
49
50using ::android::IGraphicBufferProducer;
Pawin Vongmasa8ff40182017-02-07 02:22:34 -080051using ::android::BnGraphicBufferProducer;
Pawin Vongmasaeeac97b2017-01-18 05:03:07 -080052using ::android::IProducerListener;
53
54struct TWOmxBufferProducer : public IOmxBufferProducer {
55 sp<IGraphicBufferProducer> mBase;
56 TWOmxBufferProducer(sp<IGraphicBufferProducer> const& base);
57 Return<void> requestBuffer(int32_t slot, requestBuffer_cb _hidl_cb)
58 override;
59 Return<Status> setMaxDequeuedBufferCount(int32_t maxDequeuedBuffers)
60 override;
61 Return<Status> setAsyncMode(bool async) override;
62 Return<void> dequeueBuffer(
63 uint32_t width, uint32_t height, PixelFormat format, uint32_t usage,
64 bool getFrameTimestamps, dequeueBuffer_cb _hidl_cb) override;
65 Return<Status> detachBuffer(int32_t slot) override;
66 Return<void> detachNextBuffer(detachNextBuffer_cb _hidl_cb) override;
67 Return<void> attachBuffer(const AnwBuffer& buffer, attachBuffer_cb _hidl_cb)
68 override;
69 Return<void> queueBuffer(
70 int32_t slot, const IOmxBufferProducer::QueueBufferInput& input,
71 queueBuffer_cb _hidl_cb) override;
72 Return<Status> cancelBuffer(int32_t slot, const hidl_handle& fence)
73 override;
74 Return<void> query(int32_t what, query_cb _hidl_cb) override;
75 Return<void> connect(const sp<IOmxProducerListener>& listener,
76 int32_t api, bool producerControlledByApp,
77 connect_cb _hidl_cb) override;
78 Return<Status> disconnect(
79 int32_t api,
80 IOmxBufferProducer::DisconnectMode mode) override;
81 Return<Status> setSidebandStream(const hidl_handle& stream) override;
82 Return<void> allocateBuffers(
83 uint32_t width, uint32_t height,
84 PixelFormat format, uint32_t usage) override;
85 Return<Status> allowAllocation(bool allow) override;
86 Return<Status> setGenerationNumber(uint32_t generationNumber) override;
87 Return<void> getConsumerName(getConsumerName_cb _hidl_cb) override;
88 Return<Status> setSharedBufferMode(bool sharedBufferMode) override;
89 Return<Status> setAutoRefresh(bool autoRefresh) override;
90 Return<Status> setDequeueTimeout(int64_t timeoutNs) override;
91 Return<void> getLastQueuedBuffer(getLastQueuedBuffer_cb _hidl_cb) override;
92 Return<void> getFrameTimestamps(getFrameTimestamps_cb _hidl_cb) override;
93 Return<void> getUniqueId(getUniqueId_cb _hidl_cb) override;
94};
95
Pawin Vongmasa8ff40182017-02-07 02:22:34 -080096struct LWOmxBufferProducer : public BnGraphicBufferProducer {
Pawin Vongmasaeeac97b2017-01-18 05:03:07 -080097 sp<IOmxBufferProducer> mBase;
98 LWOmxBufferProducer(sp<IOmxBufferProducer> const& base);
99
100 status_t requestBuffer(int slot, sp<GraphicBuffer>* buf) override;
101 status_t setMaxDequeuedBufferCount(int maxDequeuedBuffers) override;
102 status_t setAsyncMode(bool async) override;
103 status_t dequeueBuffer(int* slot, sp<Fence>* fence, uint32_t w,
104 uint32_t h, ::android::PixelFormat format, uint32_t usage,
105 FrameEventHistoryDelta* outTimestamps) override;
106 status_t detachBuffer(int slot) override;
107 status_t detachNextBuffer(sp<GraphicBuffer>* outBuffer, sp<Fence>* outFence)
108 override;
109 status_t attachBuffer(int* outSlot, const sp<GraphicBuffer>& buffer)
110 override;
111 status_t queueBuffer(int slot,
112 const QueueBufferInput& input,
113 QueueBufferOutput* output) override;
114 status_t cancelBuffer(int slot, const sp<Fence>& fence) override;
115 int query(int what, int* value) override;
116 status_t connect(const sp<IProducerListener>& listener, int api,
117 bool producerControlledByApp, QueueBufferOutput* output) override;
118 status_t disconnect(int api, DisconnectMode mode = DisconnectMode::Api)
119 override;
120 status_t setSidebandStream(const sp<NativeHandle>& stream) override;
121 void allocateBuffers(uint32_t width, uint32_t height,
122 ::android::PixelFormat format, uint32_t usage) override;
123 status_t allowAllocation(bool allow) override;
124 status_t setGenerationNumber(uint32_t generationNumber) override;
125 String8 getConsumerName() const override;
126 status_t setSharedBufferMode(bool sharedBufferMode) override;
127 status_t setAutoRefresh(bool autoRefresh) override;
128 status_t setDequeueTimeout(nsecs_t timeout) override;
129 status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
130 sp<Fence>* outFence, float outTransformMatrix[16]) override;
131 void getFrameTimestamps(FrameEventHistoryDelta* outDelta) override;
132 status_t getUniqueId(uint64_t* outId) const override;
Pawin Vongmasaeeac97b2017-01-18 05:03:07 -0800133};
134
135} // namespace utils
136} // namespace V1_0
137} // namespace omx
138} // namespace media
139} // namespace hardware
140} // namespace android
141
142#endif // ANDROID_HARDWARE_MEDIA_OMX_V1_0_WOMXBUFFERPRODUCER_H