--- /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 <e32base.h>
+#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<TUint>* iQualityLevels;
+
+ };
+
+#endif