williamr@2: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __VIDEORECORDER_H__ williamr@2: #define __VIDEORECORDER_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: class CMMFVideoRecorderCallback; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: An interface to a set of video recorder callback functions. williamr@2: williamr@2: The class is a mixin and is intended to be inherited by the client williamr@2: class which is observing the video recording operation. The functions williamr@2: encapsulated by this class are called when specific events occur in williamr@2: the process of initialising and recording a video clip. A reference to williamr@2: this object is passed as a parameter when constructing a video recorder williamr@2: utility object. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class MVideoRecorderUtilityObserver williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Notification to the client that the opening of the video clip has completed, williamr@2: successfully, or otherwise. williamr@2: williamr@2: @param aError williamr@2: The status of the video recorder after initialisation. williamr@2: This is either KErrNone if the open has completed successfully, williamr@2: or one of the system wide error codes. williamr@2: */ williamr@2: virtual void MvruoOpenComplete(TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: Notification that video recorder is ready to begin recording. This callback williamr@2: is generated in response to a call to Prepare. williamr@2: williamr@2: @param aError williamr@2: This is either KErrNone if the video recorder has been prepared for williamr@2: recording successfully, or one of the system wide error codes williamr@2: */ williamr@2: virtual void MvruoPrepareComplete(TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: Notification that video recording has completed. This is not called if williamr@2: recording is explicitly stopped by calling Stop. williamr@2: williamr@2: @param aError williamr@2: This is either KErrNone if recording was completed successfully, williamr@2: or one of the system wide error codes. williamr@2: */ williamr@2: virtual void MvruoRecordComplete(TInt aError) = 0; williamr@2: williamr@2: /** williamr@2: General event notification from controller. These events are specified by williamr@2: the supplier of the controller. williamr@2: williamr@2: @param aEvent williamr@2: The event sent by the controller. williamr@2: */ williamr@2: virtual void MvruoEvent(const TMMFEvent& aEvent) = 0; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Records video data. williamr@2: williamr@2: The class offers a simple interface to record and set meta data and control information for a video williamr@2: clip and save the result to a file, descriptor or URL. williamr@2: williamr@2: Note: williamr@2: Some video formats also allow the storing of audio data. To accommodate this, this class contains williamr@2: audio functions that can manipulate such data. williamr@2: williamr@2: While this class is abstract, NewL() constructs, initialises and returns pointers to instances of williamr@2: concrete classes derived from this abstract class. This concrete class is part of the MMF williamr@2: implementation and is private. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CVideoRecorderUtility : public CBase, williamr@2: public MMMFClientUtility williamr@2: { williamr@2: friend class CTestStepUnitMMFVidClient; williamr@2: williamr@2: class CBody; williamr@2: williamr@2: public: williamr@2: williamr@2: williamr@2: ~CVideoRecorderUtility(); williamr@4: IMPORT_C static CVideoRecorderUtility* NewL(MVideoRecorderUtilityObserver& aObserver, williamr@4: TInt aPriority=EMdaPriorityNormal, williamr@4: TInt aPref=EMdaPriorityPreferenceTimeAndQuality); williamr@2: IMPORT_C void OpenFileL(const TDesC& aFileName, williamr@2: TInt aCameraHandle, williamr@2: TUid aControllerUid, williamr@2: TUid aVideoFormat, williamr@2: const TDesC8& aVideoType = KNullDesC8, williamr@2: TFourCC aAudioType = KMMFFourCCCodeNULL); williamr@2: IMPORT_C void OpenFileL(const RFile& aFile, williamr@2: TInt aCameraHandle, williamr@2: TUid aControllerUid, williamr@2: TUid aVideoFormat, williamr@2: const TDesC8& aVideoType = KNullDesC8, williamr@2: TFourCC aAudioType = KMMFFourCCCodeNULL); williamr@2: IMPORT_C void OpenDesL(TDes8& aDescriptor, williamr@2: TInt aCameraHandle, williamr@2: TUid aControllerUid, williamr@2: TUid aVideoFormat, williamr@2: const TDesC8& aVideoType = KNullDesC8, williamr@2: TFourCC aAudioType = KMMFFourCCCodeNULL); williamr@2: IMPORT_C void OpenUrlL(const TDesC& aUrl, williamr@2: TInt aIapId, williamr@2: TInt aCameraHandle, williamr@2: TUid aControllerUid, williamr@2: TUid aVideoFormat, williamr@2: const TDesC8& aVideoType = KNullDesC8, williamr@2: TFourCC aAudioType = KMMFFourCCCodeNULL); williamr@2: IMPORT_C void Close(); williamr@2: IMPORT_C void Prepare(); williamr@2: IMPORT_C void Record(); williamr@2: IMPORT_C TInt Stop(); williamr@2: IMPORT_C void PauseL(); williamr@4: IMPORT_C void SetPriorityL(TInt aPriority, TInt aPref); williamr@2: IMPORT_C void GetPriorityL(TInt& aPriority, TMdaPriorityPreference& aPref) const; williamr@2: IMPORT_C void SetVideoFrameRateL(TReal32 aFrameRate); williamr@2: IMPORT_C TReal32 VideoFrameRateL() const; williamr@2: IMPORT_C void SetVideoFrameSizeL(const TSize& aSize); williamr@2: IMPORT_C void GetVideoFrameSizeL(TSize& aSize) const; williamr@2: IMPORT_C void SetVideoBitRateL(TInt aBitRate); williamr@2: IMPORT_C TInt VideoBitRateL(); williamr@2: IMPORT_C void SetAudioBitRateL(TInt aBitRate); williamr@2: IMPORT_C TInt AudioBitRateL() const; williamr@2: IMPORT_C void SetAudioEnabledL(TBool aEnabled); williamr@2: IMPORT_C TBool AudioEnabledL() const; williamr@2: IMPORT_C TTimeIntervalMicroSeconds DurationL() const; williamr@2: IMPORT_C void SetMaxClipSizeL(TInt aClipSizeInBytes); williamr@2: IMPORT_C void SetGainL(TInt aGain); williamr@2: IMPORT_C TInt GainL() const; williamr@2: IMPORT_C TInt MaxGainL() const; williamr@2: IMPORT_C TInt NumberOfMetaDataEntriesL() const; williamr@2: IMPORT_C CMMFMetaDataEntry* MetaDataEntryL(TInt aIndex) const; williamr@2: IMPORT_C void AddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry); williamr@2: IMPORT_C void RemoveMetaDataEntryL(TInt aIndex); williamr@2: IMPORT_C void ReplaceMetaDataEntryL(TInt aIndex,const CMMFMetaDataEntry& aNewEntry); williamr@2: IMPORT_C TFourCC AudioTypeL() const; williamr@2: IMPORT_C void SetVideoTypeL(const TDesC8& aType); williamr@2: IMPORT_C void SetAudioTypeL(TFourCC aType); williamr@2: IMPORT_C void GetSupportedVideoTypesL(CDesC8Array& aVideoTypes) const; williamr@2: IMPORT_C void GetSupportedAudioTypesL(RArray& aAudioTypes) const; williamr@2: IMPORT_C TTimeIntervalMicroSeconds RecordTimeAvailable() const; williamr@2: IMPORT_C const TDesC8& VideoFormatMimeType() const; williamr@2: IMPORT_C const CMMFControllerImplementationInformation& ControllerImplementationInformationL(); williamr@2: IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom); williamr@2: IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2); williamr@2: IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus); williamr@2: IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus); williamr@2: IMPORT_C void SetPixelAspectRatioL(const TVideoAspectRatio& aAspectRatio); williamr@2: IMPORT_C void GetPixelAspectRatioL(TVideoAspectRatio& aAspectRatio) const; williamr@2: IMPORT_C void GetSupportedPixelAspectRatiosL(RArray& aAspectRatios) const; williamr@2: IMPORT_C void SetAudioChannelsL(const TUint aNumChannels); williamr@2: IMPORT_C TUint AudioChannelsL() const; williamr@2: IMPORT_C void GetSupportedAudioChannelsL(RArray& aChannels) const; williamr@2: IMPORT_C void SetAudioSampleRateL(const TUint aSampleRate); williamr@2: IMPORT_C TUint AudioSampleRateL() const; williamr@2: IMPORT_C void GetSupportedAudioSampleRatesL(RArray &aSampleRates) const; williamr@4: IMPORT_C void SetVideoEnabledL(TBool aEnabled); williamr@4: IMPORT_C TBool VideoEnabledL() const; williamr@4: IMPORT_C void SetVideoQualityL(TInt aQuality); williamr@4: IMPORT_C TInt VideoQualityL() const; williamr@4: IMPORT_C void SetVideoFrameRateFixedL(TBool aFixedFrameRate); williamr@4: IMPORT_C TBool VideoFrameRateFixedL() const; williamr@2: williamr@2: private: williamr@2: enum TMMFVideoRecorderState williamr@2: { williamr@2: EStopped, williamr@2: EOpening, williamr@2: EPaused, williamr@2: ERecording williamr@2: }; williamr@2: williamr@2: private: williamr@2: CBody* iBody; williamr@2: friend class CBody; williamr@2: }; williamr@2: williamr@2: #endif