From b873e461f602c521681239fe023e08a14e4f11d4 Mon Sep 17 00:00:00 2001 From: Dave Griffiths Date: Mon, 27 Jul 2015 16:17:49 +0100 Subject: [PATCH] crash fix --- samplebrain/qt/Makefile | 19 +++++++++++-------- samplebrain/qt/samplebrain.pro | 1 + samplebrain/src/renderer.cpp | 17 ++++++++++++----- samplebrain/src/renderer.h | 7 +++++-- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/samplebrain/qt/Makefile b/samplebrain/qt/Makefile index a56d76e..516f3ce 100644 --- a/samplebrain/qt/Makefile +++ b/samplebrain/qt/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: samplebrain -# Generated by qmake (2.01a) (Qt 4.8.1) on: Mon Jul 27 09:28:27 2015 +# Generated by qmake (2.01a) (Qt 4.8.1) on: Mon Jul 27 16:02:01 2015 # Project: samplebrain.pro # Template: app # Command: /usr/bin/qmake -o Makefile samplebrain.pro @@ -10,12 +10,12 @@ CC = gcc CXX = g++ -DEFINES = -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -CFLAGS = -m64 -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) -CXXFLAGS = -m64 -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) +DEFINES = -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES) +CXXFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES) INCPATH = -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I2 -I../src -I. LINK = g++ -LFLAGS = -m64 -Wl,-O1 +LFLAGS = -m64 LIBS = $(SUBLIBS) -L/usr/lib/x86_64-linux-gnu -L.. -lsamplebrain -ljellyfish -lportaudio -lfftw3 -lsndfile -llo -ldl -lm -lQtGui -lQtCore -lpthread AR = ar cqs RANLIB = @@ -68,7 +68,7 @@ DIST = /usr/share/qt4/mkspecs/common/unix.conf \ /usr/share/qt4/mkspecs/features/qt_config.prf \ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ /usr/share/qt4/mkspecs/features/default_pre.prf \ - /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/debug.prf \ /usr/share/qt4/mkspecs/features/default_post.prf \ /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \ /usr/share/qt4/mkspecs/features/warn_on.prf \ @@ -111,6 +111,7 @@ all: Makefile $(TARGET) $(TARGET): $(OBJECTS) $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + { test -n "$(DESTDIR)" && DESTDIR="$(DESTDIR)" || DESTDIR=.; } && test $$(gdb --version | sed -e 's,[^0-9]\+\([0-9]\)\.\([0-9]\).*,\1\2,;q') -gt 72 && gdb --nx --batch --quiet -ex 'set confirm off' -ex "save gdb-index $$DESTDIR" -ex quit '$(TARGET)' && test -f $(TARGET).gdb-index && objcopy --add-section '.gdb_index=$(TARGET).gdb-index' --set-section-flags '.gdb_index=readonly' '$(TARGET)' '$(TARGET)' && rm -f $(TARGET).gdb-index || true Makefile: samplebrain.pro /usr/share/qt4/mkspecs/linux-g++-64/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \ /usr/share/qt4/mkspecs/common/linux.conf \ @@ -124,7 +125,7 @@ Makefile: samplebrain.pro /usr/share/qt4/mkspecs/linux-g++-64/qmake.conf /usr/s /usr/share/qt4/mkspecs/features/qt_config.prf \ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ /usr/share/qt4/mkspecs/features/default_pre.prf \ - /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/debug.prf \ /usr/share/qt4/mkspecs/features/default_post.prf \ /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \ /usr/share/qt4/mkspecs/features/warn_on.prf \ @@ -151,7 +152,7 @@ Makefile: samplebrain.pro /usr/share/qt4/mkspecs/linux-g++-64/qmake.conf /usr/s /usr/share/qt4/mkspecs/features/qt_config.prf: /usr/share/qt4/mkspecs/features/exclusive_builds.prf: /usr/share/qt4/mkspecs/features/default_pre.prf: -/usr/share/qt4/mkspecs/features/release.prf: +/usr/share/qt4/mkspecs/features/debug.prf: /usr/share/qt4/mkspecs/features/default_post.prf: /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf: /usr/share/qt4/mkspecs/features/warn_on.prf: @@ -195,6 +196,7 @@ compiler_moc_header_make_all: moc_MainWindow.cpp compiler_moc_header_clean: -$(DEL_FILE) moc_MainWindow.cpp moc_MainWindow.cpp: generated/ui_samplebrain.h \ + feedback.h \ MainWindow.h /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) MainWindow.h -o moc_MainWindow.cpp @@ -243,6 +245,7 @@ feedback.o: feedback.cpp feedback.h qtmain.o: qtmain.cpp MainWindow.h \ generated/ui_samplebrain.h \ + feedback.h \ process_thread.h \ audio_thread.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qtmain.o qtmain.cpp diff --git a/samplebrain/qt/samplebrain.pro b/samplebrain/qt/samplebrain.pro index 5f39da0..ef93089 100644 --- a/samplebrain/qt/samplebrain.pro +++ b/samplebrain/qt/samplebrain.pro @@ -21,6 +21,7 @@ SOURCES += MainWindow.cpp \ INCLUDEPATH += ../src LIBS += -L.. -lsamplebrain -ljellyfish -lportaudio -lfftw3 -lsndfile -llo -ldl -lpthread -lm +CONFIG+=debug # assets RESOURCES = samplebrain.qrc diff --git a/samplebrain/src/renderer.cpp b/samplebrain/src/renderer.cpp index c302c39..0043e2b 100644 --- a/samplebrain/src/renderer.cpp +++ b/samplebrain/src/renderer.cpp @@ -33,10 +33,18 @@ void renderer::init(brain &source, brain &target) { m_search_algo=BASIC; m_slide_error=1; m_target_index=0; + m_last_tgt_shift=0; } static int ratio_time = 0; +void renderer::reset() { + m_target_time=0; + m_render_time=0; + m_target_index=0; + m_render_blocks.clear(); +} + void renderer::process(u32 nframes, float *buf) { if (!m_playing) return; @@ -44,11 +52,10 @@ void renderer::process(u32 nframes, float *buf) { u32 tgt_shift = m_target.get_block_size()-m_target.get_overlap(); u32 tgt_end = (m_target_time+nframes)/(float)tgt_shift; - if (tgt_end>=m_target.get_num_blocks() || m_source.get_num_blocks()==0) { - m_target_time=0; - m_render_time=0; - m_target_index=0; - m_render_blocks.clear(); + if (tgt_shift!=m_last_tgt_shift || + tgt_end>=m_target.get_num_blocks() || m_source.get_num_blocks()==0) { + reset(); + m_last_tgt_shift = tgt_shift; // next time... return; } diff --git a/samplebrain/src/renderer.h b/samplebrain/src/renderer.h index e2d79bc..b4c1338 100644 --- a/samplebrain/src/renderer.h +++ b/samplebrain/src/renderer.h @@ -28,7 +28,7 @@ public: renderer(brain &source, brain &target) : m_source(source), m_target(target), - m_search_params(0,0,0,100,1) + m_search_params(0,0,0,100,0) { init(source,target); } enum search_algo { @@ -39,6 +39,9 @@ renderer(brain &source, brain &target) : }; void init(brain &source, brain &target); + + void reset(); + void process(u32 nframes, float *buf); void set_search_algo(search_algo s) { m_search_algo=s; } @@ -80,7 +83,7 @@ private: search_algo m_search_algo; double m_slide_error; - + u32 m_last_tgt_shift; std::list m_render_blocks; };