diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedengine/inc/vedqualitysettingsapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedengine/inc/vedqualitysettingsapi.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,152 @@ +/* +* 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: +* +*/ + + +#ifndef __VEDQUALITYSETTINGSAPI_H__ +#define __VEDQUALITYSETTINGSAPI_H__ + +#include +#include "imagingconfigmanager.h" + + + +const TUint KQSMaxShortStringLength = 16; +const TUint KQSMaxLongStringLength = 256; + + + +/* + * Video quality set structure + */ +struct SVideoQualitySet + { + public: + // Video aspect ratio: normal means one of the standard resolutions like QCIF, QVGA, CIF, VGA, if something else, like 16:9 + TBool iVideoAspectRatioNormal; + // Video file format mime type, e.g. "video/3gpp" + TText8 iVideoFileMimeType[KQSMaxShortStringLength]; + // Video codec mime type, e.g. "video/mp4v-es" + TText8 iVideoCodecMimeType[KQSMaxLongStringLength]; + // Video picture width in pixels (luminance) + TInt iVideoWidth; + // Video picture height in pixels (luminance) + TInt iVideoHeight; + // Video framerate in fps + TReal iVideoFrameRate; + // Video bitrate in bps + TInt iVideoBitRate; + // Random access point rate, in pictures per second. For example, to request a random access point every ten seconds, set the value to 0.1 + TReal iRandomAccessRate; + // Audio codec FourCC, e.g. " AMR" + TText8 iAudioFourCCType[KQSMaxShortStringLength]; + // Audio bitrate in bps + TInt iAudioBitRate; + // Audio sampling rate in Hz + TInt iAudioSamplingRate; + // Number of audio channels; in practice mono(1) vs stereo(2) + TInt iAudioChannels; + }; + + +/* + * API class for getting a quality set for a given level or given resolution + */ +class CVideoQualitySelector : public CBase + { + public: + /* + * Enumeration for nominal video quality levels. Client must use these enumerations to get quality sets. + * However, if NumberOfQualityLevels() below indicates there are more than ENumberOfNominalLevels, client + * can use values in-between the nominal values to get set for some other quality level. + * It is however up to the implementation of the API to map such intermediate values to actual levels + */ + enum TVideoQualityLevels + { + // client can try asking values in between these but the class may round the values depending on the availability + EVideoQualityMin = 0, // if there are several MMS compatible settings, EVideoQualityMMS is not the lowest. However level cannot go below this value + EVideoQualityMMS = 10, // use this when MMS compatible settings are needed + EVideoQualityNormal = 20, // use this when normal quality settings are needed, i.e. typically higher quality than MMS, but possibly not the highest still + EVideoQualityHigh = 30, // use this when highest possible quality settings are needed + EVideoQualityNominalGranularity = 10, + ENumberOfNominalLevels = 3 + }; + + public: + /* + * Create new CVideoQualitySelector object + */ + static CVideoQualitySelector* NewL(); + + static CVideoQualitySelector* NewLC(); + + /* + * Destructor + */ + ~CVideoQualitySelector(); + + /* + * Get number of defined quality levels. This is always at least ENumberOfNominalLevels but can be higher + */ + TInt NumberOfQualityLevels(); + /* + * Get quality set associated with the given level. The level should be between EVideoQualityHigh and EVideoQualityMin. + * One the defined nominal levels should be used especially if NumberOfQualityLevels() == ENumberOfNominalLevels. + * If there is no set associated with given intermediate level, then set from a nearest level is returned. + */ + void GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel ); + /* + * Get quality set associated with the given level. Otherwise the same as above but if aAspectRatioWide == ETrue, + * tries to find 16:9 aspect ratio settings, otherwise returns a set from the normal aspect ratio as above. + */ + void GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel, TBool aAspectRatioWide ); + /* + * Get quality set associated with the given video resolution. Leaves if there is no defined set for the resolution. + * E.g. if product configuration prefers QVGA over CIF, but client asks for CIF, this function leaves. The CIF settings + * can then be requested using the MIME-type + */ + void GetVideoQualitySetL( SVideoQualitySet& aSet, const TSize& aVideoResolution ); + /* + * Get quality set associated with the given video codec MIME-type. Leaves if there is no defined set for the MIME-type. + */ + void GetVideoQualitySetL( SVideoQualitySet& aSet, const TPtrC8& aVideoCodecMimeType ); + + private: + /* + * Default constructor + */ + CVideoQualitySelector(); + + /* + * Actual constructor + */ + void ConstructL(); + + /* + * Copies the values from the source set to the target set + */ + void MapQualitySet( SVideoQualitySet& aTargetSet, TVideoQualitySet& aSourceSet ); + + private: // Data + + CImagingConfigManager* iConfigManager; + + CArrayFixFlat* iQualityLevels; + + }; + +#endif