|  | /* | 
|  | * 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::setFrameRate| | 
|  | status_t setFrameRate(float frameRate) override; | 
|  |  | 
|  | // See |IGraphicBufferConsumer::getFrameRate| | 
|  | status_t getFrameRate(float* frameRate) const 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_ |