--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/mceclientstub/inc/mcefilesource.h Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2006 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:
+*
+*/
+
+
+#ifndef MCEFILESOURCE_H
+#define MCEFILESOURCE_H
+
+// INCLUDES
+#include "mcemediasource.h"
+#include "mcemediastream.h"
+
+// CONSTANTS
+const TMceSourceType KMceFileSource = 4;
+
+//FORWARD DECLARATIONS
+class CMceManager;
+
+// CLASS DECLARATION
+
+/**
+* Class representing file source in MCE.
+*
+* CMceFileSource can be used for streaming file contents. The file may contain
+* both audio and video data. If the user wants to stream both media types,
+* the same file source should be attached to audio stream and video stream.
+*
+* The file may contain also several elements of the same media type (e.g.
+* 3 audio channels) and the user might want to use only some of those.
+* This can be handled by defining index of the file's current media element:
+*
+* - Get number of audio media elements within the file (e.g. returns 3)
+* - Set current audio element index to be 0
+* - Attach the file source to the audioStreamOne (audio element 0 is attached)
+* - Set current audio element index to be 2
+* - Attach the file source to the audioStreamTwo (audio element 2 is attached)
+* - Consequently, file's audio channel 0 would be streamed over the audioStreamOne
+* and channel 2 over the audioStreamTwo. Channel 1 would be ignored.
+*
+* Enable (continue) and Disable (pause) operations to it are considered
+* to be local, so they are not signalled to remote terminal.
+*
+* @lib mceclient.lib
+*/
+class CMceFileSource : public CMceMediaSource
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aManager associated MCE manager
+ * @param aFileName name of the file including full path info
+ */
+ IMPORT_C static CMceFileSource* NewL( CMceManager& aManager,
+ const TFileName& aFileName );
+
+ /**
+ * Two-phased constructor.
+ * @param aManager associated MCE manager
+ * @param aFileName name of the file including full path info
+ */
+ IMPORT_C static CMceFileSource* NewLC( CMceManager& aManager,
+ const TFileName& aFileName );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CMceFileSource();
+
+
+ public: // From CMceMediaSource
+
+ /**
+ * Enables the source explicitly.
+ */
+ IMPORT_C void EnableL();
+
+ /**
+ * Disables the source explicitly.
+ */
+ IMPORT_C void DisableL();
+
+
+ public: // Functions
+
+ /**
+ * Updates file for the source.
+ * @param aFileName name of the file including full path info
+ */
+ IMPORT_C void UpdateL ( const TFileName& aFileName );
+
+ /**
+ * Determines how many media elements of the spesified type the file
+ * source contains. E.g. audio file may contain N number of audio
+ * channels which has to be streamed over N number of audio streams.
+ * @param aType the type of media
+ * @return the number of media elements (of spesified type)
+ * the file contains
+ */
+ IMPORT_C TInt MediaElementCountL( TMceMediaType aType ) const;
+
+ /**
+ * Sets currently managed media element of the spesified media type.
+ * The setting is effective when the file source is attached to
+ * media stream of the spesified type. Current media element can be
+ * defined for each media type the file contains. By default, media
+ * element 0 of each media type is used.
+ * @param aType the type of media
+ * @param aIndex new index of the current media element
+ * @leave KErrArgument if media element spesified by input parameters
+ * does not exist
+ */
+ IMPORT_C void SetCurrentMediaElementL( TMceMediaType aType, TInt aIndex );
+
+ /**
+ * Gets currently managed media element of the spesified media type.
+ * @param aType the type of media
+ * @return index of the current media element or KErrNotFound if no media
+ * elements of the spesified type exists
+ */
+ IMPORT_C TInt CurrentMediaElement( TMceMediaType aType );
+
+ /**
+ * Sets the position within the file from where to start playback.
+ * @pre IsEnabled() == EFalse and contains audio/video
+ * @param aPosition from start of the file in microseconds
+ */
+ IMPORT_C void SetPositionL( const TTimeIntervalMicroSeconds& aPosition );
+
+ /**
+ * Gets the current playback position in microseconds from the start of the file.
+ * @pre contains audio/video
+ * @return current position from start of the file in microseconds
+ */
+ IMPORT_C TTimeIntervalMicroSeconds PositionL() const;
+
+ /**
+ * Returns the duration of the file in microseconds.
+ * @pre contains audio/video
+ * @return duration of the file in microseconds.
+ */
+ IMPORT_C TTimeIntervalMicroSeconds DurationL() const;
+
+ /**
+ * Sets fast forward on/off.
+ * @pre contains video
+ * @param aUseFFWD ETrue if fast forward is enabled; otherwise EFalse
+ */
+ IMPORT_C void SetFastForwardL( TBool aUseFFWD );
+
+ /**
+ * Sets fast rewind on/off.
+ * @pre contains video
+ * @param aUseFRWD ETrue if fast rewind is enabled; otherwise EFalse
+ */
+ IMPORT_C void SetFastRewindL( TBool aUseFRWD );
+
+ /**
+ * Starts transcoding of file. After the transcoding is complete,
+ * file of this source is changed into the transcoded file.
+ * @pre CMceMediaStream::State() == ETranscodingRequired
+ * @post CMceMediaStream::State() == ETranscoding
+ * @param aFileName Name of the transcoding output file.
+ */
+ IMPORT_C void TranscodeL( const TFileName& aFileName );
+
+ /**
+ * Cancels transcoding of file.
+ * @pre CMceMediaStream::State() == ETranscoding
+ * @post CMceMediaStream::State() == ETranscodingRequired
+ */
+ IMPORT_C void CancelTranscodeL();
+
+ /**
+ * Gets the current transcoding progress in percentage.
+ * Value is updated with MMceStreamObserver::StreamStateChanged() event.
+ * @pre CMceMediaStream::State() == ETranscoding
+ * @return Transcoding progress in persentage (0-100).
+ */
+ IMPORT_C TInt TranscodingProgressL() const;
+
+
+ public: // internal
+
+ /**
+ * Initializes
+ * @param aManager the manager. Ownership is NOT transferred
+ */
+ void InitializeL( CMceManager* aManager );
+
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CMceFileSource* NewL();
+
+ /**
+ * Two-phased constructor.
+ */
+ static CMceFileSource* NewLC();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CMceFileSource();
+
+ /**
+ * Second-phase constructor.
+ */
+ void ConstructL( CMceManager* aManager,
+ const TFileName& aFileName );
+
+
+ public: // Stub data
+
+ TBool iFastForward;
+ TBool iFastRewind;
+ TTimeIntervalMicroSeconds iPosition;
+
+ //TMceFileInfo iFileInfo;
+ //TBuf8<256> iFileName;
+
+ TBool iInitialInfoRetrieved;
+
+ TInt iCurrentAudioElement;
+ TInt iCurrentVideoElement;
+
+
+ TFileName iFileName;
+ TTimeIntervalMicroSeconds iDuration;
+ TInt iAudioElementCount;
+ TInt iVideoElementCount;
+
+ TInt iTranscodingPercentage;
+
+ // If this code is != KErrNone, next operation that can fail will fail
+ // (leave or return a value) with this code. Variable is reseted before
+ // failing.
+ // Obs! Check that wanted failing is really implemented in this stub
+ mutable TInt iFailWithCode;
+
+ };
+
+
+#endif