Merged VRT work-in-progress from eb/vrt2 (11518:11598) into trunk.
[debian/gnuradio] / gr-vrt / src / missing_pkt_checker.cc
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2009 Free Software Foundation, Inc.
4  * 
5  * This file is part of GNU Radio
6  * 
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  * 
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25 #include <missing_pkt_checker.h>
26
27 int
28 missing_pkt_checker::check(const vrt::expanded_header *hdr)
29 {
30   // FIXME assumes we're inspecting only a single stream
31
32   int nmissing = 0;
33   int actual = hdr->pkt_cnt();
34   int expected = (d_last_pkt_cnt + 1) & 0xf;
35   if (actual != expected && !d_resync){
36     d_nwrong_pkt_cnt++;
37     if (actual > expected)
38       nmissing = actual - expected;
39     else
40       nmissing = actual + 16 - expected;
41     d_nmissing_pkt_est += nmissing;
42   }
43   d_last_pkt_cnt = actual;
44   d_npackets++;
45   d_resync = false;
46   return nmissing;
47 }