Fixed forecast and consume - now sees segment sync.
authorcswiger <cswiger@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 19 Apr 2007 08:01:39 +0000 (08:01 +0000)
committercswiger <cswiger@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 19 Apr 2007 08:01:39 +0000 (08:01 +0000)
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@5049 221aa14e-8319-0410-a670-987f0aec2ac5

gr-atsc/src/lib/atsc_bit_timing_loop.cc
gr-atsc/src/lib/atsc_bit_timing_loop.h

index e59c326d837659db181c410e576049e9ed5a19ba..49623a4fe19754fb4fc8f244624d1fb4ad03d812 100644 (file)
@@ -44,7 +44,8 @@ atsc_bit_timing_loop::atsc_bit_timing_loop()
                  gr_make_io_signature(1, 1, sizeof(float)),
                  gr_make_io_signature(2, 2, sizeof(float))),
                  d_interp(ratio_of_rx_clock_to_symbol_freq), d_next_input(0),
-                 d_rx_clock_to_symbol_freq (ratio_of_rx_clock_to_symbol_freq)
+                 d_rx_clock_to_symbol_freq (ratio_of_rx_clock_to_symbol_freq),
+                 d_si(0)
 {
   reset();
 }
@@ -56,8 +57,6 @@ atsc_bit_timing_loop::forecast (int noutput_items, gr_vector_int &ninput_items_r
   for (unsigned i = 0; i < ninputs; i++)
     ninput_items_required[i] = noutput_items * d_rx_clock_to_symbol_freq + 1500 - 1;
 
-  inputs0_size = noutput_items * d_rx_clock_to_symbol_freq + 1500 - 1;
-  inputs0_index = d_next_input;
 }
 
 int
@@ -68,7 +67,7 @@ atsc_bit_timing_loop::general_work (int noutput_items,
 {
   int   r = work (noutput_items, input_items, output_items);
   if (r > 0)
-    consume_each (r * d_rx_clock_to_symbol_freq);
+    consume_each (d_si);
   return r;
 }
 
@@ -87,7 +86,6 @@ atsc_bit_timing_loop::work (int noutput_items,
   // We are tasked with producing output.size output samples.
   // We will consume approximately 2 * output.size input samples.
 
-  int           si = 0;         // source index
   unsigned int  k;              // output index
 
   float         interp_sample;
@@ -95,12 +93,16 @@ atsc_bit_timing_loop::work (int noutput_items,
   double        timing_adjustment = 0;
   bool          seg_locked;
   atsc::syminfo    tag;
+  // ammount requested in forecast
+  unsigned long input_size = noutput_items * d_rx_clock_to_symbol_freq + 1500 -1;
 
   memset (&tag, 0, sizeof (tag));
 
+  // ammount actually consumed
+  d_si = 0;
   
   for (k = 0; k < noutput_items; k++){
-    if (!d_interp.update (in, inputs0_size, &si, timing_adjustment, &interp_sample)){
+    if (!d_interp.update (in, input_size, &d_si, timing_adjustment, &interp_sample)){
       fprintf (stderr, "GrAtscBitTimingLoop3: ran short on data...\n");
       break;
     }
@@ -113,6 +115,5 @@ atsc_bit_timing_loop::work (int noutput_items,
 
   }
 
-  d_next_input += si;    // update next_input so forecast can get us what we need
   return k;
 }
index f39479ebb814aea3233f5632544ab8c392ed1b9f..ff7f559684557910c6f1884581f0f70d7cefa4cf 100644 (file)
@@ -76,9 +76,7 @@ public:
   atsci_interpolator            d_interp;
   unsigned long long            d_next_input;
   double                        d_rx_clock_to_symbol_freq;
-
-  unsigned long long            inputs0_index;     // for inputs[0].index
-  unsigned long                        inputs0_size;      // for inputs[0].size
+  int                          d_si;
 
 
 };