| /*---------------------------------------------------------------------------* |
| * fpi_tgt.inl * |
| * * |
| * Copyright 2007, 2008 Nuance Communciations, Inc. * |
| * * |
| * Licensed under the Apache License, Version 2.0 (the 'License'); * |
| * you may not use this file except in compliance with the License. * |
| * * |
| * You may obtain a copy of the License at * |
| * http://www.apache.org/licenses/LICENSE-2.0 * |
| * * |
| * Unless required by applicable law or agreed to in writing, software * |
| * distributed under the License is distributed on an 'AS IS' BASIS, * |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * |
| * See the License for the specific language governing permissions and * |
| * limitations under the License. * |
| * * |
| *---------------------------------------------------------------------------*/ |
| |
| #ifndef _fpi_tgt_inl_ |
| #define _fpi_tgt_inl_ |
| |
| #include "fpi_tgt.h" |
| #include "PortExport.h" |
| |
| static PINLINE int isFrameBufferActive(fepFramePkt* frmPkt); |
| static PINLINE void setFrameBufferDead(fepFramePkt* frmPkt); |
| static PINLINE int getFrameGap(fepFramePkt* frmPkt); |
| static PINLINE int getBlockGap(fepFramePkt* frmPkt); |
| |
| |
| static PINLINE int isFrameBufferActive(fepFramePkt* frmPkt) |
| { |
| ASSERT(frmPkt); |
| if (frmPkt->isCollecting == FB_ACTIVE) |
| return (True); |
| else |
| return (False); |
| } |
| |
| static PINLINE void setFrameBufferDead(fepFramePkt* frmPkt) |
| { |
| ASSERT(frmPkt); |
| frmPkt->isCollecting = FB_DEAD; |
| return; |
| } |
| |
| /************************************************************************ |
| * Returns number of unread frames in buffer (Those not seen by REC) * |
| ************************************************************************ |
| * |
| * "FRAMES_IN_BUF" |
| * <------------------------------------------> |
| * |
| * "pushp" |
| * | |
| * v |
| * +--------------------------------------------+ |
| * | |x| |x| | <= Frame Buffer for |
| * +--------------------------------------------+ Channel 'n' |
| * | |
| * v |
| * "pullp" |
| * |
| * <---------------> |
| * 'frameGap()' |
| * |
| * Scenario A: If: FRAME_IN_BUFFER == 1000 |
| * pullp == frame 70 |
| * pushp == frame 900 Gap == 830 |
| * |
| * Scenario B: If: FRAME_IN_BUFFER == 1000 |
| * pullp == frame 720 |
| * pushp == frame 600 Gap == 880 |
| * |
| * HOW FAR CAN WE MOVE ? (for 'moveFramePtr()' function) |
| * =================== |
| * |
| * In Scenario A |
| * |
| * Forward = +830 |
| * Backward = -168 |
| * |
| * We can only move forward "830" frames from our |
| * current 'pullp' position, as frame 899 is the newest |
| * COMPLETE frame. |
| * We can only move backwards safely |
| * to frame number 902 (as 'pushp' may have changed during our |
| * deliberation), i.e. "(830 - FRAMES_IN_BUF + FRAME_BACK_GUARD)" |
| * |
| * In Scenario B |
| * |
| * Forward = +880 |
| * Backward = -118 |
| * |
| * We can only move forward "880" frames from our |
| * current 'pullp' position. We can only move backwards safely |
| * to frame number 602 (as 'pushp' may have changed during our |
| * deliberation), i.e. "(880 - FRAMES_IN_BUF + FRAME_BACK_GUARD)" |
| * |
| ************************************************************************ |
| * |
| * NOTES |
| * |
| * If 'masterREC', 'pullp' is manipulated, otherwise one of the |
| * multiple recognition pointers, 'auxPullp[]' is used. |
| * |
| ************************************************************************ |
| * |
| * Arguments: "n" Channel Number of Selected Frame |
| * |
| * Retunrs: int +ve (or ZERO) = Gap Between FEP and REC frame pointers |
| * -ve = Error |
| * |
| ************************************************************************/ |
| |
| static PINLINE int getFrameGap(fepFramePkt* frmPkt) |
| { |
| ASSERT(frmPkt); |
| return (POINTER_GAP(frmPkt, frmPkt->pushp, frmPkt->pullp)); |
| } |
| |
| /************************************************************************ |
| ************************************************************************/ |
| |
| static PINLINE int getBlockGap(fepFramePkt* frmPkt) |
| { |
| ASSERT(frmPkt); |
| return (POINTER_GAP(frmPkt, frmPkt->pullp, frmPkt->pushBlkp)); |
| } |
| |
| #endif |