X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fstoresession.cpp;h=d5355cba3bbe03c71aeb2bf27a2bc654f72479bb;hp=9b8dac9c579783aafada6f25fea13f0db53a19af;hb=15289d5c8736152f7f8ef37bb6e22b186ca7bd2d;hpb=bb3030b34e44733036acdfe5b4d4ec0705146831 diff --git a/pv/storesession.cpp b/pv/storesession.cpp index 9b8dac9c..d5355cba 100644 --- a/pv/storesession.cpp +++ b/pv/storesession.cpp @@ -27,6 +27,8 @@ #include #include +#include + using std::deque; using std::dynamic_pointer_cast; using std::lock_guard; @@ -40,6 +42,8 @@ using std::string; using std::thread; using std::vector; +using sigrok::Error; + namespace pv { const size_t StoreSession::BlockSize = 1024 * 1024; @@ -110,26 +114,27 @@ bool StoreSession::start() const shared_ptr snapshot(snapshots.front()); assert(snapshot); - // Make a list of probes - char **const probes = new char*[sigs.size() + 1]; + // Make a list of channels + char **const channels = new char*[sigs.size() + 1]; for (size_t i = 0; i < sigs.size(); i++) { shared_ptr sig(sigs[i]); assert(sig); - probes[i] = strdup(sig->get_name().toUtf8().constData()); + channels[i] = strdup(sig->get_name().toUtf8().constData()); } - probes[sigs.size()] = NULL; + channels[sigs.size()] = NULL; // Begin storing - if (sr_session_save_init(SigSession::_sr_session, _file_name.c_str(), - data->samplerate(), probes) != SR_OK) { + try { + SigSession::_sr_session->begin_save(_file_name); + } catch (Error error) { _error = tr("Error while saving."); return false; } - // Delete the probes array + // Delete the channels array for (size_t i = 0; i <= sigs.size(); i++) - free(probes[i]); - delete[] probes; + free(channels[i]); + delete[] channels; _thread = std::thread(&StoreSession::store_proc, this, snapshot); return true; @@ -179,9 +184,11 @@ void StoreSession::store_proc(shared_ptr snapshot) start_sample + samples_per_block, sample_count); snapshot->get_samples(data, start_sample, end_sample); - if(sr_session_append(SigSession::_sr_session, _file_name.c_str(), data, - unit_size, end_sample - start_sample) != SR_OK) - { + size_t length = end_sample - start_sample; + + try { + SigSession::_sr_session->append(data, length, unit_size); + } catch (Error error) { _error = tr("Error while saving."); break; }