diff -r 000000000000 -r 951a5db380a0 videoeditorengine/h263decoder/inc/block.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/h263decoder/inc/block.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,154 @@ +/* +* 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: +* Block handling. +* +*/ + + +#ifndef _BLOCK_H_ +#define _BLOCK_H_ + +#include "epoclib.h" +#include "vdcmvc.h" + +/* + * Definitions + */ + + + +/* + * Structs and typedefs + */ + +/* {{-output"blcDiffMB_t_info.txt" -ignore"*" -noCR}} + blcDiffMB_t is used as a temporary storage for the previous difference + (INTER) macroblock. This storage is needed for the Advanced Prediction + mode because the previous prediction macroblock cannot be constructed + until the motion vectors of the current macroblock have been fetched + from the bitstream. (The previous difference macroblock cannot be stored + directly to the current frame either, because the difference block data + is signed and the frame data is unsigned.) + {{-output"blcDiffMB_t_info.txt"}} */ + +/* {{-output"blcDiffMB_t.txt"}} */ +typedef struct { + int block[4][64]; /* luminance blocks for P frame */ + int cbpy; /* coded block pattern for luminance */ +} blcDiffMB_t; +/* {{-output"blcDiffMB_t.txt"}} */ + + +/* {{-output"BLC_COPY_PREDICTION_MB_PARAM_info.txt" -ignore"*" -noCR}} + This C preprocessor definition is used to store the parameters needed + for the blcCopyPredictionMB function (and therefore also for + the blcCopyPredictionMBParam_t data type). These parameters may also be used + in other modules than the Block Tools and in other data structures than + blcCopyPredictionMBParam_t. When these parameters are introduced with this + preprocessor definition in the other data structures, one does not need + the "extra" reference step which would be needed if the parameters + would have been introduced directly and only in + the blcCopyPredictionMBParam_t structure. For example, if otherStructA + has been typedefd as {BLC_COPY_PREDICTION_MB_PARAM} and otherStructB as + {blcCopyPredictionMBParam_t predPar;}, to access e.g. refY one has to use + either otherStructA.refY or otherStructB.predPar.refY. + {{-output"BLC_COPY_PREDICTION_MB_PARAM_info.txt"}} */ + +/* {{-output"BLC_COPY_PREDICTION_MB_PARAM.txt"}} */ +#define BLC_COPY_PREDICTION_MB_PARAM \ + u_char *refY; /* Reference frame */ \ + u_char *refU; \ + u_char *refV; \ +\ + u_char *currYMBInFrame; /* Pointer to current macroblock in frame */ \ + u_char *currUBlkInFrame; \ + u_char *currVBlkInFrame; \ +\ + int uvBlkXCoord; /* X coord of MB in chrominance pixels */ \ + int uvBlkYCoord; /* Y coord of MB (top-left corner) in */ \ + /* chrominance pixels */ \ +\ + int uvWidth; /* Width of the picture in chro pixels */ \ + int uvHeight; /* Height of the picture in chro pixels */ \ +\ + mvcData_t *mvcData; /* Motion Vector Count module instance data */ \ +\ + int *mvx; /* Array of 4 x-components of motion vectors */ \ + int *mvy; /* Array of 4 y-components of motion vectors */ \ + /* If not in 4-MVs-mode, only the first entry */ \ + /* of the both arrays is used. */ \ +\ + int mbPlace; /* Indicates the place of the current */ \ + /* macroblock inside the macroblock row: */ \ + /* -1 beginning of row */ \ + /* 0 middle of row */ \ + /* 1 end of row */ \ + /* If Annex K is in use */ \ + /* -1 beginning of row or slice */ \ + /* 0 middle of slice */ \ + /* 1 end of row(if not the beginning of */ \ + /* the slice) or slice */ \ + /* 2 end of row and the beginning of slice */ \ +\ + int fAdvancedPrediction; /* Non-zero if Advanced Prediction is used */ \ +\ + int fMVsOverPictureBoundaries; \ + /* Non-zero if MVs are allowed to point */ \ + /* outside picture boundaries */ \ +\ + blcDiffMB_t *diffMB; /* Prediction error for the previous MB */ \ +\ + int rcontrol; /* RCONTROL (section 6.1.2 of H.263) */ \ +\ + int fourMVs; /* Flag to indicate if there is four motion + vectors per macroblock */ +/* {{-output"BLC_COPY_PREDICTION_MB_PARAM.txt"}} */ + + +/* {{-output"blcCopyPredictionMBParam_t_info.txt" -ignore"*" -noCR}} + This structure is used to pass parameters into the blcCopyPredictionMB + function. + {{-output"blcCopyPredictionMBParam_t_info.txt"}} */ + +/* {{-output"blcCopyPredictionMBParam_t.txt"}} */ +typedef struct { + BLC_COPY_PREDICTION_MB_PARAM +} blcCopyPredictionMBParam_t; +/* {{-output"blcCopyPredictionMBParam_t.txt"}} */ + + + + +/* + * Function prototypes + */ + +void blcAddBlock(int *block, + u_char HUGE *frame_p, + int xSize, + int mbPlace, u_char fourMVs, int *prevDiffBlock); + +void blcBlockToFrame(int *block, + u_char HUGE *frame_p, + int xSize); + +int blcCopyPredictionMB(blcCopyPredictionMBParam_t *param); + + + +#endif + +// End of file