--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/inc/vdcmvc.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,191 @@
+/*
+* 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:
+* Function prototypes for motion vector counting for H.263 decoder.
+*
+*/
+
+
+#ifndef _VDCMVC_H_
+#define _VDCMVC_H_
+
+
+#include "epoclib.h"
+
+/*
+ * Defines
+ */
+
+#define MVC_XM1_UP 0
+#define MVC_XM1_DOWN 1
+#define MVC_YM1_LEFT 2
+#define MVC_YM1_RIGHT 3
+#define MVC_XP1_UP 4
+#define MVC_XP1_DOWN 5
+
+#define MVC_MB_INTER 1
+#define MVC_MB_INTRA 2
+#define MVC_MB_NOT_CODED 3
+
+
+/*
+ * Structs and typedefs
+ */
+
+/* {{-output"mvRowItem_t_info.txt" -ignore"*" -noCR}}
+ mvRowItem_t is capable of storing one P frame motion vector.
+ It is used internally within the MVC module.
+ {{-output"mvRowItem_t_info.txt"}} */
+
+/* {{-output"mvRowItem_t.txt"}} */
+typedef struct {
+ int mvx; /* motion vector value or MVD_INTRA or MVD_NOT_CODED */
+ int mvy;
+ int y; /* the y coordinate for motion vector in block units */
+ int time; /* a relative time when motion vector was counted */
+ u_char fourMVs; /* flag indicating four MBs per macroblock */
+ int type; /* MVC_MB_INTER, MVC_MB_INTRA or MVC_MB_NOT_CODED */
+} mvRowItem_t;
+/* {{-output"mvRowItem_t.txt"}} */
+
+
+/* {{-output"mvBFBufItem_t_info.txt" -ignore"*" -noCR}}
+ mvBFBufItem_t is capable of storing one B frame motion vector.
+ It is used internally within the MVC module.
+ {{-output"mvBFBufItem_t_info.txt"}} */
+
+/* {{-output"mvBFBufItem_t.txt"}} */
+typedef struct {
+ int mvx; /* motion vector value */
+ int mvy;
+ int x; /* the x coordinate for mv in block units */
+ int y; /* the y coordinate for mv in block units */
+ int time; /* a relative time when mv was counted */
+ u_char fourMVs; /* flag indicating four MBs per macroblock */
+} mvBFBufItem_t;
+/* {{-output"mvBFBufItem_t.txt"}} */
+
+
+/* {{-output"mvcData_t_info.txt" -ignore"*" -noCR}}
+ mvcData_t is used to store the instance data for one MVC module and
+ it is capable of keeping state of the motion vector decoding process
+ for one encoded H.263 bitstream.
+ {{-output"mvcData_t_info.txt"}} */
+
+/* {{-output"mvcData_t.txt"}} */
+typedef struct {
+ /* motion vector buffers
+ *
+ * mvRow contains three motion vector lines: mvRow0, mvRow1 and mvRow2
+ * mvRow0 is the lower block line in the previous macroblock line
+ * mvRow1 is the higher block line in the current macroblock line
+ * mvRow2 is the lower block line in the current macroblock line
+ */
+ mvRowItem_t *mvRow;
+ mvRowItem_t *mvRow0;
+ mvRowItem_t *mvRow1;
+ mvRowItem_t *mvRow2;
+
+ int currMaxX; /* maxX, when mvcStart was last called */
+ int currX; /* x for current macroblock being handled */
+ int currY; /* y for current macroblock */
+ int currTime; /* time for current macroblock */
+ int mvRowIndex; /* the index of mvRow0 in mvRow array (0..2) */
+
+ mvBFBufItem_t mvFBufArray[2][4]; /* forward motion vectors for B frame
+ for current and previous MB */
+ mvBFBufItem_t mvBBufArray[2][4]; /* backward motion vectors for B frame
+ for current and previous MB */
+ int mvBFBufIndex; /* the index of the current MB in mvFBufArray and
+ mvBBufArray. The index of the previous MB is generated
+ by XORing 1 to this variable. */
+ int currLumWidth;
+ int currLumHeight;
+ int mvRangeLowX; /* Lower boundary for horz. MV range */
+ int mvRangeHighX; /* Higher boundary for horz. MV range */
+ int mvRangeLowY; /* Lower boundary for vert. MV range */
+ int mvRangeHighY; /* Higher boundary for vert. MV range */
+ int prevPredMode; /* Flag for prediction of forward prediction vector in IPB
+ 1 => MB to the left has a FWD MV
+ 0 => Otherwise */
+ int rightOfBorder; /* There is a border on the left of the current MB */
+ int downOfBorder; /* There is a border on top of the current MB */
+ int leftOfBorder; /* There is a border on the right of the previous MB */
+ int rightOfBorderPrev; /* There is a border on the left of the previous MB */
+ int downOfBorderPrev; /* There is a border on top of the previous MB */
+ int upRightMBIsStart; /* The MB, on the previous line and next column is
+ the starting MB of the slice. If Annex K is not
+ in use returns zero.*/
+ int fSS; /* Annex K use flag */
+
+
+ int range; /* allowed range of the MVs: low= -range; high= range-1 */
+ int f_code; /* f_code_forward for P-frames */
+
+} mvcData_t;
+/* {{-output"mvcData_t.txt"}} */
+
+
+/*
+ * Function prototypes
+ */
+
+void mvcCalcMV(mvcData_t *mvcData, int mvdx, int mvdy,
+ int *mvx, int *mvy, u_char predictorMode, u_char fourMVs,
+ u_char unrestrictedMV, u_char nonEmptyGOBHeader, int x,
+ int y, int time, int mbType, int16 *error, int fPLUSPTYPE,
+ int fUMVLimited);
+
+void mvcSetBorders(
+ mvcData_t *mvcData, int x, int y, int mba, int numMBsInMBLine,
+ int *rightOfBorder, int *downOfBorder);
+
+void mvcCalcMPEGMV(mvcData_t *mvcData,
+ int mvdx, int mvdy, int *mvx, int *mvy,
+ u_char predictorMode, u_char fourMVs,
+ u_char topOfVP, u_char leftOfVP, u_char fmv3_out,
+ int x, int y, int time, int mbType, int16 *error);
+
+void mvcCalcMVsForBFrame(mvcData_t *mvcData, int *mvfx, int *mvfy,
+ int *mvbx, int *mvby, int *mvx, int *mvy, int mvdx, int mvdy,
+ int trb, int trd, int numMVs, u_char unrestrictedMV,
+ int x, int y, int time);
+
+void mvcCalcFwdMVsForImpBFrame(mvcData_t *mvcData, int *mvfx, int *mvfy,
+ int *mvbx, int *mvby, int mvdx, int mvdy, int x, int y, int fUMV);
+
+void mvcFree(mvcData_t *mvcData);
+
+void mvcGetCurrNeighbourMVs(mvcData_t *mvcData, int *nmvx, int *nmvy,
+ int16 *error);
+
+void mvcGetPrevNeighbourMVs(mvcData_t *mvcData, int *nmvx, int *nmvy,
+ int *pmvx, int *pmvy, u_char *fourMVs, int16 *error);
+
+void mvcGetPrevMVFsAndMVBs(mvcData_t *mvcData, int *mvfx, int *mvfy,
+ int *mvbx, int *mvby, u_char *fourMVs, int16 *error);
+
+void mvcMarkMBIntra(mvcData_t *mvcData, int x, int y, int time);
+
+void mvcMarkMBNotCoded(mvcData_t *mvcData, int x, int y, int time);
+
+void mvcStart(mvcData_t *mvcData, int maxX, int lumWidth,
+ int lumHeight, int16 *error);
+
+void mvcGetCurrentMVs(mvcData_t *mvcData, int *mvx, int *mvy,
+ int16 *error);
+
+#endif
+// End of File