+ for(int i=0; i<floor(noutput_items*1.0/(2*MSDD_COMPLEX_SAMPLES_PER_PACKET));i++){
+ char buffer[BUF_LEN];
+ rcv->read( &buffer[0], BUF_LEN );
+
+ int seq = *((int*) &buffer[2]);
+
+ if(d_lastseq == -MSDD_COMPLEX_SAMPLES_PER_PACKET){
+ // not started case
+ if(seq == 0){
+ d_lastseq = 0;
+ } else {
+ // THROW AWAY SAMPLES WE ARE NOT STARTED YET!
+ return 0;
+ }
+
+ } else {
+ // started case
+ int samples_missed = seq - d_lastseq - MSDD_COMPLEX_SAMPLES_PER_PACKET;
+ if(samples_missed > 0){
+ if(d_firstrun == true){
+ // we may have missed some initial samples off the beginning of
+ // a stream but there are no drop outs in the middle of what we have
+ } else {
+ printf("dropped %d samples.\n", samples_missed);
+ }
+ }
+ d_lastseq = seq;
+ }
+
+ int out_idx = i*MSDD_COMPLEX_SAMPLES_PER_PACKET*2;
+ memcpy(&out1[out_idx], &buffer[6], BUF_LEN - 6);
+ d_firstrun = false;
+ }
+
+ return noutput_items;