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_PLUGIN_COMMON_BUFFER_H 17#define HISTREAMER_PLUGIN_COMMON_BUFFER_H 18 19#include <memory> 20#include <map> 21#include <vector> 22 23#include "plugin_memory.h" 24#if !defined(OHOS_LITE) && defined(VIDEO_SUPPORT) 25#include "refbase.h" 26#include "surface/surface.h" 27#endif 28 29namespace OHOS { 30namespace Media { 31namespace Plugins { 32 33// Align value template 34template <typename T> 35using MakeUnsigned = typename std::make_unsigned<T>::type; 36 37template <typename T, typename U> 38constexpr T AlignUp(T num, U alignment) 39{ 40 return (alignment > 0) ? (static_cast<uint64_t>((num + static_cast<MakeUnsigned<T>>(alignment) - 1)) & 41 static_cast<uint64_t>((~(static_cast<MakeUnsigned<T>>(alignment) - 1)))) : 42 num; 43} 44 45/** 46* @brief Buffer base class. 47* Contains the data storage of the buffer (buffer description information). 48* 49* @since 1.0 50* @version 1.0 51*/ 52class Buffer { 53public: 54 /// Construct an empty buffer. 55 explicit Buffer(); 56 57 /// Destructor 58 ~Buffer() = default; 59 60 static std::shared_ptr<Buffer> CreateDefaultBuffer(size_t capacity, std::shared_ptr<Allocator> allocator = nullptr, 61 size_t align = 1); 62 63 std::shared_ptr<Memory> WrapMemory(uint8_t* data, size_t capacity, size_t size); 64 65 std::shared_ptr<Memory> WrapMemoryPtr(std::shared_ptr<uint8_t> data, size_t capacity, size_t size); 66 67 std::shared_ptr<Memory> AllocMemory(std::shared_ptr<Allocator> allocator, size_t capacity, size_t align = 1); 68 69#if !defined(OHOS_LITE) && defined(VIDEO_SUPPORT) 70 std::shared_ptr<Memory> WrapSurfaceMemory(sptr<SurfaceBuffer> surfaceBuffer); 71#endif 72 73 uint32_t GetMemoryCount(); 74 75 std::shared_ptr<Memory> GetMemory(uint32_t index = 0); 76 77 void Reset(); 78 79 /// no memory in the buffer. 80 bool IsEmpty(); 81 82 /// next buffer stream index(dash) 83 int32_t streamID; 84 85 /// track index. 86 uint32_t trackID; 87 88 /// presentation timestamp of the buffer based on {@link HST_TIME_BASE}. 89 int64_t pts; 90 91 /// decoding timestamp of the buffer based on {@link HST_TIME_BASE}. 92 int64_t dts; 93 94 /// duration in time of the buffer data based on {@link HST_TIME_BASE}. 95 int64_t duration; 96 97 /// flag of the buffer, which is used to record extra information. 98 /// @see BUFFER_FLAG_EOS 99 uint64_t flag; 100 101private: 102 /// Data described by this buffer. 103 std::vector<std::shared_ptr<Memory>> data {}; 104}; 105} // namespace Plugins 106} // namespace Media 107} // namespace OHOS 108#endif // HISTREAMER_PLUGIN_COMMON_BUFFER_H 109