diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedengine/videoprocessor/inc/movieprocessor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedengine/videoprocessor/inc/movieprocessor.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,248 @@ +/* +* 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: +* Movie processor interface class. +* +*/ + + + +#ifndef __MOVIEPROCESSOR_H__ +#define __MOVIEPROCESSOR_H__ + + +#include +#include +#include + +#include "VedCommon.h" + +/* + * Forward declarations. + */ + +class CVedMovie; +class CVedMovieImp; +class CVedAudioClip; +class TVedVideoFrameInfo; +class TVideoProcessorAudioData; +class CMovieProcessorImpl; + +class MVedMovieProcessingObserver; + +/** + * Movie processor. + */ +class CMovieProcessor : public CBase + { +public: + + /** + * Constructors for instantiating new movie processors. + * Should reserve as little resources as possible at this point. + */ + static CMovieProcessor* NewL(); + static CMovieProcessor* NewLC(); + + /** + * Destructor can be called at any time (i.e., also in the middle of a processing operation). + * Should release all allocated resources, including releasing all allocated memory and + * *deleting* all output files that are currently being processed but not yet completed. + */ + virtual ~CMovieProcessor(); + + /** + * Read the header from the specified video clip file and return its properties. + * The file should be opened with EFileShareReadersOnly share mode. + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * - KErrNotFound if there is no file with the specified name + * in the specified directory (but the directory exists) + * - KErrPathNotFound if the specified directory + * does not exist + * - KErrUnknown if the specified file is of unknown format + * + * @param aFileName name of the file to read + * @aFileHandle handle of the file to read + * @param aVideoFormat for returning the video format + * @param aVideoType for returning the video type + * @param aResolution for returning the resolution + * @param aAudioType for returning the audio type + * @param aDuration for returning the duration + * @param aVideoFrameCount for returning the number of video frames + * @param aSamplingRate for returning the sampling rate + * @param aChannelMode for returning the channel mode + */ + void GetVideoClipPropertiesL(const TDesC& aFileName, + RFile* aFileHandle, + TVedVideoFormat& aFormat, + TVedVideoType& aVideoType, + TSize& aResolution, + TVedAudioType& aAudioType, + TTimeIntervalMicroSeconds& aDuration, + TInt& aVideoFrameCount, + TInt& aSamplingRate, + TVedAudioChannelMode& aChannelMode); + + /** + * Read video frame information from the specified video clip file and fills array of info for + * all frames in video.The file should be opened with EFileShareReadersOnly share mode. Video processor + * should not free the video frame info array after it has passed it on as a return value + * of this function. Returned array should be allocated with User::AllocL() and should be + * freed by the caller of this method with User::Free(). + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * - KErrNotFound if there is no file with the specified name + * in the specified directory (but the directory exists) + * - KErrPathNotFound if the specified directory + * does not exist + * - KErrUnknown if the specified file is of unknown format + * + * @param aFileName name of the file to read + * @param aFileHandle handle of the file to read + * @param aVideoFrameInfoArray Array for video frame parameters + */ + void GenerateVideoFrameInfoArrayL(const TDesC& aFileName, RFile* aFileHandle, TVedVideoFrameInfo*& aVideoFrameInfoArray); + + /** + * Returns an estimate of the total size of the specified movie. + * + * @return size estimate in bytes + */ + TInt GetMovieSizeEstimateL(const CVedMovie* aMovie); + + /** + * Calculate movie size estimate for MMS + * + * @param aMovie Movie object + * @param aTargetSize Maximum size allowed + * @param aStartTime Time of the first frame included in the MMS output + * @param aEndTime Time of the last frame included in the MMS output + * @return Error code + */ + TInt GetMovieSizeEstimateForMMSL(const CVedMovie* aMovie, TInt aTargetSize, + TTimeIntervalMicroSeconds aStartTime, TTimeIntervalMicroSeconds& aEndTime); + + /** + * Do all initializations necessary to start generating a thumbnail, e.g. open files, + * allocate memory. The video clip file should be opened with EFileShareReadersOnly + * share mode. The thumbnail should be scaled to the specified resolution and + * converted to the specified display mode. If this method leaves, destructor should be called to free + * allocated resources. + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * - KErrNotFound if there is no file with the specified name + * in the specified directory (but the directory exists) + * - KErrPathNotFound if the specified directory + * does not exist + * - KErrUnknown if the specified file is of unknown format + * - KErrNotSupported if the specified combination of parameters + * is not supported + * + * @param aFileName name of the file to generate thumbnail from + * @param aFileHandle handle of the file to generate thumbnail from + * @param aIndex Frame index for selecting the thumbnail frame + * -1 means the best thumbnail is retrieved + * @param aResolution resolution of the desired thumbnail bitmap, or + * NULL if the thumbnail should be + * in the original resolution + * @param aDisplayMode desired display mode; or ENone if + * any display mode is acceptable + * @param aEnhance apply image enhancement algorithms to improve + * thumbnail quality; note that this may considerably + * increase the processing time needed to prepare + * the thumbnail + */ + void StartThumbL(const TDesC& aFileName, RFile* aFileHandle, TInt aIndex, TSize aResolution, + TDisplayMode aDisplayMode, TBool aEnhance); + + /** + * Starts thumbnail generation. Thumbnail generation is an asynchronous operation, + * and its completion is informed to the caller via Active object request completion; + * the iStatus member of the caller is passed as a parameter to this method. + * + * This method may leave if an error occurs in initiating the thumbnail generation. + * If this method leaves, destructor should be called to free allocated resources. + * + * @param aStatus Reference to caller's iStatus member variable + * @param aFactor Pointer to a TVedTranscodeFactor structure, which is updated by this method + * + * @return + * + */ + void ProcessThumbL(TRequestStatus &aStatus, TVedTranscodeFactor* aFactor); + + /** + * Method for retrieving the completed thumbnail bitmap. + * + * Video processor should not free the CFbsBitmap instance after it has passed it on + * as a return value of this function + * + */ + void FetchThumb(CFbsBitmap*& aThumb); + + /** + * Do all initializations necessary to start processing a movie, e.g. open files and + * allocate memory. After initialization, processing is started and the observer + * is notified. The source video and audio files should be opened with + * EFileShareReadersOnly share mode. If this method leaves, destructor should be called + * to free allocated resources. + * + * Possible leave codes: + * . + * + * @param aMovie movie to process + * @param aFilename output file name + * @param aFilename output file handle + */ + void StartMovieL(CVedMovieImp* aMovie, const TDesC& aFileName, RFile* aFileHandle, + MVedMovieProcessingObserver *aObserver); + + /** + * Cancels the processing of a movie. The processor is reseted to an idle state. + * The user must call StartMovieL again after this to start processing again. + * + * Possible leave codes: + * . + * + */ + void CancelProcessingL(); + + /** + * Sets the maximum size for the movie + * + * @param aLimit Maximum size in bytes + */ + void SetMovieSizeLimit(TInt aLimit); + + +protected: + CMovieProcessor(); + + void ConstructL(); + +private: + TInt iThumbProgress; + TInt iMovieProgress; + RPointerArray iAudioDataArray; + CMovieProcessorImpl* iMovieProcessor; + }; + + +#endif // __MEDIAPROCESSOR_H__ +