diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/InputReader.h | 6 | ||||
| -rw-r--r-- | src/InputZeroMQReader.cpp | 16 | 
2 files changed, 10 insertions, 12 deletions
diff --git a/src/InputReader.h b/src/InputReader.h index 13d49b8..6156c94 100644 --- a/src/InputReader.h +++ b/src/InputReader.h @@ -31,6 +31,8 @@  #endif  #include <cstdio> +#include <vector> +#include <boost/shared_ptr.hpp>  #if defined(HAVE_ZEROMQ)  #  include "zmq.hpp"  #  include "ThreadsafeQueue.h" @@ -143,7 +145,7 @@ struct zmq_input_overflow : public std::exception  struct InputZeroMQThreadData  { -    ThreadsafeQueue<uint8_t*> *in_messages; +    ThreadsafeQueue<boost::shared_ptr<std::vector<uint8_t> > > *in_messages;      std::string uri;      unsigned max_queued_frames; @@ -203,7 +205,7 @@ class InputZeroMQReader : public InputReader          std::string uri_;          InputZeroMQWorker worker_; -        ThreadsafeQueue<uint8_t*> in_messages_; +        ThreadsafeQueue<boost::shared_ptr<std::vector<uint8_t> > > in_messages_;          struct InputZeroMQThreadData workerdata_;  }; diff --git a/src/InputZeroMQReader.cpp b/src/InputZeroMQReader.cpp index 683968f..eb50669 100644 --- a/src/InputZeroMQReader.cpp +++ b/src/InputZeroMQReader.cpp @@ -37,6 +37,7 @@  #include <stdint.h>  #include "zmq.hpp"  #include <boost/thread/thread.hpp> +#include <boost/make_shared.hpp>  #include "porting.h"  #include "InputReader.h"  #include "PcDebug.h" @@ -84,16 +85,14 @@ int InputZeroMQReader::GetNextFrame(void* buffer)  {      const size_t framesize = 6144; -    uint8_t* incoming; +    boost::shared_ptr<std::vector<uint8_t> > incoming;      in_messages_.wait_and_pop(incoming);      if (! workerdata_.running) {          throw zmq_input_overflow();      } -    memcpy(buffer, incoming, framesize); - -    delete[] incoming; +    memcpy(buffer, &incoming->front(), framesize);      return framesize;  } @@ -160,18 +159,15 @@ void InputZeroMQWorker::RecvProcess(struct InputZeroMQThreadData* workerdata)                          // TODO error handling                      }                      else { -                        uint8_t* buf = new uint8_t[6144]; +                        boost::shared_ptr<std::vector<uint8_t> > buf = +                            boost::make_shared<std::vector<uint8_t> >(6144, 0x55);                          const int framesize = dab_msg->buflen[i]; -                        memcpy(buf, +                        memcpy(&buf->front(),                                  ((uint8_t*)incoming.data()) + offset,                                  framesize); -                        // pad to 6144 bytes -                        memset(&((uint8_t*)buf)[framesize], -                                0x55, 6144 - framesize); -                          offset += framesize;                          queue_size = workerdata->in_messages->push(buf);  | 
