Mercurial > hg > piper-cpp
changeset 87:7a77a374b6b2
Fix decoding error due to misaligned array
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Wed, 12 Oct 2016 17:47:59 +0100 |
parents | 5a80e00375b1 |
children | bf2e6f939f9f |
files | vamp-client/Makefile vamp-client/client.cpp |
diffstat | 2 files changed, 63 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/vamp-client/Makefile Wed Oct 12 12:51:33 2016 +0100 +++ b/vamp-client/Makefile Wed Oct 12 17:47:59 2016 +0100 @@ -3,7 +3,7 @@ # Generated by qmake (3.0) (Qt 5.7.0) # Project: client.pro # Template: app -# Command: /usr/bin/qmake -o Makefile client.pro +# Command: /usr/lib/qt/bin/qmake -o Makefile client.pro ############################################################################# MAKEFILE = Makefile @@ -16,7 +16,7 @@ CFLAGS = -pipe -O2 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -Wall -W -D_REENTRANT -fPIC $(DEFINES) CXXFLAGS = -I../../vamp-plugin-sdk -I.. -O2 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $(DEFINES) INCPATH = -I. -isystem /usr/include/qt -isystem /usr/include/qt/QtCore -I../o -I/usr/lib/qt/mkspecs/linux-g++ -QMAKE = /usr/bin/qmake +QMAKE = /usr/lib/qt/bin/qmake DEL_FILE = rm -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p @@ -76,6 +76,9 @@ /usr/lib/qt/mkspecs/modules/qt_KCrash.pri \ /usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \ /usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \ + /usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \ /usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \ /usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \ /usr/lib/qt/mkspecs/modules/qt_KI18n.pri \ @@ -84,18 +87,22 @@ /usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \ /usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \ /usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \ /usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \ /usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \ /usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \ /usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \ + /usr/lib/qt/mkspecs/modules/qt_KParts.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \ /usr/lib/qt/mkspecs/modules/qt_KService.pri \ /usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \ /usr/lib/qt/mkspecs/modules/qt_KWallet.pri \ /usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \ /usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \ /usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \ @@ -123,8 +130,6 @@ /usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_network.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \ @@ -144,7 +149,10 @@ /usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_script.pri \ @@ -153,8 +161,6 @@ /usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \ @@ -190,7 +196,6 @@ /usr/lib/qt/mkspecs/features/qt_config.prf \ /usr/lib/qt/mkspecs/linux-g++/qmake.conf \ /usr/lib/qt/mkspecs/features/spec_post.prf \ - .qmake.stash \ /usr/lib/qt/mkspecs/features/exclusive_builds.prf \ /usr/lib/qt/mkspecs/features/default_pre.prf \ /usr/lib/qt/mkspecs/features/resolve_config.prf \ @@ -242,6 +247,9 @@ /usr/lib/qt/mkspecs/modules/qt_KCrash.pri \ /usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \ /usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \ + /usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \ + /usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \ /usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \ /usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \ /usr/lib/qt/mkspecs/modules/qt_KI18n.pri \ @@ -250,18 +258,22 @@ /usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \ /usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \ /usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \ /usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \ /usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \ /usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \ + /usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \ /usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \ + /usr/lib/qt/mkspecs/modules/qt_KParts.pri \ + /usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \ /usr/lib/qt/mkspecs/modules/qt_KService.pri \ /usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \ + /usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \ /usr/lib/qt/mkspecs/modules/qt_KWallet.pri \ /usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \ /usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \ /usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \ @@ -289,8 +301,6 @@ /usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_network.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \ @@ -310,7 +320,10 @@ /usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \ + /usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_script.pri \ @@ -319,8 +332,6 @@ /usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \ - /usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \ /usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \ @@ -356,7 +367,6 @@ /usr/lib/qt/mkspecs/features/qt_config.prf \ /usr/lib/qt/mkspecs/linux-g++/qmake.conf \ /usr/lib/qt/mkspecs/features/spec_post.prf \ - .qmake.stash \ /usr/lib/qt/mkspecs/features/exclusive_builds.prf \ /usr/lib/qt/mkspecs/features/default_pre.prf \ /usr/lib/qt/mkspecs/features/resolve_config.prf \ @@ -398,6 +408,9 @@ /usr/lib/qt/mkspecs/modules/qt_KCrash.pri: /usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri: /usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri: +/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri: +/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri: +/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri: /usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri: /usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri: /usr/lib/qt/mkspecs/modules/qt_KI18n.pri: @@ -406,18 +419,22 @@ /usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri: /usr/lib/qt/mkspecs/modules/qt_KIOGui.pri: /usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri: /usr/lib/qt/mkspecs/modules/qt_KItemViews.pri: /usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri: /usr/lib/qt/mkspecs/modules/qt_KNotifications.pri: +/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri: /usr/lib/qt/mkspecs/modules/qt_KNTLM.pri: +/usr/lib/qt/mkspecs/modules/qt_KParts.pri: +/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri: /usr/lib/qt/mkspecs/modules/qt_KService.pri: /usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri: +/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri: /usr/lib/qt/mkspecs/modules/qt_KWallet.pri: /usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri: /usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri: /usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri: -/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri: -/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri: @@ -445,8 +462,6 @@ /usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_network.pri: /usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri: -/usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri: -/usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri: /usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri: @@ -466,7 +481,10 @@ /usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_quick.pri: /usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri: +/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri: /usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_script.pri: @@ -475,8 +493,6 @@ /usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri: /usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri: -/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri: -/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_sql.pri: /usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri: /usr/lib/qt/mkspecs/modules/qt_lib_svg.pri: @@ -512,7 +528,6 @@ /usr/lib/qt/mkspecs/features/qt_config.prf: /usr/lib/qt/mkspecs/linux-g++/qmake.conf: /usr/lib/qt/mkspecs/features/spec_post.prf: -.qmake.stash: /usr/lib/qt/mkspecs/features/exclusive_builds.prf: /usr/lib/qt/mkspecs/features/default_pre.prf: /usr/lib/qt/mkspecs/features/resolve_config.prf:
--- a/vamp-client/client.cpp Wed Oct 12 12:51:33 2016 +0100 +++ b/vamp-client/client.cpp Wed Oct 12 17:47:59 2016 +0100 @@ -79,8 +79,6 @@ ReqId id = getId(); builder.getId().setNumber(id); - cerr << "id = " << id << endl; - auto arr = messageToFlatArray(message); m_process->write(arr.asChars().begin(), arr.asChars().size()); @@ -88,7 +86,9 @@ //!!! (from another thread) QByteArray buffer = readResponseBuffer(); - capnp::FlatArrayMessageReader responseMessage(toArrayPtr(buffer)); + auto karr = toKJArray(buffer); + capnp::FlatArrayMessageReader responseMessage(karr); + cerr << "made reader" << endl; RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); //!!! handle (explicit) error case @@ -136,7 +136,8 @@ m_process->write(arr.asChars().begin(), arr.asChars().size()); QByteArray buffer = readResponseBuffer(); - capnp::FlatArrayMessageReader responseMessage(toArrayPtr(buffer)); + auto karr = toKJArray(buffer); + capnp::FlatArrayMessageReader responseMessage(karr); RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); //!!! handle (explicit) error case @@ -177,7 +178,8 @@ m_process->write(arr.asChars().begin(), arr.asChars().size()); QByteArray buffer = readResponseBuffer(); - capnp::FlatArrayMessageReader responseMessage(toArrayPtr(buffer)); + auto karr = toKJArray(buffer); + capnp::FlatArrayMessageReader responseMessage(karr); RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); //!!! handle (explicit) error case @@ -213,7 +215,8 @@ m_process->write(arr.asChars().begin(), arr.asChars().size()); QByteArray buffer = readResponseBuffer(); - capnp::FlatArrayMessageReader responseMessage(toArrayPtr(buffer)); + auto karr = toKJArray(buffer); + capnp::FlatArrayMessageReader responseMessage(karr); RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); //!!! handle (explicit) error case @@ -240,12 +243,16 @@ return m_nextId++; } - kj::ArrayPtr<const capnp::word> - toArrayPtr(QByteArray arr) { + kj::Array<capnp::word> + toKJArray(QByteArray qarr) { + // We could do this whole thing with fewer copies, but let's + // see whether it matters first size_t wordSize = sizeof(capnp::word); - capnp::word *dptr = reinterpret_cast<capnp::word *>(arr.data()); - kj::ArrayPtr<const capnp::word> kptr(dptr, arr.size() / wordSize); - return kptr; + size_t words = qarr.size() / wordSize; + cerr << "converting " << words << " words (" << (words * wordSize) << " bytes)" << endl; + kj::Array<capnp::word> karr(kj::heapArray<capnp::word>(words)); + memcpy(karr.begin(), qarr.data(), words * wordSize); + return karr; } QByteArray @@ -270,7 +277,7 @@ buffer.append(m_process->read(wordCount * wordSize)); size_t haveWords = buffer.size() / wordSize; size_t expectedWords = - capnp::expectedSizeInWordsFromPrefix(toArrayPtr(buffer)); + capnp::expectedSizeInWordsFromPrefix(toKJArray(buffer)); cerr << "haveWords = " << haveWords << ", expectedWords = " << expectedWords << endl; @@ -284,14 +291,14 @@ } } } - +/* cerr << "buffer = "; for (int i = 0; i < buffer.size(); ++i) { if (i % 16 == 0) cerr << "\n"; cerr << int(buffer[i]) << " "; } cerr << "\n"; - +*/ return buffer; } @@ -328,6 +335,9 @@ cerr << f.values[0] << endl; } } - delete plugin; + //!!! todo: make it possible to do both of the following -- + (void)plugin->getRemainingFeatures(); +// delete plugin; + //!!! -- and also implement reset(), which will need to reconstruct internally }