mmhais/videohai/devvideo/inc/Mpeg4Visual.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmhais/videohai/devvideo/inc/Mpeg4Visual.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,566 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+//
+// Description:
+// Constants and structs specific to Mpeg4 Visual.  See the DevVideo specs for more details.
+// 
+//
+
+#ifndef __DEVVIDEO_MPEG4VISUAL_H__
+#define __DEVVIDEO_MPEG4VISUAL_H__
+
+#include <e32base.h>
+#include <mmf/devvideo/h263.h>
+
+/**
+Specifies the picture type.
+@publishedAll
+@released
+*/
+enum TMPEG4VisualVOPType
+    {
+	/**
+	An Intra-coded (I) VOP is coded using information only from itself.
+	*/
+    EMPEG4VisualVOPTypeI = 0x01,
+
+	/**
+	A Predictive-coded (P) VOP is a VOP which is coded using motion compensated prediction from a 
+	past reference VOP.
+	*/
+    EMPEG4VisualVOPTypeP = 0x02,
+
+	/**
+	A Bidirectionally predictive-coded (B) VOP is a VOP which is coded using motion compensated 
+	prediction from a past and/or future reference VOP(s).
+	*/
+    EMPEG4VisualVOPTypeB = 0x04,
+
+	/**
+	A sprite (S) VOP is a VOP for a sprite object or a VOP which is coded using prediction based on
+	global motion compensation from a past reference VOP.
+	*/
+    EMPEG4VisualVOPTypeS = 0x08
+    };
+
+/**
+Specifies the MPEG-4 Visual header types.
+@publishedAll
+@released
+*/
+enum TMPEG4VisualHeaderType
+    {
+	/**
+	Visual Object Sequence Header.
+	*/
+    EMPEG4VisualHeaderSequence = 0x01,
+
+	/**
+	Visual Object Header.
+	*/
+    EMPEG4VisualHeaderObject   = 0x02,
+
+	/**
+	Video Object Layer Header.
+	*/
+    EMPEG4VisualHeaderVOL      = 0x04,
+
+	/**
+	Group of Video Object Plane Header.
+	*/
+    EMPEG4VisualHeaderGOV      = 0x08,
+
+	/**
+	Video Object Plane Header.
+	*/
+    EMPEG4VisualHeaderVOP      = 0x10
+    };
+
+
+/**
+Object sequence header.
+@publishedAll
+@released
+*/
+class TMPEG4VisualObjectSequenceHeader
+    {
+public:
+	/**
+	Used to signal the profile and level identification according to Table G-1 of MPEG-4 Visual.
+	*/
+    TUint iProfileLevel;
+
+	/**
+	Contains the user_data bytes, if any, that are directly included in the VideoObjectSequence() 
+	syntax structure (subclause 6.2.2 of MPEG-4 Visual), in bitstream order. The pointer must remain
+	valid as long as the object it belongs to is being processed by the client (for playback) or MSL
+	video subsystem (for recording).
+	*/
+    TPtrC8 iUserData;
+    };
+
+/**
+Object header.
+@publishedAll
+@released
+*/
+class TMPEG4VisualObjectHeader
+    {
+public:
+	/**
+	Identifies the version number of the visual object as specified in the semantics of 
+	visual_object_verid syntax element of MPEG-4 Visual.
+	*/
+    TUint iVisualObjectVerid;
+
+	/**
+	Specifies the priority of the visual object as specified in the semantics of 
+	visual_object_priority syntax element of MPEG-4 Visual. If the visual_object_priority syntax 
+	element is not present in the bitstream, iVisualObjectPriority shall be equal to 0.
+	*/
+    TUint iVisualObjectPriority;
+
+	/**
+	Identifies the type of the visual object as specified in the semantics of 
+	visual_object_type syntax element of MPEG-4 Visual. HW devices according to this specification 
+	are required to set iVisualObjectType to 1 (to indicate "video ID").
+	*/
+    TUint iVisualObjectType;
+
+	/**
+	Uniquely identifies the video object. The value of iVideoObjectId shall be the same as the 
+	value of the video_object_id syntax element specified in MPEG-4 Visual.
+	*/
+    TUint iVideoObjectId;
+
+	/**
+	Contains the user_data bytes, if any, that are directly included in the VideoObject() syntax 
+	structure (subclause 6.2.2 of MPEG-4 Visual), in bitstream order. The pointer must remain valid
+	as long as the object it belongs to is being processed by the client (for playback) or MSL video
+	subsystem (for recording).
+	*/
+    TPtrC8 iUserData;
+    };
+
+/**
+Mpeg4 Visual VBV parameters.
+
+If the syntax elements that are used to derive the values of the class member variables are not 
+present in the bitstream, the variable values shall be set to default values as specified in 
+Annex D of MPEG-4 Visual.
+@publishedAll
+@released
+*/
+class TMPEG4VisualVbvParams
+    {
+public:
+	/**
+	Specifies the instantaneous video object layer channel bit rate in bits per second. Shall be set
+	to ((first_half_bit_rate << 15) + latter_half_bit_rate) * 400, where the values of 
+	first_half_bit_rate and latter_half_bit_rate are conveyed in the VideoObjectLayer syntax 
+	structure of MPEG-4 Visual.
+	*/
+    TInt64 iBitRate;
+
+	/**
+	Specifies the VBV buffer size in bytes. Shall be set to 
+	((first_half_vbv_buffer_size) << 3) + latter_half_vbv_buffer_size) * 2048, 
+	where the values of first_half_vbv_buffer_size and latter_half_vbv_buffer_size are conveyed in 
+	the VideoObjectLayer syntax structure of MPEG-4 Visual.
+	*/
+    TUint32 iVbvBufferSize;
+
+	/**
+	Specifies VBV occupancy in bytes just before the removal of the first VOP following the VOL 
+	header. The purpose for the quantity is to provide the initial condition for VBV buffer fullness. 
+	Shall be set to ((first_half_vbv_occupancy) << 15) + latter_half_vbv_occupancy) * 2048, where
+	the values of first_half_vbv_occupancy and latter_half_vbv_occupancy are conveyed in the 
+	VideoObjectLayer syntax structure of MPEG-4 Visual.
+	*/
+    TUint32 iVbvOccupancy;
+    };
+
+
+/**
+Video object layer header.
+@publishedAll
+@released
+*/
+class TMPEG4VisualVOLHeader
+    {
+public:
+	/**
+	Uniquely identifies the video object layer. The value of iVideoObjectLayerId shall be the same
+	as the value of the video_object_layer_id syntax element specified in MPEG-4 Visual.
+	*/
+    TUint iVideoObjectLayerId;
+
+	/**
+	iShortVideoHeader equal to ETrue indicates that the associated elementary stream conforms to
+	ITU-T Recommendation H.263 (without optional coding modes).  The value of iShortVideoHeader 
+	shall be equal to the value of the short_video_header flag of MPEG-4 Visual. 
+	*/
+    TBool iShortVideoHeader;
+
+	/**
+	iRandomAccessibleVOL equal to ETrue indicates that every VOP in this VOL is individually
+	decodable. The value of iRandomAccessibleVOL shall be equal to the value of the 
+	random_accessible_vol flag of MPEG-4 Visual.
+	*/
+    TBool iRandomAccessibleVOL;
+
+	/**
+	Indicates the object type as specified in Table 6-10 of MPEG-4 Visual and constrains the 
+	associated elementary stream to use tools from the indicated object type. HW devices according
+	to this specification are required to set iVideoObjectTypeIndication to 1 (to indicate Simple
+	Object Type).
+	*/
+    TUint iVideoObjectTypeIndication;
+
+	/**
+	Identifies the version number of the video object layer as specified in the semantics of 
+	video_object_layer_verid syntax element of MPEG-4 Visual.
+	*/
+    TUint iVideoObjectLayerVerid;
+
+	/**
+	*/
+    TUint iVideoObjectLayerPriority;
+
+	/**
+	Specifies the priority of the video object layer as specified in the semantics of 
+	video_object_layer_priority syntax element of MPEG-4 Visual. If the video_object_layer_priority
+	syntax element is not present in the bitstream, iVideoObjectLayerPriority shall be equal to 0.
+	*/
+    TUint iAspectRatioNum;
+
+	/**
+	Pixel aspect ratio numerator and denominator respectively. The pixel aspect ratio is defined as 
+	iAspectRatioNum/iAspectRatioDenom, where the values are positive integers and relatively prime. 
+	These values shall be set according to the value of aspect_ratio_info, par_width (if present), 
+	and par_height (if present) syntax elements in the VideoObjectLayer() syntax structure of MPEG-4
+	Visual.
+	*/
+    TUint iAspectRatioDenom;
+
+	/**
+	Specifies the VBV parameters in use for the VOL. The values in iVbvParams are valid if 
+	iShortVideoHeader equals to EFalse. If iShortVideoHeader equals to ETrue, the VBV operation and 
+	parameters are specified in Annex D of MPEG-4 Visual.
+	*/
+    TMPEG4VisualVbvParams iVbvParams;
+
+	/**
+	Indicates the number of evenly spaced subintervals, called ticks, within one modulo time. One
+	modulo time represents the fixed interval of one second. Shall be set equal to the value of 
+	vop_time_increment_resolution of the VideoObjectLayer() syntax structure of MPEG-4 Visual.
+	*/
+    TUint16 iVOPTimeIncrementResolution;
+
+	/**
+	iFixedVOPRate equal to ETrue indicates that all VOPs are coded with a fixed VOP rate. 
+	iFixedVOPRate equal to EFalse indicates that some VOPs may not be coded with a fixed VOP rate. 
+	Shall be set equal to the value of fixed_vop_rate of the VideoObjectLayer() syntax structure
+	of MPEG-4 Visual.
+	*/
+    TBool iFixedVOPRate;
+
+	/**
+	The number of ticks between two successive VOPs in the display order. Valid only if 
+	iFixedVOPRate is equal to ETrue. Shall be set equal to the value of fixed_vop_time_increment 
+	of the VideoObjectLayer() syntax structure of MPEG-4 Visual.
+	*/
+    TUint16 iFixedVOPTimeIncrement;
+
+	/**
+	iDataPartitioning equal to ETrue indicates that slices are organized in data partitions within 
+	the associated elementary bitstream. Shall be set equal to the value of the data_partitioned 
+	syntax element of the VideoObjectLayer() syntax structure of MPEG-4 Visual.
+	*/
+    TBool iDataPartitioning;
+
+	/**
+	iReversibleVLC equal to ETrue indicates that the reversible variable length tables of MPEG-4 
+	Visual are in use in the associated elementary bistream. Shall be set equal to the value of the
+	reversible_vlc syntax element of the VideoObjectLayer() syntax structure of MPEG-4 Visual. If 
+	reversible_vlc is not present in the bitstream, the value of iReversibleVLC shall be set to 
+	EFalse.
+	*/
+    TBool iReversibleVLC;
+
+	/**
+	Contains the user_data bytes, if any, that are directly included in the VideoObjectLayer()
+	syntax structure, in bitstream order. The pointer must remain valid as long as the object it 
+	belongs to is being processed by the client (for playback) or MSL video subsystem (for 
+	recording).
+	*/
+    TPtrC8 iUserData;
+    };
+
+
+/**
+Mpeg4 visual GOV header.
+@publishedAll
+@released
+*/
+class TMPEG4VisualGOVHeader
+    {
+public:
+	/**
+	iTimeCodeHours, iTimeCodeMinutes and iTimeCodeSeconds together specify the modulo part (i.e. the 
+	full second units) of the time base for the first object plane (in display order) after the GOV 
+	header according to the semantics of the time_code syntax element of MPEG-4 Visual.
+	*/
+    TUint iTimeCodeHours;
+
+	/**
+	iTimeCodeHours, iTimeCodeMinutes and iTimeCodeSeconds together specify the modulo part (i.e. the 
+	full second units) of the time base for the first object plane (in display order) after the GOV 
+	header according to the semantics of the time_code syntax element of MPEG-4 Visual.
+	*/
+    TUint iTimeCodeMinutes;
+
+	/**
+	iTimeCodeHours, iTimeCodeMinutes and iTimeCodeSeconds together specify the modulo part (i.e. the 
+	full second units) of the time base for the first object plane (in display order) after the GOV 
+	header according to the semantics of the time_code syntax element of MPEG-4 Visual.
+	*/
+    TUint iTimeCodeSeconds;
+
+	/**
+	Indicates the nature of the predictions used in the first consecutive B-VOPs (if any) 
+	immediately following the first coded I-VOP after the GOV header. iClosedGOV equal to ETrue
+	indicates that there are no such B-VOPs or that these B-VOPs have been encoded using only 
+	backward prediction or intra coding. The value of iClosedGOV shall be set equal to the value of
+	closed_gov syntax element of MPEG-4 Visual.
+	*/
+    TBool iClosedGOV;
+
+	/**
+	iBrokenLink equal to ETrue indicates that the first consecutive B-VOPs (if any) immediately 
+	following the first coded I-VOP following the GOV header may not be correctly decoded because
+	the reference frame which is used for prediction is not available (e.g., due to result of 
+	editing in compressed domain). A decoder may use this flag to avoid displaying frames that 
+	cannot be correctly decoded. The value of iBrokenLink shall be set equal to the value of 
+	broken_link syntax element of MPEG-4 Visual.
+	*/
+    TBool iBrokenLink;
+    };
+
+
+/**
+Mpeg4 visual VOP header.
+@publishedAll
+@released
+*/
+class TMPEG4VisualVOPHeader
+    {
+public:
+	/**
+	Indicates the coding type of the VOP.
+	*/
+    TMPEG4VisualVOPType iVOPCodingType;
+
+	/**
+	Indicates the number of seconds elapsed since the previous GOV header or since the previous
+	picture in display order, whichever is closer in display order. The value of iModuloTimeBase 
+	shall be set equal to the decoded value derived from a series of modulo_time_base fields as 
+	specified in MPEG-4 Visual.
+	*/
+    TUint iModuloTimeBase;
+
+	/**
+	VOP display time relative to iModuloTimeBase in clock ticks. The value of iVOPTimeIncrement 
+	shall be set equal to the value of the vop_time_increment syntax element of MPEG-4 Visual.
+	*/
+    TUint16 iVOPTimeIncrement;
+
+	/**
+	iVOPCoded equal to EFalse indicates that the VOP is a copy of the previous VOP in display order.
+	The value of iVOPCoded shall be set equal to the value of the vop_coded syntax element of MPEG-4
+	Visual.
+	*/
+    TBool iVOPCoded;
+
+	/**
+	Indicates the initial value of the quantization parameter. iVOPQuant shall be set equal to the
+	value of the vop_quant syntax element.
+	*/
+    TUint iVOPQuant;
+
+	/**
+	Indicates the VOP ID. iVOPId shall be set equal to the value of the vop_id syntax element. Valid
+	only if the flag newpred_enable is equal to 1.
+	*/
+    TUint16 iVOPId;
+
+	/**
+	When equal to ETrue indicates the following iVOPIdForPrediction is valid. Valid only if the flag
+	newpred_enable is equal to 1.
+	*/
+    TBool iVOPIdForPredictionValid;
+
+	/**
+	Indicates VOP ID of the VOP that is used as the reference VOP for the current VOP. 
+	iVOPIdForPrediction shall be set equal to the value of the vop_id_for_prediction if the syntax 
+	element is present (i.e. the ). Valid only if iVOPIdForPredictionValid is equal to ETrue.
+	*/
+    TUint16 iVOPIdForPrediction;
+    };
+
+
+/**
+This class is used to convey information of Visual Object Sequence, Visual Object, VOL, GOV, and VOP 
+headers that are consecutive in decoding order without any intervening syntax structures.
+@publishedAll
+@released
+*/
+class TMPEG4VisualHeader
+    {
+public:
+	/**
+	A binary OR of values specified in TMPEG4VisualHeaderType:
+		* EMPEG4VisualHeaderSequence - set if the visual object sequence header is present and 
+		  iVisualObjectSequenceHeader is set accordingly. Otherwise, iVisualObjectSequenceHeader 
+		  shall be set to NULL.
+		* EMPEG4VisualHeaderObject - set if the visual object header is present and 
+		  iVisualObjectHeader is set accordingly. Otherwise, iVisualObjectHeader shall be set
+		  to NULL.
+		* EMPEG4VisualHeaderVOL - set if the VOL header is present and iVOLHeader is set accordingly.
+		  Otherwise, iVOLHeader shall be set to NULL.
+		* EMPEG4VisualHeaderGOV - set if the GOV header is present and iGOVHeader is set accordingly.
+		  Otherwise, iGOVHeader shall be set to NULL.
+		* EMPEG4VisualHeaderVOP - set if the VOP header is present and iVOPHeader is set accordingly.
+		  Otherwise, iVOPHeader shall be set to NULL
+	*/
+    TUint32 iConsecutiveHeaders;
+
+	/**
+	The visual object sequence header.
+	*/
+    const TMPEG4VisualObjectSequenceHeader* iVisualObjectSequenceHeader;
+
+	/**
+	The visual object header.
+	*/
+    const TMPEG4VisualObjectHeader* iVisualObjectHeader;
+
+	/**
+	The VOL header.
+	*/
+    const TMPEG4VisualVOLHeader* iVOLHeader;
+
+	/**
+	The GOV header.
+	*/
+    const TMPEG4VisualGOVHeader* iGOVHeader;
+
+	/**
+	The VOP header.
+	*/
+    const TMPEG4VisualVOPHeader* iVOPHeader;
+    };
+
+
+
+/**
+This class is used to signal decoder or encoder capabilities.
+@publishedAll
+@released
+*/
+class TMPEG4VisualCapability
+    {
+public:
+	/*
+	iProfileLevel[ i ] indicates a supported combination of profile and level, i.e., 
+	profile_and_level_indication, according to Table G-1 of MPEG-4 Visual. The values of i from 62 
+	to 255 are reserved (the MPEG-4 Visual standard referenced in the present document has 62 
+	combinations of profile and level). 
+	*/
+    TUint8 iProfileLevel[256];
+    };
+
+
+/**
+This class is used to set the encoder operation mode.
+@publishedAll
+@released
+*/
+class TMPEG4VisualNormalMPEG4Mode
+    {
+public:
+	/**
+	Specifies the picture types allowed in the bitstream. The value is a binary OR of values from
+	TMPEG4VisualVOPType. Signaled picture types that are not included in the prevailing coding 
+	profile are ignored.
+	*/
+    TMPEG4VisualVOPType iAllowedVOPTypes;
+	
+	/**
+	Specifies the number of consecutive video packet headers within a VOP, starting from the first
+	video packet header in decoding order, where the value of header_extension_code shall be set to 1. 
+	*/
+    TUint iHeaderExtension;
+
+	/**
+	Specifies whether data partitioning is in use. When equal to ETrue, data partitioning is in use.
+	When equal to EFalse, data partitioning is not in use. If data partitioning is in use, the 
+	SetErrorProtectionLevelsL method, if used, should set the number of unequal error protection
+	levels to be larger than one. 
+	*/
+    TBool iDataPartitioning;
+	
+	/**
+	Specifies whether reversible variable length coding is in use. When equal to ETrue, reversible 
+	variable length coding is in use. When equal to EFalse, reversible variable length coding is 
+	not in use. Valid only if iDataPartitioned is equal to ETrue.
+	*/
+    TBool iReversibleVLC;
+	
+	/**
+	Specifies which headers are included in the first output buffer of each intra VOP. (Note: Video
+	Object Sequence and Video Object Headers can be repeated for error resiliency. VOL Header 
+	includes the initial buffer occupancy level. GOV header includes an update on display times.)
+	*/
+    TMPEG4VisualHeaderType iHeadersBeforeIntraVOP;
+    };
+
+/**
+This class is used to set the encoder operation mode.
+@publishedAll
+@released
+*/
+class TMPEG4VisualMode
+    {
+public:
+	/**
+	Indicates whether the short header mode of MPEG-4 Visual is used. If iShortHeaderMode is 
+	equal to ETrue, then iH263VideoMode is valid and all other parameter values are invalid. If 
+	iShortHeaderMode is equal to EFalse, then iH263VideoMode is invalid and all other parameter 
+	values are valid. 
+	*/
+    TBool iShortHeaderMode;
+	
+	/**
+	Contains the encoding modes to use when iShortHeaderMode is EFalse.
+	*/
+    TMPEG4VisualNormalMPEG4Mode iMPEG4VisualNormalMPEG4Mode;
+
+	/**
+	Contains the encoding modes to use when iShortHeaderMode is ETrue.
+	*/
+    TH263VideoMode iH263VideoMode;
+    };
+
+	
+
+#endif