1 /* 2 * Copyright (c) 2021-2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef HISTREAMER_FOUNDATION_AVBUFFER_QUEUE_PRODUCER_IMPL_H 17 #define HISTREAMER_FOUNDATION_AVBUFFER_QUEUE_PRODUCER_IMPL_H 18 19 #include "avbuffer_queue_impl.h" 20 21 namespace OHOS { 22 namespace Media { 23 24 class AVBufferQueueProducerStub : public IRemoteStub<AVBufferQueueProducer> { 25 public: 26 AVBufferQueueProducerStub(); 27 ~AVBufferQueueProducerStub() override = default; 28 29 int OnRemoteRequest(uint32_t code, MessageParcel &arguments, MessageParcel &reply, MessageOption &option) override; 30 31 uint32_t GetQueueSize() override = 0; 32 Status SetQueueSize(uint32_t size) override = 0; 33 34 Status RequestBuffer(std::shared_ptr<AVBuffer>& outBuffer, 35 const AVBufferConfig& config, int32_t timeoutMs) override = 0; 36 Status PushBuffer(const std::shared_ptr<AVBuffer>& inBuffer, bool available) override = 0; 37 Status ReturnBuffer(const std::shared_ptr<AVBuffer>& inBuffer, bool available) override = 0; 38 39 Status AttachBuffer(std::shared_ptr<AVBuffer>& inBuffer, bool isFilled) override = 0; 40 Status DetachBuffer(const std::shared_ptr<AVBuffer>& outBuffer) override = 0; 41 42 Status SetBufferFilledListener(sptr<IBrokerListener>& listener) override = 0; 43 Status RemoveBufferFilledListener(sptr<IBrokerListener>& listener) override = 0; 44 Status SetBufferAvailableListener(sptr<IProducerListener>& listener) override = 0; 45 Status Clear() override = 0; 46 virtual Status PushBuffer(uint64_t uniqueId, bool available) = 0; 47 virtual Status ReturnBuffer(uint64_t uniqueId, bool available) = 0; 48 virtual Status DetachBuffer(uint64_t uniqueId) = 0; 49 50 private: 51 using StubFunc = int32_t (AVBufferQueueProducerStub::*)(MessageParcel&, MessageParcel&, MessageOption&); 52 53 std::map<uint32_t, StubFunc> stubFuncMap_; 54 55 int32_t OnGetQueueSize(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 56 int32_t OnSetQueueSize(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 57 58 int32_t OnRequestBuffer(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 59 int32_t OnPushBuffer(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 60 int32_t OnReturnBuffer(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 61 62 int32_t OnAttachBuffer(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 63 int32_t OnDetachBuffer(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 64 65 int32_t OnSetBufferFilledListener(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 66 int32_t OnRemoveBufferFilledListener(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 67 int32_t OnSetBufferAvailableListener(MessageParcel& arguments, MessageParcel& reply, MessageOption& option); 68 }; 69 70 class AVBufferQueueProducerImpl : public AVBufferQueueProducerStub { 71 public: 72 explicit AVBufferQueueProducerImpl(std::shared_ptr<AVBufferQueueImpl>& bufferQueue); 73 ~AVBufferQueueProducerImpl() override = default; 74 AVBufferQueueProducerImpl(const AVBufferQueueProducerImpl&) = delete; 75 AVBufferQueueProducerImpl operator= (const AVBufferQueueProducerImpl&) = delete; 76 77 uint32_t GetQueueSize() override; 78 Status SetQueueSize(uint32_t size) override; 79 80 Status RequestBuffer(std::shared_ptr<AVBuffer>& buffer, 81 const AVBufferConfig& config, int32_t timeoutMs) override; 82 Status RequestBufferWaitUs(std::shared_ptr<AVBuffer>& buffer, 83 const AVBufferConfig& config, int64_t timeoutUs) override; 84 Status PushBuffer(const std::shared_ptr<AVBuffer>& buffer, bool available) override; 85 Status ReturnBuffer(const std::shared_ptr<AVBuffer>& buffer, bool available) override; 86 87 Status AttachBuffer(std::shared_ptr<AVBuffer>& buffer, bool isFilled) override; 88 Status DetachBuffer(const std::shared_ptr<AVBuffer>& buffer) override; 89 90 Status SetBufferFilledListener(sptr<IBrokerListener>& listener) override; 91 Status RemoveBufferFilledListener(sptr<IBrokerListener>& listener) override; 92 Status SetBufferAvailableListener(sptr<IProducerListener>& listener) override; 93 Status Clear() override; 94 Status ClearBufferIf(std::function<bool(const std::shared_ptr<AVBuffer> &)> pred) override; 95 protected: 96 std::shared_ptr<AVBufferQueueImpl> bufferQueue_; 97 98 Status PushBuffer(uint64_t uniqueId, bool available) override; 99 Status ReturnBuffer(uint64_t uniqueId, bool available) override; 100 Status DetachBuffer(uint64_t uniqueId) override; 101 }; 102 103 } // namespace Media 104 } // namespace OHOS 105 106 #endif // HISTREAMER_FOUNDATION_AVBUFFER_QUEUE_PRODUCER_IMPL_H 107