--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/vedengine/inc/VedVideoClipInfoImp.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,453 @@
+/*
+* 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 __VEDVIDEOCLIPINFOIMP_H__
+#define __VEDVIDEOCLIPINFOIMP_H__
+
+
+#include <e32base.h>
+
+#include "movieprocessor.h"
+#include "VedCommon.h"
+#include "VedVideoClipInfo.h"
+
+#include "AudObservers.h"
+
+/*
+ * Forward declarations.
+ */
+class CFbsBitmap; // cannot include bitmap.h since video processor includes
+ // this file and fails to compile due to a strange compiler error
+ // "operator delete must return type void" if bitmap.h
+ // is included
+
+class CVedVideoClipInfo;
+class TVedVideoFrameInfo;
+class CVedVideoClipInfoOperation;
+class CVedVideoClipFrameOperation;
+class CAudClipInfo;
+class CVedVideoClip;
+
+
+/**
+ * Utility class for getting information about video clip files.
+ */
+class CVedVideoClipInfoImp : public CVedVideoClipInfo
+ {
+public:
+
+ static CVedVideoClipInfo* NewL(CAudClipInfo* aAudClipInfo,
+ const TDesC& aFileName, MVedVideoClipInfoObserver& aObserver);
+ /**
+ * Destroys the object and releases all resources.
+ */
+ ~CVedVideoClipInfoImp();
+
+
+ /* General property methods. */
+
+
+ TPtrC DescriptiveName() const;
+
+ /**
+ * Returns the file name of the clip. Panics if info
+ * is not yet ready for reading.
+ *
+ * @return file name of the clip
+ */
+ TPtrC FileName() const;
+
+ CVedVideoClipGenerator* Generator() const;
+
+ TVedVideoClipClass Class() const;
+
+ /**
+ * Returns the video format of the clip. Panics if info
+ * is not yet ready for reading.
+ *
+ * @return video format of the clip
+ */
+ TVedVideoFormat Format() const;
+
+ /**
+ * Returns the video type of the clip. Panics if info
+ * is not yet ready for reading.
+ *
+ * @return video type of the clip
+ */
+ TVedVideoType VideoType() const;
+
+ /**
+ * Returns the resolution of the clip. Panics if info
+ * is not yet ready for reading.
+ *
+ * @return resolution of the clip
+ */
+ TSize Resolution() const;
+
+ /**
+ * Returns whether this video clip has an audio track or not.
+ * Panics if info is not yet ready for reading.
+ *
+ * @return <code>ETrue</code> if clip has an audio track;
+ * <code>EFalse</code> otherwise
+ */
+ TBool HasAudio() const;
+
+ /**
+ * Returns the audio type of the clip audio track. Panics if info
+ * is not yet ready for reading.
+ *
+ * @return audio type of the clip audio track
+ */
+ TVedAudioType AudioType() const;
+
+ /**
+ * Returns the channel mode of the audio if applicable.
+ *
+ * @return channel mode
+ */
+ TVedAudioChannelMode AudioChannelMode() const;
+
+ /**
+ * Returns the sampling rate in kilohertz.
+ *
+ * @return sampling rate
+ */
+ TInt AudioSamplingRate() const;
+
+ /**
+ * Returns the duration of the clip in microseconds. Panics if info
+ * is not yet ready for reading.
+ *
+ * @return duration of the clip
+ */
+ TTimeIntervalMicroSeconds Duration() const;
+
+
+ /* Video frame property methods. */
+
+ /**
+ * Returns the number of video frames in this clip. Panics if info
+ * is not yet ready for reading.
+ *
+ * @return number of video frames in this clip
+ */
+ TInt VideoFrameCount() const;
+
+ /**
+ * Generates video frame info that is needed in VideoFrame API functions.
+ *
+ * @return error code
+ */
+ TInt GenerateVideoFrameInfoArrayL();
+
+ /**
+ * Returns the start time of the video frame at the specified index.
+ * Panics if info is not yet ready for reading or the index is illegal.
+ *
+ * @param aIndex index
+ *
+ * @return start time of the video frame at the specified index in microseconds
+ */
+ TTimeIntervalMicroSeconds VideoFrameStartTimeL(TInt aIndex);
+
+ /**
+ * Returns the end time of the video frame at the specified index.
+ * Panics if info is not yet ready for reading or the index is illegal.
+ *
+ * @param aIndex index
+ *
+ * @return end time of the video frame at the specified index in microseconds
+ */
+ TTimeIntervalMicroSeconds VideoFrameEndTimeL(TInt aIndex);
+
+ /**
+ * Returns the duration of the video frame at the specified index.
+ * Panics if info is not yet ready for reading or the index is illegal.
+ *
+ * @param aIndex index
+ *
+ * @return duration of the video frame at the specified index in microseconds
+ */
+ TTimeIntervalMicroSeconds VideoFrameDurationL(TInt aIndex);
+
+ /**
+ * Returns the size of the video frame at the specified index.
+ * Panics if info is not yet ready for reading or the index is illegal.
+ *
+ * @param aIndex index
+ *
+ * @return size of the video frame at the specified index in bytes
+ */
+ TInt VideoFrameSizeL(TInt aIndex);
+
+ /**
+ * Returns whether the video frame at the specified index is an intra
+ * frame or not. Panics if info is not yet ready for reading or
+ * the index is illegal.
+ *
+ * @param aIndex index
+ *
+ * @return <code>ETrue</code>, if the video frame at the specified index is an
+ * intra frame; <code>EFalse</code>, otherwise
+ */
+ TBool VideoFrameIsIntraL(TInt aIndex);
+
+ /**
+ * Returns the video frame index at the specified time. Panics if info is not yet
+ * ready for reading or the time is illegal.
+ *
+ * @param aTime time
+ *
+ * @return video frame index at the specified time
+ */
+ TInt GetVideoFrameIndexL(TTimeIntervalMicroSeconds aTime);
+
+
+ /* Frame methods. */
+
+ void GetFrameL(MVedVideoClipFrameObserver& aObserver,
+ TInt aIndex,
+ TSize* const aResolution,
+ TDisplayMode aDisplayMode,
+ TBool aEnhance,
+ TInt aPriority);
+
+ void CancelFrame();
+
+ void SetTranscodeFactor(TVedTranscodeFactor aFactor);
+
+ TVedTranscodeFactor TranscodeFactor();
+
+ /**
+ * Returns whether video clip is MMSCompatible.
+ *
+ * @return ETrue if compatible with MMS
+ */
+ TBool IsMMSCompatible();
+
+ static CVedVideoClipInfo* NewL(CAudClipInfo* aAudClipInfo,
+ RFile* aFileHandle, MVedVideoClipInfoObserver& aObserver);
+
+ RFile* FileHandle() const;
+
+private:
+ CVedVideoClipInfoImp(CAudClipInfo* aAudClipInfo);
+
+ void ConstructL(const TDesC& aFileName,
+ MVedVideoClipInfoObserver& aObserver);
+
+ void ConstructL(RFile* aFileHandle,
+ MVedVideoClipInfoObserver& aObserver);
+
+private:
+ // Member variables
+
+ // Get audio info operation.
+ CVedVideoClipInfoOperation* iInfoOperation;
+ // Flag to indicate then info is available
+ TBool iReady;
+
+ // Filename of the video clip.
+ HBufC* iFileName;
+
+ // File handle of the video clip
+ RFile* iFileHandle;
+
+ // Vídeo format.
+ TVedVideoFormat iFormat;
+ // Video type/codec.
+ TVedVideoType iVideoType;
+ // Resolution of video clip.
+ TSize iResolution;
+ // Duration of the video clip.
+ TTimeIntervalMicroSeconds iDuration;
+ // Frame count of video
+ TInt iVideoFrameCount;
+ // Array of frame information.
+ TVedVideoFrameInfo* iVideoFrameInfoArray;
+
+ // Operation to retrieve thumbnail of video clip.
+ CVedVideoClipFrameOperation* iFrameOperation;
+
+ // Transcode factor
+ TVedTranscodeFactor iTimeFactor;
+
+ // Is the frame info array ready
+ TBool iVideoFrameInfoArrayReady;
+
+ // Flag for audio clip info ownership
+ TBool iAudClipInfoOwnedByVideoClipInfo;
+
+ // Whether the video clip info is part of a video clip or just the info
+ TBool iVideoClipIsStandalone;
+
+ // Audio clip info.
+ CAudClipInfo* iAudClipInfo;
+
+ // These are got from iAudClipInfo
+
+ // Audio type/codec.
+ //TVedAudioType iAudioType;
+ // Following members are only used for AAC audio
+ // Channel mode
+ //TVedAudioChannelMode iAudioChannelMode;
+ // Sampling rate
+ //TInt iAudioSamplingRate;
+
+ friend class CVedVideoClipInfoOperation;
+ friend class CVedVideoClipFrameOperation;
+ friend class CVedVideoClipInfo;
+ };
+
+
+/**
+ * Internal class for storing information about video frames.
+ */
+class TVedVideoFrameInfo
+ {
+public:
+ /** Frame start time in MILLISECONDS (not microseconds). */
+ TInt iStartTime;
+
+ /** Frame size in bytes. */
+ TInt iSize;
+
+ /** Frame information flags. */
+ TInt8 iFlags;
+ };
+
+#define KVedVideoFrameInfoFlagIntra (1 << 0)
+
+
+/**
+ * Internal class for reading information from a video clip file.
+ * Also implements a simple active object to notify the video clip info
+ * observer when reading has been completed.
+ */
+class CVedVideoClipInfoOperation : public CActive, MAudClipInfoObserver
+ {
+public:
+ /* Static constructor */
+ static CVedVideoClipInfoOperation* NewL(CVedVideoClipInfoImp* aInfo,
+ MVedVideoClipInfoObserver& aObserver);
+protected:
+ /*
+ * From CActive
+ * Standard active object RunL
+ */
+ void RunL();
+
+ /*
+ * From CActive
+ * Standard active object DoCancel
+ */
+ void DoCancel();
+
+private:
+ /* Default constructor */
+ CVedVideoClipInfoOperation(CVedVideoClipInfoImp* aInfo,
+ MVedVideoClipInfoObserver& aObserver);
+ /* Standard Symbian OS two phased constructor */
+ void ConstructL();
+ /* Destructor */
+ ~CVedVideoClipInfoOperation();
+
+private: // functions from base classes
+
+ /* From MAudClipInfoObserver */
+ void NotifyClipInfoReady(CAudClipInfo& aInfo, TInt aError);
+private:
+ // Class to contain video clip info.
+ CVedVideoClipInfoImp* iInfo;
+ // Observer of video clip info operation.
+ MVedVideoClipInfoObserver* iObserver;
+ // Error code from prosessor.
+ TInt iMovieProcessorError;
+ // This flag tells us whether we're reading the audio clip info
+ TBool iGettingAudio;
+
+ friend class CVedVideoClipInfoImp;
+ };
+
+/**
+ * Internal class for generating a frame from a video clip file.
+ */
+class CVedVideoClipFrameOperation : public CActive
+ {
+public:
+ /* Static constructor */
+ static CVedVideoClipFrameOperation* NewL(CVedVideoClipInfoImp* iInfo);
+
+protected:
+ /*
+ * From CActive
+ * Standard active object RunL
+ */
+ void RunL();
+
+ /*
+ * From CActive
+ * Standard active object DoCancel
+ */
+ void DoCancel();
+
+private:
+ /* Default constructor */
+ CVedVideoClipFrameOperation(CVedVideoClipInfoImp* iInfo);
+ /* Standard Symbian OS two phased constructor */
+ void ConstructL();
+ /* Destructor */
+ ~CVedVideoClipFrameOperation();
+
+ /*
+ * Start frame operation.
+ *
+ * @aparam aObserver Observer of thumbnail operation.
+ * @aparam aIndex Index of frame that is converted to thumbnail.
+ * @aparam aResolution Wanted resolution of thumbnail.
+ * @aparam aPriority Priority of active object.
+ */
+ void StartL(MVedVideoClipFrameObserver& aObserver,
+ TInt aIndex, TSize* const aResolution,
+ TDisplayMode aDisplayMode, TBool aEnhance, TInt aPriority);
+
+private:
+ // Pointer to info class this thumbnail operation is part of.
+
+ CVedVideoClipInfoImp* iInfo;
+ // Index of the wanted frame.
+ TInt iIndex;
+
+ // Observer of the thumbnail operation.
+ MVedVideoClipFrameObserver* iObserver;
+
+ TVedTranscodeFactor iFactor;
+
+ TBool iThumbRequestPending;
+
+ CMovieProcessor* iProcessor;
+
+ friend class CVedVideoClipInfoImp;
+ };
+
+#endif // __VEDVIDEOCLIPINFOIMP_H__
+