summaryrefslogtreecommitdiff
path: root/gr-digital/lib/header_payload_demux_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital/lib/header_payload_demux_impl.cc')
-rw-r--r--gr-digital/lib/header_payload_demux_impl.cc71
1 files changed, 37 insertions, 34 deletions
diff --git a/gr-digital/lib/header_payload_demux_impl.cc b/gr-digital/lib/header_payload_demux_impl.cc
index 15308c0be1..160f54036d 100644
--- a/gr-digital/lib/header_payload_demux_impl.cc
+++ b/gr-digital/lib/header_payload_demux_impl.cc
@@ -1,5 +1,5 @@
/* -*- c++ -*- */
-/* Copyright 2012,2013 Free Software Foundation, Inc.
+/* Copyright 2012-2014 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -300,20 +300,19 @@ namespace gr {
}
}
if (d_uses_trigger_tag) {
- std::vector<tag_t> tags;
- get_tags_in_range(tags, 0, nitems_read(0), nitems_read(0)+noutput_items, d_trigger_tag_key);
- uint64_t min_offset = ULLONG_MAX;
- int tag_index = -1;
- for (unsigned i = 0; i < tags.size(); i++) {
- if (tags[i].offset < min_offset) {
- tag_index = (int) i;
- min_offset = tags[i].offset;
- }
- }
- if (tag_index != -1) {
- remove_item_tag(0, tags[tag_index]);
- return min_offset - nitems_read(0);
- }
+ std::vector<tag_t> tags;
+ get_tags_in_range(tags, 0, nitems_read(0), nitems_read(0)+noutput_items, d_trigger_tag_key);
+ uint64_t min_offset = ULLONG_MAX;
+ int tag_index = -1;
+ for (unsigned i = 0; i < tags.size(); i++) {
+ if (tags[i].offset < min_offset) {
+ tag_index = (int) i;
+ min_offset = tags[i].offset;
+ }
+ }
+ if (tag_index != -1) {
+ return min_offset - nitems_read(0);
+ }
}
return -1;
} /* find_trigger_signal() */
@@ -388,26 +387,30 @@ namespace gr {
// Copy tags
std::vector<tag_t> tags;
get_tags_in_range(
- tags, 0,
- nitems_read(0),
- nitems_read(0) + n_symbols * (d_items_per_symbol + d_gi)
+ tags, 0,
+ nitems_read(0),
+ nitems_read(0) + n_symbols * (d_items_per_symbol + d_gi)
);
- for (unsigned t = 0; t < tags.size(); t++) {
- int new_offset = tags[t].offset - nitems_read(0);
- if (d_output_symbols) {
- new_offset /= (d_items_per_symbol + d_gi);
- } else if (d_gi) {
- int pos_on_symbol = (new_offset % (d_items_per_symbol + d_gi)) - d_gi;
- if (pos_on_symbol < 0) {
- pos_on_symbol = 0;
- }
- new_offset = (new_offset / (d_items_per_symbol + d_gi)) + pos_on_symbol;
- }
- add_item_tag(port,
- nitems_written(port) + new_offset,
- tags[t].key,
- tags[t].value
- );
+ for (size_t t = 0; t < tags.size(); t++) {
+ // The trigger tag is *not* propagated
+ if (tags[t].key == d_trigger_tag_key) {
+ continue;
+ }
+ int new_offset = tags[t].offset - nitems_read(0);
+ if (d_output_symbols) {
+ new_offset /= (d_items_per_symbol + d_gi);
+ } else if (d_gi) {
+ int pos_on_symbol = (new_offset % (d_items_per_symbol + d_gi)) - d_gi;
+ if (pos_on_symbol < 0) {
+ pos_on_symbol = 0;
+ }
+ new_offset = (new_offset / (d_items_per_symbol + d_gi)) + pos_on_symbol;
+ }
+ add_item_tag(port,
+ nitems_written(port) + new_offset,
+ tags[t].key,
+ tags[t].value
+ );
}
} /* copy_n_symbols() */