diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedengine/inc/VedVideoClipInfoImp.h --- /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 + +#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__ +