1 /* 2 * Copyright (c) 2022-2022 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 MEDIA_DATA_STREAM 17 #define MEDIA_DATA_STREAM 18 19 #include <memory> 20 21 namespace OHOS { 22 namespace Media { 23 /** 24 * @enum MemoryType 25 * 26 * @since 1.0 27 * @version 1.0 28 */ 29 enum class MemoryType { 30 VIRTUAL_ADDR = 0, ///< Virtual address 31 SURFACE_BUFFER, ///< Surface 32 SHARE_MEMORY, ///< Share Memory fd 33 }; 34 35 /** 36 * @brief Data buffer, contains the data. 37 * 38 * @since 1.0 39 * @version 1.0 40 */ 41 class DataBuffer { 42 public: 43 virtual ~DataBuffer() = default; 44 45 /** 46 * @brief Get the EOS status. 47 * 48 * @return Returns the EOS status, true if this is the end of steam. 49 * @since 1.0 50 * @version 1.0 51 */ 52 virtual bool IsEos() = 0; 53 54 /** 55 * @brief Set the EOS status. 56 * 57 * @since 1.0 58 * @version 1.0 59 */ 60 virtual void SetEos(bool isEos) = 0; 61 62 /** 63 * @brief Get the buffer address. 64 * 65 * @since 1.0 66 * @version 1.0 67 */ 68 virtual uint8_t* GetAddress() = 0; 69 70 /** 71 * @brief Get the buffer capacity. 72 * 73 * @since 1.0 74 * @version 1.0 75 */ 76 virtual size_t GetCapacity() = 0; 77 78 /** 79 * @brief Get the size of the valid data in this data buffer. 80 * 81 * @since 1.0 82 * @version 1.0 83 */ 84 virtual size_t GetSize() = 0; 85 86 /** 87 * @brief Set the size of the valid data in this data buffer. 88 * 89 * @param size Indicates the size of the valid data. 90 * @since 1.0 91 * @version 1.0 92 */ 93 virtual void SetSize(size_t size) = 0; 94 }; 95 96 /** 97 * @brief Data producer uses this interface to produce data. 98 * 99 * @since 1.0 100 * @version 1.0 101 */ 102 class DataProducer { 103 public: 104 virtual ~DataProducer() = default; 105 106 /** 107 * @brief Get empty buffer. 108 * 109 * @param buffer Out parameter to obtain the buffer. 110 * @param timeout Indicates how much time (millisecond) to wait, default -1 means wait until buffer obtained. 111 * @since 1.0 112 * @version 1.0 113 */ 114 virtual bool GetEmptyBuffer(std::shared_ptr<DataBuffer>& buffer, int timeout = -1) = 0; 115 116 /** 117 * @brief Queue data buffer. 118 * 119 * @param buffer the buffer contains data. 120 * @since 1.0 121 * @version 1.0 122 */ 123 virtual bool QueueDataBuffer(const std::shared_ptr<DataBuffer>& buffer) = 0; 124 }; 125 126 /** 127 * @brief Data consumer uses this interface to consume data. 128 * 129 * @since 1.0 130 * @version 1.0 131 */ 132 class DataConsumer { 133 public: 134 virtual ~DataConsumer() = default; 135 136 /** 137 * @brief Get data buffer. 138 * 139 * @param buffer Out parameter to obtain the buffer contains data. 140 * @param timeout Indicates how much time (millisecond) to wait, default -1 means wait until data buffer obtained. 141 * @since 1.0 142 * @version 1.0 143 */ 144 virtual bool GetDataBuffer(std::shared_ptr<DataBuffer>& buffer, int timeout = -1) = 0; 145 146 /** 147 * @brief Use the shared_ptr of buffer to queue empty buffer to data stream. 148 * 149 * @param buffer Indicates the shared_ptr of the empty buffer. 150 * @since 1.0 151 * @version 1.0 152 */ 153 virtual bool QueueEmptyBuffer(const std::shared_ptr<DataBuffer>& buffer) = 0; 154 155 /** 156 * @brief Use the buffer address to queue empty buffer to data stream. 157 * 158 * @param address Indicates the address of the empty buffer. 159 * @since 1.0 160 * @version 1.0 161 */ 162 virtual bool QueueEmptyBuffer(uint8_t* address) = 0; 163 }; 164 165 /** 166 * @brief Data stream, extends DataConsumer and DataProducer. 167 * 168 * @since 1.0 169 * @version 1.0 170 */ 171 class DataStream : public DataConsumer, public DataProducer { 172 }; 173 174 /** 175 * @brief The factory function to create {@link DataStream}. 176 * 177 * @param size Indicates the size of each buffer. 178 * @param count Indicates the count of buffers. 179 * @param type Indicates the memory type, default is virtual address. 180 * @since 1.0 181 * @version 1.0 182 */ 183 std::shared_ptr<DataStream> CreateDataStream(size_t size, size_t count, MemoryType type = MemoryType::VIRTUAL_ADDR); 184 } // Media 185 } // OHOS 186 #endif // MEDIA_DATA_STREAM 187