1fa7767c5Sopenharmony_ci/* 2fa7767c5Sopenharmony_ci * Copyright (c) 2022-2022 Huawei Device Co., Ltd. 3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License. 5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at 6fa7767c5Sopenharmony_ci * 7fa7767c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fa7767c5Sopenharmony_ci * 9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and 13fa7767c5Sopenharmony_ci * limitations under the License. 14fa7767c5Sopenharmony_ci */ 15fa7767c5Sopenharmony_ci 16fa7767c5Sopenharmony_ci#ifndef MEDIA_DATA_STREAM_IMPL 17fa7767c5Sopenharmony_ci#define MEDIA_DATA_STREAM_IMPL 18fa7767c5Sopenharmony_ci 19fa7767c5Sopenharmony_ci#include <queue> 20fa7767c5Sopenharmony_ci#include <vector> 21fa7767c5Sopenharmony_ci#include "data_stream.h" 22fa7767c5Sopenharmony_ci#include "foundation/osal/thread/condition_variable.h" 23fa7767c5Sopenharmony_ci#include "foundation/osal/thread/mutex.h" 24fa7767c5Sopenharmony_ci 25fa7767c5Sopenharmony_cinamespace OHOS { 26fa7767c5Sopenharmony_cinamespace Media { 27fa7767c5Sopenharmony_ciclass DataStreamImpl : public DataStream { 28fa7767c5Sopenharmony_cipublic: 29fa7767c5Sopenharmony_ci DataStreamImpl(size_t size, size_t count, MemoryType type); 30fa7767c5Sopenharmony_ci bool GetDataBuffer(std::shared_ptr<DataBuffer>& buffer, int timeout) override; 31fa7767c5Sopenharmony_ci bool QueueEmptyBuffer(const std::shared_ptr<DataBuffer>& buffer) override; 32fa7767c5Sopenharmony_ci bool QueueEmptyBuffer(uint8_t* address) override; 33fa7767c5Sopenharmony_ci 34fa7767c5Sopenharmony_ci bool GetEmptyBuffer(std::shared_ptr<DataBuffer>& buffer, int timeout) override; 35fa7767c5Sopenharmony_ci bool QueueDataBuffer(const std::shared_ptr<DataBuffer>& buffer) override; 36fa7767c5Sopenharmony_ci 37fa7767c5Sopenharmony_ciprivate: 38fa7767c5Sopenharmony_ci OSAL::Mutex emptyMutex_ {}; 39fa7767c5Sopenharmony_ci OSAL::Mutex dataMutex_ {}; 40fa7767c5Sopenharmony_ci OSAL::ConditionVariable emptyCondition_ {}; 41fa7767c5Sopenharmony_ci OSAL::ConditionVariable dataCondition_ {}; 42fa7767c5Sopenharmony_ci std::queue<std::shared_ptr<DataBuffer>> emptyBuffers_ {}; 43fa7767c5Sopenharmony_ci std::queue<std::shared_ptr<DataBuffer>> dataBuffers_ {}; 44fa7767c5Sopenharmony_ci std::vector<std::shared_ptr<DataBuffer>> allBuffers_ {}; // keep all buffers 45fa7767c5Sopenharmony_ci}; 46fa7767c5Sopenharmony_ci 47fa7767c5Sopenharmony_ciclass VirtualDataBuffer : public DataBuffer { 48fa7767c5Sopenharmony_cipublic: 49fa7767c5Sopenharmony_ci explicit VirtualDataBuffer(size_t capacity); 50fa7767c5Sopenharmony_ci ~VirtualDataBuffer() override; 51fa7767c5Sopenharmony_ci bool IsEos() override; 52fa7767c5Sopenharmony_ci void SetEos(bool isEos) override; 53fa7767c5Sopenharmony_ci uint8_t* GetAddress() override; 54fa7767c5Sopenharmony_ci size_t GetCapacity() override; 55fa7767c5Sopenharmony_ci size_t GetSize() override; 56fa7767c5Sopenharmony_ci void SetSize(size_t size) override; 57fa7767c5Sopenharmony_ci 58fa7767c5Sopenharmony_ciprivate: 59fa7767c5Sopenharmony_ci bool isEos_ {false}; 60fa7767c5Sopenharmony_ci uint8_t* address_ {nullptr}; 61fa7767c5Sopenharmony_ci size_t capacity_ {0}; 62fa7767c5Sopenharmony_ci size_t size_ {0}; 63fa7767c5Sopenharmony_ci}; 64fa7767c5Sopenharmony_ci} // Media 65fa7767c5Sopenharmony_ci} // OHOS 66fa7767c5Sopenharmony_ci#endif // MEDIA_DATA_STREAM_IMPL 67