| /* |
| * Copyright 2018 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef ANDROID_GUI_BUFFERHUBCONSUMER_H_ |
| #define ANDROID_GUI_BUFFERHUBCONSUMER_H_ |
| |
| #include <gui/IGraphicBufferConsumer.h> |
| #include <private/dvr/buffer_hub_queue_client.h> |
| #include <private/dvr/buffer_hub_queue_parcelable.h> |
| |
| namespace android { |
| |
| class BufferHubConsumer : public IGraphicBufferConsumer { |
| public: |
| // Creates a BufferHubConsumer instance by importing an existing producer queue. |
| static sp<BufferHubConsumer> Create(const std::shared_ptr<dvr::ConsumerQueue>& queue); |
| |
| // Creates a BufferHubConsumer instance by importing an existing producer |
| // parcelable. Note that this call takes the ownership of the parcelable |
| // object and is guaranteed to succeed if parcelable object is valid. |
| static sp<BufferHubConsumer> Create(dvr::ConsumerQueueParcelable parcelable); |
| |
| // See |IGraphicBufferConsumer::acquireBuffer| |
| status_t acquireBuffer(BufferItem* buffer, nsecs_t presentWhen, |
| uint64_t maxFrameNumber = 0) override; |
| |
| // See |IGraphicBufferConsumer::detachBuffer| |
| status_t detachBuffer(int slot) override; |
| |
| // See |IGraphicBufferConsumer::attachBuffer| |
| status_t attachBuffer(int* outSlot, const sp<GraphicBuffer>& buffer) override; |
| |
| // See |IGraphicBufferConsumer::releaseBuffer| |
| status_t releaseBuffer(int buf, uint64_t frameNumber, EGLDisplay display, EGLSyncKHR fence, |
| const sp<Fence>& releaseFence) override; |
| |
| // See |IGraphicBufferConsumer::consumerConnect| |
| status_t consumerConnect(const sp<IConsumerListener>& consumer, bool controlledByApp) override; |
| |
| // See |IGraphicBufferConsumer::consumerDisconnect| |
| status_t consumerDisconnect() override; |
| |
| // See |IGraphicBufferConsumer::getReleasedBuffers| |
| status_t getReleasedBuffers(uint64_t* slotMask) override; |
| |
| // See |IGraphicBufferConsumer::setDefaultBufferSize| |
| status_t setDefaultBufferSize(uint32_t w, uint32_t h) override; |
| |
| // See |IGraphicBufferConsumer::setMaxBufferCount| |
| status_t setMaxBufferCount(int bufferCount) override; |
| |
| // See |IGraphicBufferConsumer::setMaxAcquiredBufferCount| |
| status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) override; |
| |
| // See |IGraphicBufferConsumer::setConsumerName| |
| status_t setConsumerName(const String8& name) override; |
| |
| // See |IGraphicBufferConsumer::setDefaultBufferFormat| |
| status_t setDefaultBufferFormat(PixelFormat defaultFormat) override; |
| |
| // See |IGraphicBufferConsumer::setDefaultBufferDataSpace| |
| status_t setDefaultBufferDataSpace(android_dataspace defaultDataSpace) override; |
| |
| // See |IGraphicBufferConsumer::setConsumerUsageBits| |
| status_t setConsumerUsageBits(uint64_t usage) override; |
| |
| // See |IGraphicBufferConsumer::setConsumerIsProtected| |
| status_t setConsumerIsProtected(bool isProtected) override; |
| |
| // See |IGraphicBufferConsumer::setTransformHint| |
| status_t setTransformHint(uint32_t hint) override; |
| |
| // See |IGraphicBufferConsumer::getSidebandStream| |
| status_t getSidebandStream(sp<NativeHandle>* outStream) const override; |
| |
| // See |IGraphicBufferConsumer::getOccupancyHistory| |
| status_t getOccupancyHistory(bool forceFlush, |
| std::vector<OccupancyTracker::Segment>* outHistory) override; |
| |
| // See |IGraphicBufferConsumer::discardFreeBuffers| |
| status_t discardFreeBuffers() override; |
| |
| // See |IGraphicBufferConsumer::dumpState| |
| status_t dumpState(const String8& prefix, String8* outResult) const override; |
| |
| // BufferHubConsumer provides its own logic to cast to a binder object. |
| IBinder* onAsBinder() override; |
| |
| private: |
| // Private constructor to force use of |Create|. |
| BufferHubConsumer() = default; |
| |
| // Concrete implementation backed by BufferHubBuffer. |
| std::shared_ptr<dvr::ConsumerQueue> mQueue; |
| }; |
| |
| } // namespace android |
| |
| #endif // ANDROID_GUI_BUFFERHUBCONSUMER_H_ |