From a24b8e332eb1e6bf74ed691b7b6d4c13b4bfbb8b Mon Sep 17 00:00:00 2001 From: Fernando Cladera Date: Wed, 8 Feb 2023 23:34:34 -0500 Subject: [PATCH 1/2] events type is bytes, not bytearray --- src/decoder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/decoder.cpp b/src/decoder.cpp index 5d1fbcc..7f1fcdf 100644 --- a/src/decoder.cpp +++ b/src/decoder.cpp @@ -32,7 +32,7 @@ void Decoder::decode_bytes( if (decoder) { decoder->setTimeBase(timeBase); decoder->setTimeMultiplier(1); // report in usecs instead of nanoseconds - const size_t bufSize = PyByteArray_GET_SIZE(events.ptr()); + const size_t bufSize = PyBytes_Size(events.ptr()); // for some reason this returns a bad pointer // const uint8_t *buf = reinterpret_cast(PyByteArray_AsString(events.ptr())); // TODO(Bernd): avoid the memory copy here From bde324316f84f0c72cfd265014b4025a28b214a3 Mon Sep 17 00:00:00 2001 From: Fernando Cladera Date: Thu, 9 Feb 2023 13:25:10 -0500 Subject: [PATCH 2/2] Avoid unnecessary copy of events in Decoder::decode_bytes, suggested by Bernd --- src/decoder.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/decoder.cpp b/src/decoder.cpp index 7f1fcdf..85445c5 100644 --- a/src/decoder.cpp +++ b/src/decoder.cpp @@ -32,11 +32,6 @@ void Decoder::decode_bytes( if (decoder) { decoder->setTimeBase(timeBase); decoder->setTimeMultiplier(1); // report in usecs instead of nanoseconds - const size_t bufSize = PyBytes_Size(events.ptr()); - // for some reason this returns a bad pointer - // const uint8_t *buf = reinterpret_cast(PyByteArray_AsString(events.ptr())); - // TODO(Bernd): avoid the memory copy here - const std::string foo(events); // creates unnecessary copy! delete cdEvents_; // in case events have not been picked up cdEvents_ = new std::vector(); delete extTrigEvents_; // in case events have not been picked up @@ -44,8 +39,8 @@ void Decoder::decode_bytes( // TODO(Bernd): use hack here to avoid initializing the memory cdEvents_->reserve(maxSizeCD_); extTrigEvents_->reserve(maxSizeExtTrig_); - const uint8_t * buf = reinterpret_cast(&foo[0]); - decoder->decode(buf, bufSize, this); + const uint8_t * buf = reinterpret_cast(PyBytes_AsString(events.ptr())); + decoder->decode(buf, PyBytes_Size(events.ptr()), this); } }