videoeditorengine/h263decoder/src/decpich.cpp
branchRCL_3
changeset 3 e0b5df5c0969
parent 0 951a5db380a0
child 5 4c409de21d23
--- a/videoeditorengine/h263decoder/src/decpich.cpp	Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,699 +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:  
-* Picture header decoding functions.
-*
-*/
-
-
-
-#include "h263dConfig.h"
-
-#include "decpich.h"
-#include "debug.h"
-#include "vdeims.h"
-#include "vdeimb.h"
-#include "viddemux.h"
-#include "sync.h"
-
-
-/*
- * Global functions
- */
-
-/* {{-output"dphGetPictureHeader.txt"}} */
-/*
- * dphGetPictureHeader
- *    
- *
- * Parameters:
- *    inParam                    input parameters
- *    inOutParam                 input/output parameters, these parameters
- *                               may be modified in the function
- *    outParam                   output parameters
- *    bitErrorIndication         bit error indication, see biterr.h for
- *                               the possible values
- *
- * Function:
- *    This function gets and decodes a picture header which should start
- *    with a PSC at the current position of the bit buffer. At first,
- *    the function reads the picture header fields from the bitstream.
- *    Then, it checks whether the values of the fields are supported.
- *    An unsupported value is interpreted as a bit error. Finally,
- *    the function updates VDC instance data and output parameters
- *    (according to the new picture header).
- *
- * Returns:
- *    DPH_OK
- *    DPH_OK_BUT_BIT_ERROR
- *    DPH_ERR
- *    DPH_ERR_NO_INTRA
- *    DPH_ERR_FORMAT_CHANGE
- *
- */
-
-int dphGetPictureHeader(
-   const dphInParam_t *inParam,
-   dphInOutParam_t *inOutParam,
-   dphOutParam_t *outParam,
-   int *bitErrorIndication)
-/* {{-output"dphGetPictureHeader.txt"}} */
-{
-   bibBuffer_t *inBuffer = inOutParam->inBuffer;
-   u_char fPrevIntraGot;         /* Non-zero if an INTRA frame has been decoded
-                           before the current frame */
-   vdxGetPictureHeaderInputParam_t picHdrIn;
-   vdxPictureHeader_t picHeader;
-   vdcInstance_t *instance = inOutParam->vdcInstance;
-   vdcPictureParam_t *pictureParam = &instance->pictureParam;
-   vdcPictureParam_t prevPictParam;
-   int trd;                      /* Difference between present and previous tr */
-   int fInterFrame;              /* non-zero = INTER frame, 0 = INTRA frame */
-   int fPBFrame;                 /* Flag indicating a PB-frame */
-   int fRPS;                     /* 1 = RPS used, 0 = RPS not used */
-   int ret = 0;                  /* temporary variable to carry return values */
-   int retVal = DPH_OK;          /* return value if everything as expected,
-                                    either DPH_OK or DPH_OK_BUT_SKIP */
-   int16 error = 0;              /* snc and mvc module error code */
-
-
-   /* 
-    * Get picture header 
-    */
-
-   picHdrIn.numStuffBits = inParam->numStuffBits;
-   picHdrIn.fCustomPCF = 0;
-   picHdrIn.fScalabilityMode = 0;
-   picHdrIn.fRPS = instance->fRPS;
-   picHdrIn.flushBits = bibFlushBits;
-   picHdrIn.getBits = bibGetBits;
-   picHdrIn.showBits = bibShowBits;
-   
-    /* Used to recover the 1st picture segment */
-    u_int32 picHeaderStartPos = bibNumberOfFlushedBits(inBuffer);
-
-    if ( inParam->numStuffBits ) {
-     bibFlushBits(inParam->numStuffBits, inBuffer, &picHdrIn.numStuffBits, bitErrorIndication, &error);
-     picHdrIn.numStuffBits = 0;
-    }
-
-    // Read header bits normally from the bitstream
-    ret = vdxGetPictureHeader(inBuffer, &picHdrIn, &picHeader, 
-            bitErrorIndication);      
-
-    if ( ret < 0 )
-        return DPH_ERR;
-    else if ( ret == VDX_OK_BUT_BIT_ERROR ) 
-    {
-        // Bit error exists.
-        return DPH_OK_BUT_BIT_ERROR;
-    } // end of if ( ret == VDX_OK_BUT_BIT_ERROR ) 
-
-
-   /* 
-    * Check picture header validity 
-    */
-
-   /* Local parameters needed in validity check (and possibly afterwards) */
-   fPrevIntraGot = instance->fIntraGot;
-   fInterFrame = (picHeader.pictureType == VDX_PIC_TYPE_P ||
-      picHeader.pictureType == VDX_PIC_TYPE_PB ||
-      picHeader.pictureType == VDX_PIC_TYPE_IPB);
-   fPBFrame = ((picHeader.pictureType == VDX_PIC_TYPE_PB)||
-      (picHeader.pictureType == VDX_PIC_TYPE_IPB));
-
-   /* TR with the same value as in the previous picture can be interpreted
-      two ways:
-         - if Reference Picture Selection is enabled, it means
-           a synchronization frame
-         - if Reference Picture Selection is not used, it means the maximum
-           difference between two frames.
-           However, at least VDOPhone uses TR equal to zero always, which
-           in practice should be interpreted that TR field is not used in
-           display timing. */
-
-   /* At first, check if RPS is used */
-   if (picHeader.fPLUSPTYPE && picHeader.ufep)
-      fRPS = picHeader.fRPS;
-   else
-      fRPS = instance->fRPS;
-
-   /* Calculate temporal reference difference (from the previous frame) */
-   trd = picHeader.tr - instance->pictureParam.tr;
-   if (trd < 0)
-      trd += 256; /* Note: Add ETR support */
-
-   /* If TR is the same as in the previous frame and Reference Picture Selection
-      is not used and not the very first frame (in which case previous tr == 0), 
-      the temporal reference difference is the maximum one. */
-   if (trd == 0 && !fRPS && instance->frameNum > 0)
-      trd = 256; /* Note: Add ETR support */
-
-   /* If unsupported picture type */
-   if (picHeader.pictureType != VDX_PIC_TYPE_I
-      && picHeader.pictureType != VDX_PIC_TYPE_P
-      && picHeader.pictureType != VDX_PIC_TYPE_PB
-      && picHeader.pictureType != VDX_PIC_TYPE_IPB
-      ) {
-      return DPH_OK_BUT_BIT_ERROR;
-   }
-
-   if (picHeader.pictureType == VDX_PIC_TYPE_PB ||
-      picHeader.pictureType == VDX_PIC_TYPE_IPB) {
-      return DPH_OK_BUT_BIT_ERROR;
-   }
-   
-   if (picHeader.cpm) {
-      /* No CPM support */
-      return DPH_OK_BUT_BIT_ERROR;
-   }
-
-   if (picHeader.fPLUSPTYPE) {
-      /* If unsupported modes (and UFEP is whatever) */
-      if (picHeader.fRPR ||
-         picHeader.fRRU) {
-         return DPH_OK_BUT_BIT_ERROR;
-      }
-
-      if (picHeader.ufep == 1) {
-         /* If unsupported mode */
-         if (picHeader.fISD ||
-            picHeader.fSAC ||
-            picHeader.fAIV ||
-            picHeader.fCustomPCF) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-
-         if (picHeader.fUMV) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-
-         if (picHeader.fAP) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-         
-         if (picHeader.fAIC) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-         
-         
-         
-         if (picHeader.fDF) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-         
-         
-         
-         if (picHeader.fSS) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-         
-         
-         
-         if (picHeader.fMQ) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-         
-      }
-
-      /* Note: Add check for "The Indenpenent Segment Decoding mode shall not
-         be used with the Reference Picture Resampling mode"
-         from section 5.1.4.6 of the H.263 recommendation whenever both of
-         the modes in question are supported. 
-         Note that this check cannot reside in vdxGetPictureHeader since
-         ISD and RPR can be turned on in different pictures. */
-   }
-
-   /* Else no PLUSPTYPE */
-   else {
-      /* If unsupported modes */
-      if (picHeader.fSAC) {
-         return DPH_OK_BUT_BIT_ERROR;
-      }
-
-         if (picHeader.fUMV) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-
-         if (picHeader.fAP) {
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-   }
-
-   /* If no INTRA frame has ever been decoded and the current frame is INTER */
-   if (!fPrevIntraGot && fInterFrame)
-      return DPH_ERR_NO_INTRA;
-
-   if (fPrevIntraGot) {
-
-      /* If width and height are indicated in the header and
-         they are different from the previous */
-      if ((picHeader.fPLUSPTYPE == 0 || picHeader.ufep == 1) &&
-         (instance->pictureParam.lumWidth != picHeader.lumWidth ||
-         instance->pictureParam.lumHeight != picHeader.lumHeight)) {
-
-         if (fInterFrame) {
-            /* INTER frame, check that the source format has not changed */
-            deb("vdcDecodeFrame: ERROR - Source format has changed "
-               "(INTER frame)\n");
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-         else if ( *bitErrorIndication ) {
-            deb("vdcDecodeFrame: ERROR - Frame size changing during "
-               "the sequence, cause: bitError\n");
-            return DPH_OK_BUT_BIT_ERROR;
-         }
-         else {
-            /* At the moment do NOT allow source format changes during
-               the sequence. */
-            deb("vdcDecodeFrame: ERROR - Frame size changing during "
-               "the sequence\n");
-            return DPH_ERR_FORMAT_CHANGE;
-         }
-      }
-   }
-
-   /* If the temporal reference of B points after P */
-   if (fPBFrame && trd <= picHeader.trb) {
-      deb("vdcDecodeFrame: ERROR - TRB illegal.\n");
-      return DPH_OK_BUT_BIT_ERROR;
-   }
-
-
-   /* Now, the picture header is considered to be error-free,
-      and its contents are used to manipulate instance data */
-
-   /*
-    * Update instance data and output parameters
-    */
-
-   /* Update frame numbers */
-   {
-      int32 oldFrameNum = instance->frameNum;
-
-      instance->frameNum += trd;
-      if (instance->frameNum < 0)
-         /* Wrap from 0x7fffffff to 0 instead of the largest negative number */
-         instance->frameNum += 0x80000000;
-
-      if (fPBFrame) {
-         instance->frameNumForBFrame = oldFrameNum + picHeader.trb;
-         if (instance->frameNumForBFrame < 0)
-            /* Wrap from 0x7fffffff to 0 instead of the largest negative number */
-            instance->frameNumForBFrame += 0x80000000;
-      }
-      else
-         instance->frameNumForBFrame = -1;
-   }
-
-   /* Note: If no INTRA has been got the function has already returned */
-   instance->fIntraGot = 1;
-
-   outParam->pquant = picHeader.pquant;
-
-   instance->fRPS = fRPS;
-
-   if (instance->fRPS && picHeader.trpi)
-      outParam->trp = picHeader.trp;
-   else
-      outParam->trp = -1;
-
-   if (instance->fRPS && picHeader.fPLUSPTYPE && picHeader.ufep)
-      instance->rpsMode = picHeader.rpsMode;
-   
-   /* Store previous picture parameters temporarily */
-   memcpy(&prevPictParam, pictureParam, sizeof(vdcPictureParam_t));
-
-   /* Update picture parameters */
-   pictureParam->tr = picHeader.tr;
-   pictureParam->trd = trd;
-   pictureParam->fSplitScreenIndicator = picHeader.fSplitScreen;
-   pictureParam->fDocumentCameraIndicator = picHeader.fDocumentCamera;
-   pictureParam->fFullPictureFreezeRelease = picHeader.fFreezePictureRelease;
-   pictureParam->pictureType = picHeader.pictureType;
-   pictureParam->fPLUSPTYPE = picHeader.fPLUSPTYPE;
-   pictureParam->cpm = picHeader.cpm;
-   pictureParam->psbi = picHeader.psbi;
-
-   if (fPBFrame) {
-      pictureParam->trb = picHeader.trb;
-      pictureParam->dbquant = picHeader.dbquant;
-   }
-
-   if (!picHeader.fPLUSPTYPE || picHeader.ufep) {
-      pictureParam->lumWidth = picHeader.lumWidth;
-      pictureParam->lumHeight = picHeader.lumHeight;
-      pictureParam->fUMV = picHeader.fUMV;
-      pictureParam->fSAC = picHeader.fSAC;
-      pictureParam->fAP = picHeader.fAP;
-
-      if (pictureParam->lumWidth % 16)
-         pictureParam->lumMemWidth = 
-            (pictureParam->lumWidth / 16 + 1) * 16;
-      else
-         pictureParam->lumMemWidth = pictureParam->lumWidth;
-
-      if (pictureParam->lumHeight % 16)
-         pictureParam->lumMemHeight = (pictureParam->lumHeight / 16 + 1) * 16;
-      else
-         pictureParam->lumMemHeight = pictureParam->lumHeight;
-
-      if (picHeader.lumHeight <= 400)
-         pictureParam->numMBLinesInGOB = 1;
-      else if (picHeader.lumHeight <= 800)
-         pictureParam->numMBLinesInGOB = 2;
-      else
-         pictureParam->numMBLinesInGOB = 4;
-
-      pictureParam->numMBsInMBLine = pictureParam->lumMemWidth / 16;
-
-      {
-         int 
-            numMBLines = pictureParam->lumMemHeight / 16,
-            numMBLinesInLastGOB = 
-               numMBLines % pictureParam->numMBLinesInGOB;
-
-         if (numMBLinesInLastGOB) {
-            pictureParam->numGOBs = 
-               numMBLines / pictureParam->numMBLinesInGOB + 1;
-            pictureParam->fLastGOBSizeDifferent = 1;
-            pictureParam->numMBsInLastGOB = 
-               numMBLinesInLastGOB * pictureParam->numMBsInMBLine;
-         }
-         else {
-            pictureParam->numGOBs = 
-               numMBLines / pictureParam->numMBLinesInGOB ;
-            pictureParam->fLastGOBSizeDifferent = 0;
-            pictureParam->numMBsInLastGOB = 
-               pictureParam->numMBLinesInGOB * pictureParam->numMBsInMBLine;
-         }
-      }
-
-      pictureParam->numMBsInGOB = 
-         pictureParam->numMBsInMBLine * pictureParam->numMBLinesInGOB;
-   }
-
-   else {
-      pictureParam->lumWidth = prevPictParam.lumWidth;
-      pictureParam->lumHeight = prevPictParam.lumHeight;
-      pictureParam->lumMemWidth = prevPictParam.lumMemWidth;
-      pictureParam->lumMemHeight = prevPictParam.lumMemHeight;
-      pictureParam->fUMV = prevPictParam.fUMV;
-      pictureParam->fSAC = prevPictParam.fSAC;
-      pictureParam->fAP = prevPictParam.fAP;
-   }
-
-   /* Note: Mode inference rules defined in section 5.1.4.5 of
-      the H.263 recommendation are (in most cases) not reflected to members
-      of pictureParam due to the fact that they are implicitly turned
-      off or irrelevant in the current implementation. (This is particularly
-      true when assigning inferred state "off".) */
-
-   if (picHeader.fPLUSPTYPE) {
-      pictureParam->fRPR = picHeader.fRPR;
-      pictureParam->fRRU = picHeader.fRRU;
-      pictureParam->rtype = picHeader.rtype;
-
-      /* Note: irrelevant if Annex O is not in use */
-      pictureParam->elnum = picHeader.elnum;
-
-      if (picHeader.ufep) {
-         pictureParam->fCustomSourceFormat = picHeader.fCustomSourceFormat;
-         pictureParam->fAIC = picHeader.fAIC;
-         pictureParam->fDF = picHeader.fDF;
-         pictureParam->fSS = picHeader.fSS;
-         pictureParam->fRPS = picHeader.fRPS;
-         pictureParam->fISD = picHeader.fISD;
-         pictureParam->fAIV = picHeader.fAIV;
-         pictureParam->fMQ = picHeader.fMQ;
-      
-         pictureParam->fUMVLimited = picHeader.fUMVLimited;
-
-      }
-
-      /* Else no UFEP */
-      else {
-         pictureParam->fCustomSourceFormat = 
-            prevPictParam.fCustomSourceFormat;
-         pictureParam->fAIC = prevPictParam.fAIC;
-         pictureParam->fDF = prevPictParam.fDF;
-         pictureParam->fSS = prevPictParam.fSS;
-         pictureParam->fRPS = prevPictParam.fRPS;
-         pictureParam->fISD = prevPictParam.fISD;
-         pictureParam->fAIV = prevPictParam.fAIV;
-         pictureParam->fMQ = prevPictParam.fMQ;
-      
-         pictureParam->fUMVLimited = prevPictParam.fUMVLimited;
-
-      }
-   }
-
-   /* Else no PLUSPTYPE */
-   else {
-      /* Section 5.1.4.5 of the H.263 recommendation states:
-         "If a picture is sent which does not contain (PLUSPTYPE),
-         a state "off" shall be assigned to all modes not explicitly set to
-         "on" in the PTYPE filed, and all modes shall continue to have 
-         an inferred state of "off" until a new picture containing
-         the optional part of PLUSPTYPE is sent." */
-
-      /* Fields occuring in mandatory part of PLUSPTYPE are copied from
-         the previous picture. */
-      pictureParam->fRPR = prevPictParam.fRPR;
-      pictureParam->fRRU = prevPictParam.fRRU;
-
-      /* RTYPE is set to zero according to section 6.1.2 of 
-         the H.263 recommendation */
-      pictureParam->rtype = 0;
-
-      /* Modes occuring in the optional part of PLUSPTYPE are turned off
-         (unless occuring in PTYPE field too, like Advanced Prediction). */
-      pictureParam->fCustomSourceFormat = 0;
-      pictureParam->fCustomPCF = 0;
-      pictureParam->fAIC = 0;
-      pictureParam->fDF = 0;
-      pictureParam->fSS = 0;
-      pictureParam->fRPS = 0;
-      pictureParam->fISD = 0;
-      pictureParam->fAIV = 0;
-      pictureParam->fMQ = 0;
-   
-      /* Other related settings turned off just to be sure that they are
-         not misused. */
-      pictureParam->fUMVLimited = 0;
-   }
-
-   pictureParam->fMVsOverPictureBoundaries =
-      (pictureParam->fUMV || pictureParam->fAP || 
-      pictureParam->fDF);
-
-   /* Initialize motion vector count module */
-    mvcStart(   &instance->mvcData, 
-               instance->pictureParam.lumMemWidth / 16 - 1, 
-               pictureParam->lumMemWidth, 
-               pictureParam->lumMemHeight, &error);
-   /* Note: This assumes that the memory for frame->mvcData is filled with 0
-      in the first time the function is called.
-      (This is ensured by setting the instance data to zero when it is
-      initialized in vdcOpen.) */
-   instance->mvcData.fSS = pictureParam->fSS;
-
-   if (error) {
-      deb("mvcStart failed.\n");
-      return DPH_ERR;
-   }
-
-   /* Get image buffers */
-   {
-      vdeIms_t *store = instance->imageStore;
-      vdeImsItem_t *imsItem;
-      vdeImb_t *imb;
-      int width, height;
-      
-      vdeImsSetYUVNeed(store, inParam->fNeedDecodedFrame);
-
-      if (vdeImsGetFree(store, instance->pictureParam.lumMemWidth, 
-         instance->pictureParam.lumMemHeight, 
-         &instance->currFrame) < 0)
-         goto errGetFreeP;
-      imsItem = instance->currFrame;
-
-
-      if (vdeImsStoreItemToImageBuffer(imsItem, &imb) < 0)
-         goto errAfterGetFreeP;
-
-      if (vdeImbYUV(imb, &outParam->currYFrame, 
-         &outParam->currUFrame, &outParam->currVFrame,
-         &width, &height) < 0)
-         goto errAfterGetFreeP;
-
-   }
-
-   /* Initialize the parameters for the advanced intra coding structure. */
-   if (pictureParam->fAIC)
-    {
-    // not supported
-    }
-
-   /* Initialize the parameters for Slice Structured Mode. */
-   if (pictureParam->fSS)
-    {
-    // not supported
-    }
-    
-
-   /* If picture header successfully decoded or reliably recovered */
-   if ( inParam->fReadBits && ret == VDX_OK ) {
-
-      /* In the beginning, tr is set to -1 */
-      if ( instance->fPrevPicHeaderReliable
-         && instance->prevPicHeader->tr >= 0
-         && ( picHeader.pictureType != instance->prevPicHeader->pictureType 
-            || picHeader.fUMV != instance->prevPicHeader->fUMV 
-            || picHeader.fAP != instance->prevPicHeader->fAP
-            || picHeader.fPLUSPTYPE != instance->prevPicHeader->fPLUSPTYPE
-            || ( ( picHeader.fPLUSPTYPE == 0 || picHeader.ufep == 1 ) 
-               && ( picHeader.lumWidth != instance->prevPicHeader->lumWidth 
-                    || picHeader.lumHeight != instance->prevPicHeader->lumHeight )
-                  )
-            || ( picHeader.fPLUSPTYPE == 1 && picHeader.ufep == 1
-               && ( picHeader.fAIC != instance->prevPicHeader->fAIC
-                  || picHeader.fDF != instance->prevPicHeader->fDF
-                  || picHeader.fMQ != instance->prevPicHeader->fMQ
-                  || picHeader.fUMVLimited != instance->prevPicHeader->fUMVLimited
-                     )
-                  )
-               )
-            || ( picHeader.fPLUSPTYPE == 1 
-               && picHeader.rtype != instance->prevPicHeader->rtype )
-            ) {
-
-         /* Some parameter in PTYPE/PLUSPTYPE has changed, GFID should change also */
-         /* Note that some parameters, such as SAC, are not checked since they have not been implemented */
-
-         instance->fGFIDShouldChange = 1;
-      }
-      else if ( !instance->fPrevPicHeaderReliable ) {
-         /* Previous picture header was not reliable, don't check GFID */
-         instance->fGFIDShouldChange = 1;
-         instance->gfid = -1;
-      }
-      else if ( instance->gfid == -1 ) {
-         /* The very first frame, or a frame after a lost frame, GFID can be whatever */
-         /* Note: instance->gfid == -1 is used to indicate that previous GFID
-            is not available as in the first picture in first GOB header. 
-            If there is a picture without GOB headers and having a different
-            picture header than the surrounding pictures, instance->gfid is
-            reset to -1 in vdcDecodeFrame()! (Otherwise, a wrong GFID may be
-            used in GFID correctness check.) */
-         instance->fGFIDShouldChange = 1;
-      }
-      else {
-         /* No changes in PTYPE => the same GFID.
-          * It is better not to change the value of this flag here, since
-          * if there are no GOB or slice headers where GFID can change, the next
-          * read GFID in some other frame than the one with the different PTYPE 
-          * will be considered illegal 
-          */
-         /* instance->fGFIDShouldChange = 0; */
-      }
-
-      /* Header was reliable and can be used when checking the next header */
-      instance->fPrevPicHeaderReliable = 1;
-
-      /* Copy the read header to be used if the next header is corrupted or lost */
-      memcpy( instance->prevPicHeader, &picHeader, sizeof( vdxPictureHeader_t ) );
-   }
-
-   /* Else picture header unreliable */
-   else {
-      /* Since we cannot trust that picture header is reliable, 
-         we cannot detect errors based on GFID.
-         Thus, let's disable GFID checking in GOB level. */
-      instance->fPrevPicHeaderReliable = 0;
-      instance->fGFIDShouldChange = 1;
-      instance->gfid = -1;
-   }
-
-   return retVal;
-
-   /* Error condition handling,
-      release everything in reverse order */
-//   errAfterGetFreeB:
-
-//   vdeImsPutFree(instance->imageStore, instance->bFrame);
-//   errGetFreeB:
-
-   errAfterGetFreeP:
-
-   vdeImsPutFree(instance->imageStore, instance->currFrame);
-   errGetFreeP:
-
-   instance->currFrame = NULL;
-   instance->bFrame = NULL;
-
-   return DPH_ERR;
-}
-
-
-/* {{-output"dphGetSEI.txt"}} */
-/*
- * dphGetSEI
- *    
- *
- * Parameters:
- *    vdcInstance                Video Decoder Core instance
- *    inBuffer                   Bit Buffer instance
- *    bitErrorIndication         bit error indication, see biterr.h for
- *                               the possible values
- *
- * Function:
- *    This function gets and decodes Supplemental Enhancement
- *    Information.
- *
- * Returns:
- *    >= 0                       the function was successful
- *    < 0                        an error occured
- *
- */
-
-int dphGetSEI(
-   vdcInstance_t *vdcInstance,   /* Video Decoder Core instance */
-   bibBuffer_t *inBuffer,        /* Bit Buffer instance */
-   int *bitErrorIndication)
-{
-/* {{-output"dphGetSEI.txt"}} */
-   int
-      vdxStatus;
-
-   vdxSEI_t
-      sei;
-
-   vdxStatus = vdxGetAndParseSEI(
-      inBuffer,
-      vdcInstance->pictureParam.fPLUSPTYPE,
-      vdcInstance->numAnnexNScalabilityLayers,
-      &sei,
-      bitErrorIndication);
-
-   if (vdxStatus < 0)
-      return DPH_ERR;
-   else if (vdxStatus == VDX_OK_BUT_BIT_ERROR)
-      return DPH_OK_BUT_BIT_ERROR;
-
-      
-   return DPH_OK;
-}
-// End of File