diff -r 000000000000 -r 40261b775718 mmhais/videohai/devvideo/inc/Mpeg4Visual.h --- /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 +#include + +/** +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