diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/VedVideoClipInfoImp.h --- a/videoeditorengine/vedengine/inc/VedVideoClipInfoImp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,453 +0,0 @@ -/* -* 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 - -#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 ETrue if clip has an audio track; - * EFalse 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 ETrue, if the video frame at the specified index is an - * intra frame; EFalse, 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__ -