If one uses gr::block and ::general_work, then I believe that there are no constraints on the I/O streams & one can have generalized ninput and noutput items on each stream.
It's when one moves to specialized blocks (e.g., gr::sync_block, gr::sync_interpolator, gr::tagged_stream, etc), that constraints are put on the I/O streams. Thus, Sakthivel, for your I/Q example you'd want to inherit from gr::sync_block and use ::work() to guarantee that the ninput items are the same for each stream. You can see the (quite simple) code for ::forecast which provides this guarantee here: < https://github.com/gnuradio/gnuradio/blob/master/gnuradio-runtime/lib/sync_block.cc#L40 >. Cheers! - MLD On Tue, Jan 2, 2018, at 8:26 AM, Jeff Long wrote: > Correction: sync_block guarantees number of inputs (on each port) to be > equal to number of outputs. The sync_decimator and sync_interpolator > allow number of inputs (on each port) a 1:N or N:1 relationship between > input and output. Sorry for the confusion. > > On 01/02/2018 08:07 AM, Jeff Long wrote: > > Yes, you'll get the same number of samples on both inputs if you derive > > from sync_block. For example, here is the code from the "add" block: > > > > add_ff_impl::work(int noutput_items, > > gr_vector_const_void_star &input_items, > > gr_vector_void_star &output_items) > > { > > float *out = (float *) output_items[0]; > > int noi = d_vlen*noutput_items; > > > > memcpy(out, input_items[0], noi*sizeof(float)); > > for(size_t i = 1; i < input_items.size(); i++) > > volk_32f_x2_add_32f(out, out, (const float*)input_items[i], noi); > > return noutput_items; > > } > > > > For blocks derived from sync_decimator or sync_interpolator, you can > > also assume that the number of input and output items will be the same > > (or related). > > > > On 01/02/2018 05:46 AM, Sakthivel Velumani wrote: > >> Hi Michael, > >> > >> Thank you very much for the detailed explanation. I have one more > >> query - If a block has two input streams, will the no of items be same > >> in both streams? say for example I build a block that takes I and Q > >> samples as input and the algorithm demands I sample and its > >> corresponding Q sample to work correctly. In this case does the > >> scheduler guarantee that the items in both buffer are of same number > >> and in the same order? or do I have to check that I am processing > >> every Q sample and its corresponding I sample using tags or some other > >> mechanism? _______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
