--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/inc/vdc263.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,351 @@
+/*
+* 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:
+* An application programming interface for core functions of
+* video decoder.
+*
+*/
+
+
+#ifndef _VDC263_H_
+#define _VDC263_H_
+
+
+/*
+ * Includes
+ */
+
+
+#include "biblin.h"
+#include "vdeims.h"
+
+
+/*
+ * Defines
+ */
+
+/* Return values */
+// unify error codes
+#define VDC_OK_BUT_NOT_CODED H263D_OK_BUT_NOT_CODED
+ /* not coded frame,
+ copied to output as is,
+ no decoded output generated */
+#define VDC_OK_BUT_FRAME_USELESS H263D_OK_BUT_FRAME_USELESS
+ /* Decoder behaved normally the decoded
+ frame(s) should not be displayed since
+ it is too heavily corrupted. */
+
+#define VDC_OK_BUT_BIT_ERROR H263D_OK_BUT_BIT_ERROR
+ /* The decoded frame(s) are degraded due
+ to transmission errors but can be
+ displayed due to successful error
+ concealment. */
+
+#define VDC_OK H263D_OK /* Everything ok. */
+
+#define VDC_ERR H263D_ERROR /* An unexpected processing error
+ occured. */
+#define VDC_ERR_NO_INTRA H263D_ERROR_NO_INTRA /* No INTRA frame has been decoded
+ and the current frame is INTER */
+
+/* vdcPictureHeader_t and vdxSEI_t related definitions */
+#define VDX_MAX_BYTES_IN_PIC_HEADER 44
+ /* Maximum number of bytes allowed in
+ SEI picture header repetition.
+
+ Picture headers not including
+ BCM (Annex N video-mux back-channel),
+ RPRP (Annex P warping parameters), and
+ Annex U
+ allocate 152 bits = 19 bytes in
+ the worst case.
+ Our decoder does not support the features
+ mentioned above. However, to ensure
+ that introduction of any of the mentioned
+ tools would not break this mechanism,
+ a relatively large buffer is allocated
+ for picture header copies. Note that
+ Annex U does not have an upper limit
+ for picture header lengths. */
+
+
+/*
+ * Structs and typedefs
+ */
+
+/* {{-output"vdcHInstance_t_info.txt" -ignore"*" -noCR}}
+ vdcHInstance_t is used as a unique identifier of a VDC instance.
+ The type can be casted to u_int32 or void pointer and then back to
+ vdcHInstance_t without any problems.
+ {{-output"vdcHInstance_t_info.txt"}} */
+
+/* {{-output"vdcHInstance_t.txt"}} */
+typedef void * vdcHInstance_t;
+/* {{-output"vdcHInstance_t.txt"}} */
+
+
+/* The following vdx data types are defined here, because VDC exports
+ these structures (see vdcDecodePictureHeader). */
+
+/*
+ * vdxPictureHeader_t
+ */
+
+/* {{-output"vdxPictureHeader_t_info.txt" -ignore"*" -noCR}}
+ The vdxGetPictureHeader function uses this structure to return the picture
+ header parameters.
+ {{-output"vdxPictureHeader_t_info.txt"}} */
+
+/* {{-output"vdxPictureHeader_t.txt"}} */
+typedef struct {
+ /* The following fields are always set */
+ int numBits; /* number of bits in the picture header,
+ including PSC, excluding PSTUFF, PSUPP and
+ PEI */
+
+ int tr; /* the TR field or a combination of ETR and TR
+ if ETR is used */
+
+ int fSplitScreen;
+ int fDocumentCamera;
+ int fFreezePictureRelease;
+
+ int pictureType; /* Picture type is one of the following:
+ VDX_PIC_TYPE_I INTRA
+ VDX_PIC_TYPE_P INTER
+ VDX_PIC_TYPE_PB PB (Annex G)
+ VDX_PIC_TYPE_IPB Improved PB
+ VDX_PIC_TYPE_B B (Annex O)
+ VDX_PIC_TYPE_EI EI (Annex O)
+ VDX_PIC_TYPE_EP EP (Annex O) */
+
+ int fPLUSPTYPE; /* 0 = no PLUSPTYPE, 1 = PLUSPTYPE exists */
+
+ int cpm; /* The CPM field */
+ int psbi; /* The PSBI field, valid only if cpm == 1 */
+
+ int pquant; /* The PQUANT field */
+ int pquantPosition; /* Number of bits preceding the PQUANT field,
+ including PSC, excluding PSTUFF */
+
+ /* The following fields are set
+ if pictureType == VDX_PIC_TYPE_PB || pictureType == VDX_PIC_TYPE_IPB */
+ int trb; /* The TRB field */
+ int dbquant; /* The DBQUANT field */
+
+ /* The following fields are set if fPLUSPTYPE == 0 || ufep == 1 */
+ int lumWidth; /* the width and height of the luminance */
+ int lumHeight; /* image */
+
+ int fUMV; /* Unrestricted Motion Vector Mode */
+ int fSAC; /* Syntax-based Arithmetic Coding Mode */
+ int fAP; /* Advanced Prediction Mode */
+
+ /* The following fields are set if fPLUSPTYPE == 1 */
+ int ufep; /* The UFEP field */
+
+ int fRPR; /* Reference Picture Resampling Mode */
+ int fRRU; /* Reduced-Resolution Update Mode */
+ int rtype; /* Rounding type (RTYPE) */
+
+
+ /* If Annex O is in use */
+ int elnum; /* Enhancement layer number */
+
+ /* If the Reference Picture Selection mode is in use */
+ int trpi; /* 1 = trp is valid */
+ int trp; /* Temporal reference for prediction */
+
+ /* The following fields are set if ufep == 1 */
+ int fCustomSourceFormat;
+
+ int fAIC; /* Advanced INTRA Coding Mode */
+ int fDF; /* Deblocking Filter Mode */
+ int fSS; /* Slice Structured Mode */
+ int fRPS; /* Reference Picture Selection Mode */
+ int fISD; /* Independent Segment Decoding Mode */
+ int fAIV; /* Alternate INTER VLC Mode */
+ int fMQ; /* Modified Quantization Mode */
+
+ int parWidth; /* Pixel aspect ratio = parWidth : parHeight */
+ int parHeight;
+
+ /* Picture Clock Frequence (PCF) fields */
+ int fCustomPCF; /* 0 = CIF PCF, 1 = custom PCF */
+ int pcfRate; /* PCF = pcfRate / pcfScale Hz */
+ int pcfScale;
+
+ /* If fUMV == 1 */
+ int fUMVLimited; /* 0 = motion vector range is not limited,
+ 1 = motion vector range is limited
+ according to Annex D */
+
+ /* If fSS == 1 */
+ int fRectangularSlices;
+ /* 0 = free-running slices,
+ 1 = rectangular slices */
+
+ int fArbitrarySliceOrdering;
+ /* 0 = sequential order */
+ /* 1 = arbitrary order */
+
+ /* If Annex O is in use */
+ int rlnum; /* Reference layer number */
+
+
+ /* If fRPS == 1 */
+ int rpsMode; /* Reference Picture Selection Mode:
+ VDX_RPS_MODE_NO_MSGS
+ VDX_RPS_MODE_ACK
+ VDX_RPS_MODE_NACK
+ VDX_RPS_MODE_BOTH_MSGS */
+} vdxPictureHeader_t;
+/* {{-output"vdxPictureHeader_t.txt"}} */
+
+
+/*
+ * vdxSEI_t
+ */
+
+/* {{-output"vdxSEI_t_info.txt" -ignore"*" -noCR}}
+ This structure is used to return parameters parsed from Supplemental
+ Enhancement Information.
+ {{-output"vdxSEI_t_info.txt"}} */
+
+/* {{-output"vdxSEI_t.txt"}} */
+typedef struct {
+ int fFullPictureFreezeRequest; /* 1 = Full-picture freeze requested as in
+ section L.4 of H.263, 0 otherwise */
+
+ int fFullPictureSnapshot; /* 1 = Full-picture snapshot tag as in
+ section L.8 of H.263, 0 otherwise */
+
+ u_int32 snapshotId; /* Snapshot identification number */
+
+ u_int8 snapshotStatus; /* Snapshot transmission status */
+
+ int scalabilityLayer; /* Annex N scalability layer for
+ the picture, -1 if not defined */
+
+ int numScalabilityLayers; /* Number of Annex N scalability layers,
+ value from 2 to 15,
+ 0 if no scalability layers in use. */
+
+ u_char prevPicHeader[VDX_MAX_BYTES_IN_PIC_HEADER];
+ /* Previous picture header repetition
+ in bit-stream syntax including
+ the first two bytes of PSC */
+
+ int numBytesInPrevPicHeader; /* Number of bytes valid in prevPicHeader,
+ including the first two bytes of PSC
+ and the last byte of picture header
+ where the LSB bits are possibly not
+ belonging to the picture header copy */
+
+ int numBitsInLastByteOfPrevPicHeader;
+ /* Number of valid bits in the last byte
+ of prevPicHeader (1..8) */
+
+ int fPrevPicHeaderTooLarge; /* 1 if the previous picture header copy
+ did not fit into prevPicHeader,
+ 0 otherwise */
+} vdxSEI_t;
+/* {{-output"vdxSEI_t.txt"}} */
+
+
+/*
+ * Function prototypes, core.c
+ */
+
+int vdcClose(vdcHInstance_t hInstance);
+
+class CMPEG4Transcoder;
+int vdcDecodeFrame(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, bibBuffer_t *outBuffer,
+ bibBufferEdit_t *bufEdit, int aColorEffect, TBool aGetDecodedFrame,
+ CMPEG4Transcoder *hTranscoder);
+
+
+int vdcDecodePictureHeader(
+ vdcHInstance_t hInstance,
+ bibBuffer_t *inBuffer,
+ vdxPictureHeader_t *header,
+ vdxSEI_t *sei);
+
+int vdcFree(void);
+
+vdeImsItem_t *vdcGetImsItem(vdcHInstance_t hInstance, int index);
+
+int vdcGetNumberOfAnnexNScalabilityLayers(
+ vdcHInstance_t hInstance);
+
+int vdcGetNumberOfOutputFrames(vdcHInstance_t hInstance);
+
+void vdcGetTR(void *inpBuffer, u_int8 *tr);
+
+int vdcIsEOSReached(vdcHInstance_t hInstance);
+
+int vdcIsINTRA(
+ vdcHInstance_t hInstance,
+ void *frameStart,
+ unsigned frameLength);
+
+int vdcIsINTRAGot(vdcHInstance_t hInstance);
+
+int vdcIsPB(
+ vdcHInstance_t hInstance,
+ void *frameStart,
+ unsigned frameLength);
+
+int vdcLoad(void);
+
+vdcHInstance_t vdcOpen(
+ vdeIms_t *imageStore,
+ int numReferenceFrames,
+ void *hParent);
+
+void vdcRestartVideo(vdcHInstance_t hInstance);
+
+int vdcSetBackChannelUsage(vdcHInstance_t hInstance, int fSendMessages);
+
+int vdcSetErrorResilience(vdcHInstance_t hInstance, int feature, int value);
+
+int vdcSetStartOrEndSnapshotCallback(
+ vdcHInstance_t hInstance,
+ u_int32 mode,
+ u_int32 callback);
+
+int vdcGetSnapshotStatus(vdcHInstance_t hInstance);
+
+int vdcSetReportPictureSizeCallback(
+ vdcHInstance_t hInstance,
+ u_int32 callback);
+
+/*
+ * Function prototypes, core_mpeg.c
+ */
+
+ int vdcDecodeMPEGVolHeader(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, CMPEG4Transcoder *hTranscoder);
+
+ int vdcDecodeMPEGVop(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, bibBuffer_t *outBuffer,
+ bibBufferEdit_t *bufEdit, int aColorEffect, TBool aGetDecodedFrame,
+ int aStartByteIndex, int aStartBitIndex, CMPEG4Transcoder *hTranscoder);
+
+ int vdcIsMPEGINTRA(
+ vdcHInstance_t hInstance,
+ void *frameStart,
+ unsigned frameLength);
+
+#endif
+// End of File