X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdata%2Fdecodesignal.cpp;h=1b06bec942f1c6cc1359cb7ba9c5d853569af339;hb=b21501d694e68a8c41ea1b7bd1fecd7c7a70eadd;hp=5acf9eec634380533a2cb1c0bfeceb767cec6f7b;hpb=8ebf8079b43ba0aebe9bc5d4d27049b4a91aa22d;p=pulseview.git diff --git a/pv/data/decodesignal.cpp b/pv/data/decodesignal.cpp index 5acf9ee..1b06bec 100644 --- a/pv/data/decodesignal.cpp +++ b/pv/data/decodesignal.cpp @@ -79,7 +79,9 @@ const vector< shared_ptr >& DecodeSignal::decoder_stack() const void DecodeSignal::stack_decoder(const srd_decoder *decoder) { assert(decoder); - stack_.push_back(make_shared(decoder)); + const shared_ptr dec = make_shared(decoder); + + stack_.push_back(dec); // Set name if this decoder is the first in the list if (stack_.size() == 1) @@ -88,7 +90,7 @@ void DecodeSignal::stack_decoder(const srd_decoder *decoder) // Include the newly created decode channels in the channel lists update_channel_list(); - auto_assign_signals(); + auto_assign_signals(dec); commit_decoder_channels(); begin_decode(); } @@ -263,12 +265,16 @@ const vector DecodeSignal::get_channels() const return channels_; } -void DecodeSignal::auto_assign_signals() +void DecodeSignal::auto_assign_signals(const shared_ptr dec) { bool new_assignment = false; // Try to auto-select channels that don't have signals assigned yet for (data::DecodeChannel &ch : channels_) { + // If a decoder is given, auto-assign only its channels + if (dec && (ch.decoder_ != dec)) + continue; + if (ch.assigned_signal) continue; @@ -924,7 +930,7 @@ void DecodeSignal::connect_input_notifiers() void DecodeSignal::annotation_callback(srd_proto_data *pdata, void *decode_signal) { assert(pdata); - assert(decoder); + assert(decode_signal); DecodeSignal *const ds = (DecodeSignal*)decode_signal; assert(ds);