diff -r 000000000000 -r 951a5db380a0 videoeditorengine/h263decoder/inc/h263dext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/h263decoder/inc/h263dext.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,278 @@ +/* +* 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: +* A header file for external usage of the services provided by +* the Video Decoder Engine. +* +*/ + + +#ifndef _H263DEXT_H_ +#define _H263DEXT_H_ + + +/* + * Includes + */ + +//#include "renapi.h" +#include "epoclib.h" + +/* + * Defines + */ + +/* _WIN32_EXPLICIT has to be defined before anything else. */ + +/* Return codes */ +#define H263D_OK_BUT_NOT_CODED 4 /* not coded frame, + copied to output as is, + no decoded output generated */ +#define H263D_OK_BUT_BIT_ERROR 3 /* Bit errors detected but frame decoded */ +#define H263D_OK_BUT_FRAME_USELESS \ + 2 /* function behaved normally, but no output + was produced due to too corrupted frame */ +#define H263D_OK_EOS 1 /* End-of-Stream has been reached */ +#define H263D_OK 0 /* the function was successful */ +#define H263D_ERROR -1 /* indicates a general error */ +#define H263D_ERROR_NO_INTRA -2 /* No INTRA frame has been decoded, + decoding cannot be started */ +#define H263D_ERROR_HALTED -3 /* no further decoding possible */ +/* Note: In practice, there is no difference between H263D_ERROR and + H263D_ERROR_HALTED. The caller should react to both error messages + in the same way. They both exist due to compatibility with older + versions of the decoder. */ + + +/* Frame type scope. See h263dFrameType_t (in this file) for descriptions. */ +#define H263D_FTYPE_ALL 0xffffffff +#define H263D_FTYPE_NDEF 0xffffffff +#define H263D_FTYPE_DEF 0 +#define H263D_FTYPE_SIZE 0x00000001 +#define H263D_FTYPE_SNAPSHOT 0x00000002 + + +/* Mode values used in h263dSetStartOrEndCallback to select if the function + scope is in the start of the frame (H263D_CB_START) + or in the end the frame (H263D_CB_END), + or both (H263D_CB_START | H263D_CB_END). */ +#define H263D_CB_START 0x00000001 +#define H263D_CB_END 0x00000002 + + +/* H.263 Annex N submodes */ +#define H263D_BC_MUX_MODE_SEPARATE_CHANNEL 1 /* Separate Logical Channel + submode*/ +#define H263D_BC_MUX_MODE_VIDEO 2 /* VideoMux submode */ + + +/* Error resilience features, see h263dSetErrorResilience for details */ +#define H263D_ERD_FEATURE_STATUS 1 +#define H263D_ERD_FEATURE_CHECK_ALL 2 +#define H263D_ERD_FEATURE_DISCARD_CORRUPTED 3 + +#define H263D_ERD_INTRA_DCT_DOMAIN 0 +#define H263D_ERD_INTRA_PIXEL_DOMAIN 1 + +#define H263D_ERD_INTER_NO_MOTION_COMPENSATION 0 +#define H263D_ERD_INTER_MOTION_COMPENSATION 1 + + +/* Output types, see h263dSetOutputFile for more information */ +#define H263D_OUT_FILE_MODE_FRAME_BY_FRAME 1 +#define H263D_OUT_FILE_MODE_ONE_PER_COMPONENT 2 +#define H263D_OUT_FILE_MODE_ONE_FOR_ALL 3 + + + +/* Temporal/computational scalability levels, + see h263dSetTemporalScalabilityLevel for more details */ +#define H263D_LEVEL_ALL_FRAMES 0 +#define H263D_LEVEL_INTRA_FRAMES 1 + + +/* Calling convention for exported functions */ +#ifndef H263D_CC + #define H263D_CC +#endif + + +/* Calling convention for callback functions declared in the decoder */ +#ifndef H263D_CALLBACK + #define H263D_CALLBACK +#endif + + +/* Declaration specifier for exported functions */ +#ifndef H263D_DS + #define H263D_DS +#endif + + +/* + * Structs and typedefs + */ + +/* size_t */ + typedef unsigned int size_t; + + +/* {{-output"h263dHInstance_t_info.txt" -ignore"*" -noCR}} + h263dHInstance_t is used as a unique identifier of a H.263 Video Decoder + instance. + The type can be casted to u_int32 or void pointer and then back to + h263dHInstance_t without any problems. + {{-output"h263dHInstance_t_info.txt"}} */ + +/* {{-output"h263dHInstance_t.txt"}} */ +typedef void * h263dHInstance_t; +/* {{-output"h263dHInstance_t.txt"}} */ + + +/* {{-output"h263dFrameType_t_info.txt" -ignore"*" -noCR}} + This structure is used to define a frame type scope for some setting + functions. + Currently, there are three scopes: the default scope (H263D_FTYPE_DEF), + the frame size scope (H263D_FTYPE_SIZE) and the snapshot scope + (H263D_FTYPE_SNAPSHOT). If a setting is defined for a particular size, + all frames having that size will be handled according to the setting, + i.e. the frame size scope overrides the default scope. Later on, it may + be possible to add more frame types scopes, like the enchancement layer + number or the snapshot tag (Annex L.8. of the H.263 recommendation). + Then, the scope order must also be defined. For example, if there are + two settings, one for a particular size and one for a particular enhancement + layer. If a frame fulfills both scopes, one has to know which scope has + the priority, e.g. that the frame has to be handled according to the + enchancement layer setting. There can also be a combination of scopes, + e.g. some setting may be defined for a particular frame size and + enhancement layer. + {{-output"h263dFrameType_t_info.txt"}} */ + +/* {{-output"h263dFrameType_t.txt"}} */ +typedef struct { + u_int32 scope; /* the scope of the frame type setting: + H263D_FTYPE_ALL + This setting overrides all previous settings, + i.e. it is valid for all frame types. + H263D_FTYPE_DEF + is used to define a setting for frame types + which do not have a specific setting of their + own. + H263D_FTYPE_SIZE + is used to define a setting for a particular + frame size. + + H263D_FTYPE_SNAPSHOT + is used to define a setting for snapshot + frames. + + For internal use only: + H263D_FTYPE_NDEF + is used in querying functions to solve the scope + depending on the parameters which are used. + All parameters must be set. + */ + + int width; + int height; /* width and height of the frame which is in the scope + of the setting. These parameters are valid + only if scope indicates H263D_FTYPE_SIZE. */ + u_char fSnapshot; /* snapshot flag, valid only if scope is + H263D_FTYPE_SNAPSHOT */ +} h263dFrameType_t; +/* {{-output"h263dFrameType_t.txt"}} */ + + +/* Used in h263dOpen_t to pass a callback function to call when decoding + has to stopped. */ +typedef void (H263D_CALLBACK *h263dDecodingFinishedCallback_t) (void *); + + + +/* Prototype for callback function related to h263dSetStartOrEndCallback. + See the function description for more details. */ +typedef void (H263D_CALLBACK *h263dStartOrEndCallback_t) + (u_int32, u_int32, void *); + +/* Prototype for callback function related to h263dSetStartOrEndSnapshotCallback. + See the function description for more details. */ +typedef void (H263D_CALLBACK *h263dStartOrEndSnapshotCallback_t) (u_int32, u_int32, void *); + +/* Prototype for callback function related to h263dSetReportPictureSizeCallback. + See the function description for more details. */ +typedef void (H263D_CALLBACK *h263dReportPictureSizeCallback_t) (void *, int, int); + +typedef struct { + int fExist; /* 1 or 0 */ + u_int8 data[255]; /* header data */ + int length; /* length of header data */ +} h263dMPEG4Header_t; + +/* {{-output"h263dOpen_t_info.txt" -ignore"*" -noCR}} + This structure is used with the h263dOpen function to give the necessary + data for opening a new H.263 Video Decoder Engine instance. + {{-output"h263dOpen_t_info.txt"}} */ + +/* {{-output"h263dOpen_t.txt"}} */ +typedef struct { + int numPreallocatedFrames; /* Number of preallocated frame memories */ + + int lumWidth; /* Size of preallocated frame memories */ + int lumHeight; + + int fRPS; /* 1 = Reference Picture Selection mode in use */ + + int numReferenceFrames; /* number of reference frames in RPS mode */ + + h263dDecodingFinishedCallback_t decodingFinishedCallback; + /* callback function to call when no data has + been decoded for a while */ + + int decodingFinishedIdleTimeInMSec; + /* number of milliseconds to go by until + decodingFinishedCallback is called */ + + h263dMPEG4Header_t mpeg4Header; + /* MPEG-4 header received via H.245 */ + + size_t freeSpace; /* Used internally */ +} h263dOpen_t; +/* {{-output"h263dOpen_t.txt"}} */ + + +/* + * Function prototypes + */ + +H263D_DS int H263D_CC h263dFree( + void); + +H263D_DS int H263D_CC h263dLoad( + void); + +H263D_DS int H263D_CC h263dSetStartOrEndCallback( + h263dHInstance_t hInstance, + u_int32 mode, + h263dFrameType_t *frameType, + h263dStartOrEndCallback_t callback, + u_int32 param); + + +H263D_DS int H263D_CC h263dSetReportPictureSizeCallback( + h263dHInstance_t hInstance, + h263dReportPictureSizeCallback_t callback); + +#endif +// End of File