videoeditorengine/h263decoder/src/sync.cpp
branchRCL_3
changeset 3 e0b5df5c0969
parent 0 951a5db380a0
child 7 4c409de21d23
--- a/videoeditorengine/h263decoder/src/sync.cpp	Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,311 +0,0 @@
-/*
-* Copyright (c) 2010 Ixonos Plc.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - Initial contribution
-*
-* Contributors:
-* Ixonos Plc
-*
-* Description:  
-* H.263 sync code functions.
-*
-*/
-
-
-
-
-#include "h263dConfig.h"
-
-#include "sync.h"
-#include "errcodes.h"
-#include "debug.h"
-#include "biblin.h"
-
-
-
-/*
- * Global functions
- */
-
-/* {{-output"sncCheckSync.txt"}} */
-/*
- * sncCheckSync
- *    
- *
- * Parameters:
- *    buffer                     a pointer to a bit buffer structure
- *    numStuffBits               the number of stuffing bits
- *    error                      error code
- *
- * Function:
- *    This function checks if the Picture Start Code (PSC),
- *    the End Of Sequence code (EOS) or the GOB synchronization code (GBSC)
- *    are the next codes in the bit buffer.
- *    Stuffing (PSTUF, ESTUF or GSTUF) is allowed before the code and
- *    the number of stuffing bits is returned in numStuffBits parameter.
- *    The code is not flushed from the buffer.
- *
- * Returns:
- *    SNC_NO_SYNC                if no sync code is found
- *    SNC_PSC                    if PSC is found
- *    SNC_GBSC                   if GBSC is found
- *    SNC_EOS                    if EOS is found
- *    SNC_STUFFING               if there are less than 8 zeros starting from 
- *                               the current position and after 
- *                               them the buffer ends
- *
- * Error codes:
- *    Error codes returned by bibFlushBits/bibGetBits/bibShowBits.
- *
- */
-
-int sncCheckSync(bibBuffer_t *buffer, int *numStuffBits, int16 *error)
-/* {{-output"sncCheckSync.txt"}} */
-{
-   u_int32 result;
-   int numBitsGot, i;
-   int16 newError = 0;
-   int bitErrorIndication = 0;
-
-   for(i = 0; i < 8; i++) {
-      bitErrorIndication = 0;
-      result = bibShowBits(i + 22, buffer, &numBitsGot, &bitErrorIndication, 
-         &newError);
-      if (result == 32) {
-         /* PSC */
-         *numStuffBits = i;
-         return SNC_PSC;
-      }
-
-      else if (result == 63) {
-        /* EOS */
-        *numStuffBits = i;
-        return SNC_EOS;
-      }
-
-      else if (result > 32 && result < 63) {
-         /* GBSC */
-         /* Notice that the allowed Group Numbers are listed in section 5.2.3
-            of the H.263 recommendation. They are not checked here but rather
-            they are assumed to be checked in the corresponding header reading
-            function, e.g. vdxGetGOBHeader. */
-         *numStuffBits = i;
-         return SNC_GBSC;
-      }
-
-      else if (result >= 64) {
-         return SNC_NO_SYNC;
-      }
-      else if ( buffer->error )
-          {
-          // out of bits
-          *error = (int16)buffer->error;
-          return SNC_NO_SYNC;
-          }
-   }
-
-   return SNC_NO_SYNC;
-}
-
-
-/* {{-output"sncRewindAndSeekNewSync.txt"}} */
-/*
- * sncRewindAndSeekNewSync
- *    
- *
- * Parameters:
- *    earliestBitPos             location of previously found sync code
- *                               so no sense to rewind over it
- *    buffer                     a pointer to a bit buffer structure
- *    error                      error code
- *
- * Function:
- *    This function is intended to be called after GOB header is corrupted.
- *    It rewinds some (already read) bits in order not to miss any sync code.
- *    Then, this function finds the next Picture Start Code (PSC),
- *    End Of Sequence code (EOS) or Group of Blocks Start Code (GBSC)
- *    The function discards the bits before the synchronization code 
- *    but does not remove the found code from the buffer.
- *
- * Returns:
- *    SNC_NO_SYNC                if no PSC, EOS either GBSC was found and 
- *                               no more bits are available
- *    SNC_PSC                    if PSC is found
- *    SNC_GBSC                   if GBSC is found
- *    SNC_EOS                    if EOS is found
- *
- * Error codes:
- *    Error codes returned by bibFlushBits/bibGetBits/bibShowBits.
- *
- */
-
-int sncRewindAndSeekNewSync(u_int32 earliestBitPos, bibBuffer_t *buffer, 
-   int16 *error)
-/* {{-output"sncRewindAndSeekNewSync.txt"}} */
-{
-   int sncCode;                     /* found sync code */
-   u_int32 numRewindableBits;       /* number of bits which can be rewinded */
-   u_int32 bitPosBeforeRewinding;   /* initial buffer bit index */
-   u_int32 numBitsToRewind;         /* number of bits to rewind before seeking the sync code */
-
-   *error = 0;
-
-   bitPosBeforeRewinding = bibNumberOfFlushedBits(buffer);
-
-   if ( bitPosBeforeRewinding > earliestBitPos+17 ) {
-      numBitsToRewind = bitPosBeforeRewinding - earliestBitPos - 17; 
-      /* 17 is the sync code length, and one sync code exists in earliestBitPos => do not read it again */
-   }
-   else if ( bitPosBeforeRewinding > earliestBitPos ) {
-      /* This might be possible in slice mode */
-      numBitsToRewind = bitPosBeforeRewinding - earliestBitPos; 
-   }
-   else {
-      /* Bit counter overrun? */
-      numBitsToRewind = bitPosBeforeRewinding + (0xffffffff - earliestBitPos) - 17; 
-   }
-   numRewindableBits = bibNumberOfRewBits(buffer);
-
-   if (numRewindableBits < (u_int32) numBitsToRewind)
-      numBitsToRewind = (int) numRewindableBits;
-
-   bibRewindBits(numBitsToRewind, buffer, error);
-   if (*error)
-      return SNC_NO_SYNC;
-
-   /* Seek the next synchronization code */
-   sncCode = sncSeekSync(buffer, error);
-   if (*error)
-      return sncCode;
-
-   return sncCode;
-}
-
-
-/* {{-output"sncSeekFrameSync.txt"}} */
-/*
- * sncSeekFrameSync
- *    
- *
- * Parameters:
- *    buffer                     a pointer to a bit buffer structure
- *    error                      error code
- *
- * Function:
- *    This function finds the next Picture Start Code (PSC) or
- *    End Of Sequence code (EOS) from the bit buffer. The function skips
- *    any other codes. It discards the bits before the found synchronization
- *    code but does not remove the found code from the buffer.
- *
- * Returns:
- *    SNC_NO_SYNC                if no PSC or EOS was found and 
- *                               no more bits are available
- *    SNC_PSC                    if PSC is found
- *    SNC_EOS                    if EOS is found
- *
- * Error codes:
- *    Error codes returned by bibFlushBits/bibGetBits/bibShowBits.
- *
- */
-
-int sncSeekFrameSync(bibBuffer_t *buffer, int16 *error)
-/* {{-output"sncSeekFrameSync.txt"}} */
-{
-   int numBitsGot, syncCode, bitErrorIndication = 0;
-   int16 newError = 0;
-
-   for (;;) {
-      syncCode = sncSeekSync(buffer, &newError);
-
-      if (newError) {
-         *error = newError;
-         return SNC_NO_SYNC;
-      }
-
-      if (syncCode == SNC_GBSC) {
-         bibFlushBits(17, buffer, &numBitsGot, &bitErrorIndication, &newError);
-      }
-
-      else
-         return syncCode;
-   }
-}
-
-
-/* {{-output"sncSeekSync.txt"}} */
-/*
- * sncSeekSync
- *    
- *
- * Parameters:
- *    buffer                     a pointer to a bit buffer structure
- *    error                      error code
- *
- * Function:
- *    This function finds the next Picture Start Code (PSC),
- *    End Of Sequence code (EOS) or Group of Blocks Start Code (GBSC)
- *    from the bit buffer. It discards the bits before the synchronization
- *    code but does not remove the found code from the buffer.
- *
- * Returns:
- *    SNC_NO_SYNC                if no PSC, EOS either GBSC was found and 
- *                               no more bits are available
- *    SNC_PSC                    if PSC is found
- *    SNC_GBSC                   if GBSC is found
- *    SNC_EOS                    if EOS is found
- *
- * Error codes:
- *    Error codes returned by bibFlushBits/bibGetBits/bibShowBits.
- *
- */
-
-int sncSeekSync(bibBuffer_t *buffer, int16 *error)
-/* {{-output"sncSeekSync.txt"}} */
-{
-   u_int32 result;
-   int numBitsGot;
-   int16 newError = 0;
-   int bitErrorIndication = 0;
-
-   for (;;) {
-      bitErrorIndication = 0;
-      result = bibShowBits(22, buffer, &numBitsGot, &bitErrorIndication, 
-         &newError);
-
-
-      if (result == 32) {
-         /* PSC */
-         return SNC_PSC;
-      }
-
-      else if (result == 63) {
-            /* EOS */
-            return SNC_EOS;
-      }
-
-      else if (result > 32 && result < 63) {
-         /* GBSC */
-         /* Notice that the allowed Group Numbers are listed in section 5.2.3
-            of the H.263 recommendation. They are not checked here but rather
-            they are assumed to be checked in the corresponding header reading
-            function, e.g. vdxGetGOBHeader. */
-         return SNC_GBSC;
-      }
-      else if ( buffer->error )
-          {
-          // out of bits
-          *error = (int16)buffer->error;
-          return SNC_NO_SYNC;
-          }
-
-      bibFlushBits(1, buffer, &numBitsGot, &bitErrorIndication, error);
-   }
-}
-
-// End of file