X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fstoresession.cpp;h=741d18a660d73dc628e08eec6a7c151d521cebf6;hp=d5355cba3bbe03c71aeb2bf27a2bc654f72479bb;hb=7223eb629eb8eb3b03fa26b9f22770dd7f98c4d1;hpb=15289d5c8736152f7f8ef37bb6e22b186ca7bd2d diff --git a/pv/storesession.cpp b/pv/storesession.cpp index d5355cba..741d18a6 100644 --- a/pv/storesession.cpp +++ b/pv/storesession.cpp @@ -42,6 +42,7 @@ using std::string; using std::thread; using std::vector; +using sigrok::ConfigKey; using sigrok::Error; namespace pv { @@ -114,28 +115,23 @@ bool StoreSession::start() const shared_ptr snapshot(snapshots.front()); assert(snapshot); - // 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); - channels[i] = strdup(sig->get_name().toUtf8().constData()); - } - channels[sigs.size()] = NULL; - // Begin storing try { - SigSession::_sr_session->begin_save(_file_name); + auto context = _session._sr_session->context(); + auto output_format = context->output_formats()["srzip"]; + auto device = _session.get_device(); + _output = output_format->create_output(device, + {{"filename", + Glib::Variant::create(_file_name)}}); + auto meta = context->create_meta_packet( + {{ConfigKey::SAMPLERATE, + Glib::Variant::create(data->samplerate())}}); + _output->receive(meta); } catch (Error error) { _error = tr("Error while saving."); return false; } - // Delete the channels array - for (size_t i = 0; i <= sigs.size(); i++) - free(channels[i]); - delete[] channels; - _thread = std::thread(&StoreSession::store_proc, this, snapshot); return true; } @@ -187,7 +183,9 @@ void StoreSession::store_proc(shared_ptr snapshot) size_t length = end_sample - start_sample; try { - SigSession::_sr_session->append(data, length, unit_size); + auto context = _session._sr_session->context(); + auto logic = context->create_logic_packet(data, length, unit_size); + _output->receive(logic); } catch (Error error) { _error = tr("Error while saving."); break; @@ -197,9 +195,10 @@ void StoreSession::store_proc(shared_ptr snapshot) _units_stored = start_sample >> progress_scale; } - _unit_count = 0; progress_updated(); + _output.reset(); + delete[] data; }