summaryrefslogtreecommitdiff
path: root/gnuradio-runtime/include/gnuradio/buffer.h
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2013-09-17 15:32:44 -0400
committerTom Rondeau <tom@trondeau.com>2013-10-29 12:21:42 -0400
commitf3f5a5ae0ae0093277494b2380a77c8eed439035 (patch)
treeda68cfb94397c80d018c8e9e206de8742cbdf913 /gnuradio-runtime/include/gnuradio/buffer.h
parent4d71f048b2cb2ded5e4527559770a0d371d969f5 (diff)
runtime: for blocks with a group delay, tag location should be moved according to the delay. Since group delay is often unknown, we have added a new function set_group_delay to allow the user to set the value once delay is calculated.
Also added ability to set the tag propagation delay, which is required for how the blocks::delay works.
Diffstat (limited to 'gnuradio-runtime/include/gnuradio/buffer.h')
-rw-r--r--gnuradio-runtime/include/gnuradio/buffer.h34
1 files changed, 29 insertions, 5 deletions
diff --git a/gnuradio-runtime/include/gnuradio/buffer.h b/gnuradio-runtime/include/gnuradio/buffer.h
index adf00d14ac..e8e142028a 100644
--- a/gnuradio-runtime/include/gnuradio/buffer.h
+++ b/gnuradio-runtime/include/gnuradio/buffer.h
@@ -133,11 +133,16 @@ namespace gr {
private:
friend class buffer_reader;
friend GR_RUNTIME_API buffer_sptr make_buffer(int nitems, size_t sizeof_item, block_sptr link);
- friend GR_RUNTIME_API buffer_reader_sptr buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link);
+ friend GR_RUNTIME_API buffer_reader_sptr buffer_add_reader
+ (buffer_sptr buf, int nzero_preload, block_sptr link, int delay);
protected:
char *d_base; // base address of buffer
unsigned int d_bufsize; // in items
+
+ // Keep track of maximum group delay of any reader; Only prune tags past this.
+ unsigned d_max_reader_delay;
+
private:
gr::vmcircbuf *d_vmcircbuf;
size_t d_sizeof_item; // in bytes
@@ -152,7 +157,7 @@ namespace gr {
unsigned int d_write_index; // in items [0,d_bufsize)
uint64_t d_abs_write_offset; // num items written since the start
bool d_done;
- std::deque<tag_t> d_item_tags;
+ std::deque<tag_t> d_item_tags;
uint64_t d_last_min_items_read;
unsigned index_add(unsigned a, unsigned b)
@@ -205,9 +210,10 @@ namespace gr {
* \param buf is the buffer the \p gr::buffer_reader reads from.
* \param nzero_preload -- number of zero items to "preload" into buffer.
* \param link is the block that reads from the buffer using this gr::buffer_reader.
+ * \param delay Optional setting for the buffer's group delay.
*/
GR_RUNTIME_API buffer_reader_sptr
- buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link=block_sptr());
+ buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link=block_sptr(), int delay=0);
//! returns # of buffers currently allocated
GR_RUNTIME_API long buffer_ncurrently_allocated();
@@ -225,6 +231,22 @@ namespace gr {
~buffer_reader();
/*!
+ * Set group delay for this reader.
+ *
+ * See gr::block::set_group_delay for details.
+ *
+ * \param delay The new group delay
+ */
+ void set_group_delay(unsigned delay);
+
+ /*!
+ * Gets the group delay for this reader.
+ *
+ * See gr::block::group_delay for details.
+ */
+ unsigned group_delay() const;
+
+ /*!
* \brief Return number of items available for reading.
*/
int items_available() const;
@@ -290,15 +312,17 @@ namespace gr {
private:
friend class buffer;
friend GR_RUNTIME_API buffer_reader_sptr
- buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link);
+ buffer_add_reader(buffer_sptr buf, int nzero_preload, block_sptr link, int delay);
buffer_sptr d_buffer;
unsigned int d_read_index; // in items [0,d->buffer.d_bufsize)
uint64_t d_abs_read_offset; // num items seen since the start
boost::weak_ptr<block> d_link; // block that reads via this buffer reader
+ unsigned d_group_delay; // group delay for tag propagation
//! constructor is private. Use gr::buffer::add_reader to create instances
- buffer_reader(buffer_sptr buffer, unsigned int read_index, block_sptr link);
+ buffer_reader(buffer_sptr buffer, unsigned int read_index,
+ block_sptr link);
};
//! returns # of buffer_readers currently allocated