1/*---------------------------------------------------------------------------*
2 *  fpi_tgt.inl  *
3 *                                                                           *
4 *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5 *                                                                           *
6 *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7 *  you may not use this file except in compliance with the License.         *
8 *                                                                           *
9 *  You may obtain a copy of the License at                                  *
10 *      http://www.apache.org/licenses/LICENSE-2.0                           *
11 *                                                                           *
12 *  Unless required by applicable law or agreed to in writing, software      *
13 *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15 *  See the License for the specific language governing permissions and      *
16 *  limitations under the License.                                           *
17 *                                                                           *
18 *---------------------------------------------------------------------------*/
19
20#ifndef _fpi_tgt_inl_
21#define _fpi_tgt_inl_
22
23#include "fpi_tgt.h"
24#include "PortExport.h"
25
26static PINLINE int isFrameBufferActive(fepFramePkt* frmPkt);
27static PINLINE void setFrameBufferDead(fepFramePkt* frmPkt);
28static PINLINE int getFrameGap(fepFramePkt* frmPkt);
29static PINLINE int getBlockGap(fepFramePkt* frmPkt);
30
31
32static PINLINE int isFrameBufferActive(fepFramePkt* frmPkt)
33{
34  ASSERT(frmPkt);
35  if (frmPkt->isCollecting == FB_ACTIVE)
36    return (True);
37  else
38    return (False);
39}
40
41static PINLINE void setFrameBufferDead(fepFramePkt* frmPkt)
42{
43  ASSERT(frmPkt);
44  frmPkt->isCollecting = FB_DEAD;
45  return;
46}
47
48/************************************************************************
49 * Returns number of unread frames in buffer (Those not seen by REC)    *
50 ************************************************************************
51 *
52 *                 "FRAMES_IN_BUF"
53 *   <------------------------------------------>
54 *
55 *                            "pushp"
56 *                               |
57 *                               v
58 *  +--------------------------------------------+
59 *  |          |x|              |x|              |  <= Frame Buffer for
60 *  +--------------------------------------------+      Channel 'n'
61 *              |
62 *              v
63 *            "pullp"
64 *
65 *              <--------------->
66 *                 'frameGap()'
67 *
68 *               Scenario A:    If: FRAME_IN_BUFFER == 1000
69 *                                  pullp == frame 70
70 *                                  pushp == frame 900   Gap == 830
71 *
72 *               Scenario B:    If: FRAME_IN_BUFFER == 1000
73 *                                  pullp == frame 720
74 *                                  pushp == frame 600   Gap == 880
75 *
76 * HOW FAR CAN WE MOVE ? (for 'moveFramePtr()' function)
77 * ===================
78 *
79 * In Scenario A
80 *
81 *      Forward  = +830
82 *      Backward = -168
83 *
84 *      We can only move forward "830" frames from our
85 *          current 'pullp' position, as frame 899 is the newest
86 *          COMPLETE frame.
87 *      We can only move backwards safely
88 *          to frame number 902 (as 'pushp' may have changed during our
89 *          deliberation), i.e. "(830 - FRAMES_IN_BUF + FRAME_BACK_GUARD)"
90 *
91 * In Scenario B
92 *
93 *      Forward  = +880
94 *      Backward = -118
95 *
96 *      We can only move forward "880" frames from our
97 *      current 'pullp' position.  We can only move backwards safely
98 *      to frame number 602 (as 'pushp' may have changed during our
99 *      deliberation), i.e. "(880 - FRAMES_IN_BUF + FRAME_BACK_GUARD)"
100 *
101 ************************************************************************
102 *
103 * NOTES
104 *
105 * If 'masterREC', 'pullp' is manipulated, otherwise one of the
106 * multiple recognition pointers, 'auxPullp[]' is used.
107 *
108 ************************************************************************
109 *
110 * Arguments: "n"      Channel Number of Selected Frame
111 *
112 * Retunrs:   int      +ve (or ZERO) = Gap Between FEP and REC frame pointers
113 *                     -ve           = Error
114 *
115 ************************************************************************/
116
117static PINLINE int getFrameGap(fepFramePkt* frmPkt)
118{
119  ASSERT(frmPkt);
120  return (POINTER_GAP(frmPkt, frmPkt->pushp, frmPkt->pullp));
121}
122
123/************************************************************************
124 ************************************************************************/
125
126static PINLINE int getBlockGap(fepFramePkt* frmPkt)
127{
128  ASSERT(frmPkt);
129  return (POINTER_GAP(frmPkt, frmPkt->pullp, frmPkt->pushBlkp));
130}
131
132#endif
133