diff options
| -rw-r--r-- | src/input/Zmq.cpp | 22 | ||||
| -rw-r--r-- | src/input/Zmq.h | 3 | 
2 files changed, 13 insertions, 12 deletions
diff --git a/src/input/Zmq.cpp b/src/input/Zmq.cpp index 0a9d59d..603f514 100644 --- a/src/input/Zmq.cpp +++ b/src/input/Zmq.cpp @@ -268,7 +268,6 @@ size_t ZmqBase::readFrame(uint8_t* buffer, size_t size)              size_t over_max = m_frame_buffer.size() - m_config.prebuffering;              while (over_max--) { -                delete[] m_frame_buffer.front();                  m_frame_buffer.pop_front();              }          } @@ -288,7 +287,6 @@ size_t ZmqBase::readFrame(uint8_t* buffer, size_t size)               *       frames even though we could drop less.               * */              for (int frame_del_count = 0; frame_del_count < 5; frame_del_count++) { -                delete[] m_frame_buffer.front();                  m_frame_buffer.pop_front();              }          } @@ -323,9 +321,11 @@ size_t ZmqBase::readFrame(uint8_t* buffer, size_t size)      }      else {          /* Normal situation, give a frame from the frame_buffer */ -        uint8_t* newframe = m_frame_buffer.front(); -        memcpy(buffer, newframe, size); -        delete[] newframe; +        auto& newframe = m_frame_buffer.front(); +        if (newframe.size() != size) { +            throw logic_error("Inconsistent ZMQ sizes"); +        } +        memcpy(buffer, newframe.data(), newframe.size());          m_frame_buffer.pop_front();          return size;      } @@ -388,9 +388,9 @@ int ZmqMPEG::readFromSocket(size_t framesize)          }          else if (m_enable_input) {              // copy the input frame blockwise into the frame_buffer -            auto framedata = new uint8_t[framesize]; -            memcpy(framedata, data, framesize); -            m_frame_buffer.push_back(framedata); +            vector<uint8_t> framedata(framesize); +            copy(data, data + framesize, framedata.begin()); +            m_frame_buffer.push_back(move(framedata));          }          else {              return 0; @@ -466,9 +466,9 @@ int ZmqAAC::readFromSocket(size_t framesize)                  for (uint8_t* framestart = data;                          framestart < &data[5*framesize];                          framestart += framesize) { -                    auto audioframe = new uint8_t[framesize]; -                    memcpy(audioframe, framestart, framesize); -                    m_frame_buffer.push_back(audioframe); +                    vector<uint8_t> audioframe(framesize); +                    copy(framestart, framestart + framesize, audioframe.begin()); +                    m_frame_buffer.push_back(move(audioframe));                  }              }              else { diff --git a/src/input/Zmq.h b/src/input/Zmq.h index 2e37b5f..f4992f1 100644 --- a/src/input/Zmq.h +++ b/src/input/Zmq.h @@ -45,6 +45,7 @@  #include <list>  #include <string> +#include <vector>  #include <cstdint>  #include "zmq.hpp"  #include "input/inputs.h" @@ -212,7 +213,7 @@ class ZmqBase : public InputBase, public RemoteControllable {          bool m_enable_input;          /* stores elements of type char[<superframesize>] */ -        std::list<uint8_t*> m_frame_buffer; +        std::list<std::vector<uint8_t> > m_frame_buffer;          dab_input_zmq_config_t m_config;  | 
