diff --git a/src/AudioTools/AudioStreams.h b/src/AudioTools/AudioStreams.h index cec689e1b7..6e0ae07dc3 100644 --- a/src/AudioTools/AudioStreams.h +++ b/src/AudioTools/AudioStreams.h @@ -15,74 +15,6 @@ namespace audio_tools { -/** - * @brief Base class for all Audio Streams. It support the boolean operator to - * test if the object is ready with data - * @author Phil Schatzmann - * @copyright GPLv3 - */ -class AudioStream : public BaseStream, public AudioInfoSupport, public AudioInfoSource { - public: - AudioStream() = default; - virtual ~AudioStream() = default; - AudioStream(AudioStream const&) = delete; - AudioStream& operator=(AudioStream const&) = delete; - - // Call from subclass or overwrite to do something useful - virtual void setAudioInfo(AudioInfo newInfo) override { - TRACED(); - - if (info != newInfo){ - info = newInfo; - info.logInfo("in:"); - } - // replicate information - AudioInfo out_new = audioInfoOut(); - if (out_new) { - out_new.logInfo("out:"); - notifyAudioChange(out_new); - } - - } - - virtual size_t readBytes(uint8_t *buffer, size_t length) override { return not_supported(0, "readBytes"); } - - virtual size_t write(const uint8_t *buffer, size_t size) override{ return not_supported(0,"write"); } - - - virtual operator bool() { return info && available() > 0; } - - virtual AudioInfo audioInfo() override { - return info; - } - - - /// Writes len bytes of silence (=0). - virtual void writeSilence(size_t len){ - int16_t zero = 0; - for (int j=0;j 0; } + + virtual AudioInfo audioInfo() override { + return info; + } + + + /// Writes len bytes of silence (=0). + virtual void writeSilence(size_t len){ + int16_t zero = 0; + for (int j=0;j using CallbackBufferedStream = QueueStream; +struct DataNode { + size_t len=0; + Vector data{0}; + + DataNode() = default; + /// Constructor + DataNode(void*inData, int len){ + this->len = len; + this->data.resize(len); + memcpy(&data[0], inData, len); + } +}; + /** * @brief MemoryStream which is written and read using the internal RAM. For each write the data is allocated * on the heap. @@ -331,26 +413,6 @@ using CallbackBufferedStream = QueueStream; */ class DynamicMemoryStream : public BaseStream { public: - struct DataNode { - size_t len=0; - uint8_t* data=nullptr; - - DataNode() = default; - /// Constructor - DataNode(void*inData, int len){ - this->len = len; - this->data = (uint8_t*) malloc(len); - assert(this->data!=nullptr); - memcpy(this->data, inData, len); - } - - ~DataNode(){ - if (data!=nullptr) { - free(data); - data = nullptr; - } - } - }; DynamicMemoryStream() = default; @@ -412,7 +474,7 @@ class DynamicMemoryStream : public BaseStream { virtual size_t write(const uint8_t *buffer, size_t size) override { DataNode *p_node = new DataNode((void*)buffer, size); - if (p_node->data!=nullptr){ + if (p_node->data){ alloc_failed = false; total_available += size; audio_list.push_back(p_node); @@ -461,10 +523,10 @@ class DynamicMemoryStream : public BaseStream { // provide data from next node DataNode *p_node = *it; int result_len = min(length, (size_t) p_node->len); - memcpy(buffer, p_node->data, result_len); + memcpy(buffer, &p_node->data[0], result_len); // save unprocessed data to temp buffer if (p_node->len>length){ - uint8_t *start = p_node->data+result_len; + uint8_t *start = &p_node->data[result_len]; int uprocessed_len = p_node->len - length; temp_audio.writeArray(start, uprocessed_len); }