epoc32/include/mmf/common/mmfvideo.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
--- a/epoc32/include/mmf/common/mmfvideo.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/mmf/common/mmfvideo.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,505 @@
-mmfvideo.h
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Mda\Common\MmfVideo.h
+// 
+//
+
+#ifndef __MMF_COMMON_VIDEO_H__
+#define __MMF_COMMON_VIDEO_H__
+
+#include <mmf/common/mmfutilities.h>
+
+class CFbsBitmap;
+
+/**
+@publishedAll
+@released
+
+The use of this constant as either a parameter for
+CVideoRecorderUtility::SetVideoBitRateL or as a return value from
+CVideoRecorderUtility::VideoBitRateL signifies that a variable
+video bit rate is being used.
+*/
+const TInt KMMFVariableVideoBitRate = -1;
+
+/**
+@publishedAll
+@released
+
+CVideoRecorderUtility::SetMaxClipSizeL can take this constant
+instead of a byte value.  This signifies there should be no max
+clip size
+*/
+const TInt KMMFNoMaxClipSize = -1;
+
+/**
+@publishedAll
+@released
+
+CVideoPlayerUtility/CVideoRecorderUtility HandleEvent() code :
+the video source file has been successfully opened
+*/
+const TUid KMMFEventCategoryVideoOpenComplete = {0x101F7F85};
+
+/**
+@publishedAll
+@released
+
+The unique identifier for the event that indicates that the video has been prepared for recording.
+*/
+const TUid KMMFEventCategoryVideoPrepareComplete = {0x101F7F86};
+
+/**
+@publishedAll
+@released
+*/
+const TUid KMMFEventCategoryVideoLoadingStarted = {0x101F7F87};
+
+/**
+@publishedAll
+@released
+*/
+const TUid KMMFEventCategoryVideoLoadingComplete = {0x101F7F88};
+
+/**
+@publishedAll
+@released
+*/
+const TUid KMMFEventCategoryVideoPlayerGeneralError = {0x101F8000};
+
+/**
+@publishedAll
+@released
+*/
+const TUid KMMFEventCategoryVideoRecorderGeneralError = {0x101F8001};
+
+
+/**
+@publishedAll
+@released
+
+Defines an absolute rotation in 90 degree increments
+
+@since  7.0s
+*/
+enum TVideoRotation
+	{
+	EVideoRotationNone,
+	EVideoRotationClockwise90,
+	EVideoRotationClockwise180,
+	EVideoRotationClockwise270
+	};
+
+/**
+@publishedAll
+@released
+
+Class used when sending custom commands from the client API
+to the video controller to get or set the video configuration.
+*/
+class TMMFVideoConfig
+	{
+public:
+	inline TMMFVideoConfig();
+
+public:
+	/**
+	A flag indicating whether audio output is enabled. ETrue if teh audio is to be enabled, false if
+	not.
+	*/
+	TBool						iAudioEnabled;
+	/**
+	The location of the top left corner of the video window.
+	*/
+	TPoint						iTopLeftPt;
+	/**
+	Defines the rectangle in which the video clip will be played.
+	*/
+	TRect						iClipRect;
+	/**
+	A handle to the bitmap into which the decoded frame(s) are put.
+	*/
+	TInt						iBitmapHandle;
+	/**
+	The current frame number in the video clip.
+	 */
+	TInt						iFrameNumber;
+	/**
+	The number of frames per second; may not be an integer.
+	*/
+	TReal32						iFramesPerSecond;
+	/**
+	The width & height of the video frame.
+	*/
+	TSize						iVideoFrameSize;
+	/**
+	The volume setting of the video device.
+
+	Should be between 0 and iMaxVolume.
+	*/
+	TInt						iVolume;
+	/**
+	The maximum volume setting of the video device.
+
+	This value is platform dependent but is always greater than or equal to one. This is the maximum
+	value that should be passed to iVolume.
+	*/
+	TInt						iMaxVolume;
+	/**
+	The balance of the audio channels for the video device. Zero for normal balance.
+	*/
+	TInt						iBalance;
+	/**
+	The gain of the audio channels for the video device. This can be any value from zero to
+	iMaxGain.
+	*/
+	TInt						iGain;
+	/**
+	The maximum gain of the audio channels for the video device.
+	*/
+	TInt						iMaxGain;
+	/**
+	Unused.
+
+	Meta data is often contained in the header of multimedia clips and is used to define attributes
+	such as the author and copyright details.
+	*/
+	TInt						iMetaData;
+	/**
+	Set the maximum size of the recording, in bytes.
+	*/
+	TInt						iMaxFileSize;
+	/**
+	The number of channels (mono/stereo) that can be read by the video device.
+	*/
+	TUint						iChannels;
+	/**
+	The video bit rate of the video device.
+	*/
+	TInt						iVideoBitRate;
+	/**
+	The audio bit rate of the video device.
+	*/
+	TInt						iAudioBitRate;
+	/**
+	The unique identifier of the video format handled by the video device.
+	*/
+	TUid						iFormatUid;
+	/**
+	The video data type represented as a fourCC code.
+	*/
+	TFourCC						iVideoCodec;
+	/**
+	The audio data type represented as a fourCC code.
+	*/
+	TFourCC						iAudioCodec;
+	/**
+	The period over which the volume is to rise.
+	*/
+	TTimeIntervalMicroSeconds	iRampDuration;
+	/**
+	The start position for playback in micro seconds.
+	 */
+	TTimeIntervalMicroSeconds	iStartPosition;
+	/**
+	The end position for playback in micro seconds.
+	 */
+	TTimeIntervalMicroSeconds	iEndPosition;
+	/**
+	The (possibly estimated) record time left in the clip.
+	*/
+	TTimeIntervalMicroSeconds	iRecordTimeAvailable;
+	/**
+	Handle to the bitmap of the current video frame.
+
+	Used by RMMFVideoPlayControllerCustomCommands::GetFrame()
+	to pass a bitmap handle to the video controller.
+	*/
+	TInt						iFrameBitmapServerHandle;
+	/**
+	Defines the window in which the video clip will be played.
+	 */
+	TRect						iWindowRect;
+	/**
+	A handle to the video camera being used.
+	*/
+	TInt						iCameraHandle;
+	/**
+	Whether the video display is active
+	*/
+	TInt						iDSAEvent;
+	/**
+	The percentage of loading/rebuffering completed.
+	*/
+	TInt						iLoadingCompletePercentage;
+	/**
+	The video rotation.
+	*/
+	TVideoRotation				iVideoRotation;
+	/**
+	The percentage (100 = original size) by which the width of the video image is scaled.
+	*/
+	TReal32						iWidthScalePercentage;
+	/**
+	The percentage (100 = original size) by which the height of the video image is scaled.
+	*/
+	TReal32						iHeightScalePercentage;
+	/**
+	A boolean indicating if anti-aliasing filtering should be used.
+	*/
+	TBool						iAntiAliasFiltering;
+	/**
+	The crop region currently applied to the image.
+	*/
+	TRect						iCropRectangle;
+private:
+	/**
+	This member is internal and not intended for use.
+	*/
+	TInt iReserved1;
+	TInt iReserved2;
+	TInt iReserved3;
+	};
+
+/**
+Initialises the object with arbitrary values.
+*/
+inline TMMFVideoConfig::TMMFVideoConfig() {};
+
+/**
+@publishedAll
+@released
+
+Interface class to provide a callback to the video controller
+custom command interface from the controller plug-in
+(the object that implements the video record controller interface
+MMMFVideoPlayControllerCustomCommandImplementor) when a GetFrame()
+request has been issued.
+
+@see RMMFVideoPlayControllerCustomCommands::GetFrame()
+*/
+class MMMFVideoFrameMessage 
+	{
+public:
+	/**
+	Called when a frame has been successfully decoded.
+
+	@param  aError
+	        The result code to be given to the client.
+	*/
+	virtual void FrameReady(TInt aError) = 0;
+	/**
+	Returns the decoded frame as a bitmap.
+
+	@return A reference to the video frame.
+	*/
+	virtual CFbsBitmap& GetBitmap() = 0;
+	};
+
+/**
+@publishedAll
+@prototype
+
+Represents the video aspect ratio as a fraction: iNumerator/iDenominator.
+*/
+class TVideoAspectRatio
+    {
+public:
+    /**
+    Aspect ratio numerator.
+    */
+    TInt iNumerator;
+    
+    /**
+    Aspect ratio denominator.
+    */
+    TInt iDenominator;
+
+    /** 
+    Constructs a default aspect ratio object. The default aspect ratio is
+    1:1 (square).
+    */
+    inline TVideoAspectRatio();
+
+    /** 
+    Constructs an aspect ratio object from a numerator and a denominator.
+    
+    @param 	aNumerator 
+    		Aspect ratio numerator.
+    @param 	aDenominator 
+    		Aspect ratio denominator.
+    */
+    inline TVideoAspectRatio(TInt aNumerator, TInt aDenominator);
+
+    /** 
+    Compares two aspect ratio object for equality. The objects are
+    considered equal if the numerator and denominator match. 
+    Note that the implementation will not attempt to reduce the fractions 
+    before comparison.
+    */
+    inline TBool operator==(const TVideoAspectRatio& aAspectRatio) const;
+
+    /** 
+    Compares two aspect ratio object for equality. The objects are
+    considered inequal if either the numerators or the denominators differ.
+    Note that the implementation will not attempt to reduce the fractions
+    before comparison.
+    */
+    inline TBool operator!=(const TVideoAspectRatio& aAspectRatio) const;
+    };
+
+inline TVideoAspectRatio::TVideoAspectRatio()
+	: iNumerator(1),iDenominator(1)
+	{
+	}
+
+inline TVideoAspectRatio::TVideoAspectRatio(TInt aNumerator, TInt aDenominator)
+	: iNumerator(aNumerator),iDenominator(aDenominator)
+	{
+	}
+
+inline TBool TVideoAspectRatio::operator==(const TVideoAspectRatio& aAspectRatio) const
+	{
+	return ((iNumerator == aAspectRatio.iNumerator) && (iDenominator == aAspectRatio.iDenominator));
+	}
+	
+inline TBool TVideoAspectRatio::operator!=(const TVideoAspectRatio& aAspectRatio) const
+	{
+	return ((iNumerator != aAspectRatio.iNumerator) || (iDenominator != aAspectRatio.iDenominator));
+	}
+
+/**
+Video playback rate capabilities. This structure defines playback rate
+capabilities for the current controller and video clip, and can be used
+to determine if fast forward, rewind, step forward, or step backward
+is possible.
+
+@publishedPartner
+@prototype
+
+@see CVideoPlayerUtility::GetPlayRateCapabilitiesL, CVideoPlayerUtility::SetPlayVelocityL
+*/
+class TVideoPlayRateCapabilities
+    {
+public:
+    /**
+    ETrue if fast or slow play forward is possible (i.e. playback
+    velocity 1-99 or 101-). Normal play forward (velocity 100) is
+    supported by default.
+    */
+    TBool iPlayForward;
+
+    /**
+    ETrue if play backward is possible (i.e. playback velocity below0).
+    This includes normal speed, slow, and fast reverse playback.
+    */
+    TBool iPlayBackward;
+
+    /** ETrue if step forward is possible */
+    TBool iStepForward;
+
+    /** Etrue if step backward is possible */
+    TBool iStepBackward;
+    };
+    
+/**
+Automatic scaling type.
+
+@publishedPartner
+@prototype
+
+@see CVideoPlayerUtility::SetAutoScaleL
+*/
+enum TAutoScaleType
+    {
+    /** No automatic scaling */
+    EAutoScaleNone = 0,
+    
+    /**
+    Best fit: The picture is scaled to fit the window without
+    clipping while maintaining aspect ratio. If window and
+    picture aspect ratios do not match, window background color
+    is used to fill the borders.
+    */
+    EAutoScaleBestFit,
+
+    /**
+    Clip: The picture is scaled to fit in the window, scaled in both
+    directions while maintaining aspect ratio. If window and
+    picture aspect ratios do not match, some of the video
+    picture will be clipped.
+    */
+    EAutoScaleClip,
+
+    /**
+    Stretch: The picture is scaled to fit in the window without
+    maintaining aspect ratio. If window and picture aspect
+    ratios do not match, the picture will be distorted.
+    */
+    EAutoScaleStretch
+    };
+
+/**
+Horizontal alignment for automatic scaling.
+
+@publishedPartner
+@prototype
+
+@see SetAutoScaleL
+*/
+enum THorizontalAlign
+	{
+	/** The picture is horizontally centered */
+	EHorizontalAlignCenter = 0x70000000, 
+	/** The picture is left-aligned */
+	EHorizontalAlignLeft,
+	/** The picture is right-aligned */
+	EHorizontalAlignRight
+	};
+		
+/**
+Vertical alignment for automatic scaling.
+
+@publishedPartner
+@prototype
+
+@see SetAutoScaleL
+*/
+enum TVerticalAlign
+	{
+	/** The picture is vertically centered */
+	EVerticalAlignCenter = 0x70000000,
+	/** The picture is top-aligned */
+	EVerticalAlignTop, 
+	/** The picture is bottom-aligned */
+	EVerticalAlignBottom 
+	};
+
+/**
+Video quality.
+
+@publishedPartner
+@prototype
+
+@see CVideoPlayerUtility::SetVideoQualityL
+*/
+enum TVideoQuality 
+	{
+	EVideoQualityLow = 25,
+	EVideoQualityNormal = 50,
+	EVideoQualityHigh = 75,
+	EVideoQualityLossless = 100
+	};
+	
+#endif