diff -r ccd8e69b5392 -r 496ad160a278 mmshplugins/mmcctranscoder/tsrc/stubs/inc/vedmovie.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmcctranscoder/tsrc/stubs/inc/vedmovie.h Fri Jun 11 13:36:18 2010 +0300 @@ -0,0 +1,601 @@ +/* +* Copyright (c) 2003 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 __VEDMOVIE_H__ +#define __VEDMOVIE_H__ + +#include +#include +#include "VedVideoClipInfo.h" +#include "VedAudioClipInfo.h" + +/* + * Constant definitions. + */ + +const TInt KVedClipIndexAll(-1); + + + + +class CVedMovie; +class TVedDynamicLevelMark; + +/** + * Observer for movie events. + *

+ * Note that every change operation that is made to a movie or the clips it consists of + * results in a maximum of one notification method called (that is, more than one + * notification method is never called as a result of a single change). For example, + * changing the index of a clip results in the NotifyVideoClipIndicesChanged() + * method being called once. The NotifyVideoClipTimingsChanged() method is not + * called even if the timings of several clips may have changed as a result. See the + * descriptions of the notification methods for more detailed information. + * + * @see CVedMovie + */ +class MVedMovieObserver + { +public: + + /** + * Called to notify that a new video clip has been successfully + * added to the movie. Note that the indices and the start and end times + * of the video clips after the new clip have also changed as a result. + * Note that the transitions may also have changed. + * + * @param aMovie movie + * @param aIndex index of video clip in movie + */ + virtual void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex) = 0; + + /** + * Called to notify that adding a new video clip to the movie has failed. + * + * Possible error codes: + * - 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 format of the file is recognized but + * adding it to the movie is not supported (e.g., it is of different resolution + * or format than the other clips) + * + * @param aMovie movie + * @param aError one of the system wide error codes + */ + virtual void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError) = 0; + + /** + * Called to notify that a video clip has been removed from the movie. + * Note that the indices and the start and end times of the video clips after + * the removed clip have also changed as a result. Note that the + * transitions may also have changed. + * + * @param aMovie movie + * @param aIndex index of the removed video clip + */ + virtual void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex) = 0; + + /** + * Called to notify that a video clip has moved (that is, its index and + * start and end times have changed). Note that the indices and the start and + * end times of the clips between the old and new indices have also changed + * as a result. Note that the transitions may also have changed. + * + * @param aMovie movie + * @param aOldIndex old index of the moved clip + * @param aNewIndex new index of the moved clip + */ + virtual void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, + TInt aNewIndex) = 0; + + /** + * Called to notify that the timings (that is, the cut in or cut out time or + * the speed and consequently the end time, edited duration, and possibly audio + * settings) of a video clip have changed (but the index of the clip has + * not changed). Note that the start and end times of the video clips + * after the changed clip have also changed. + * + * @param aMovie movie + * @param aClip changed video clip + */ + virtual void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, + TInt aIndex) = 0; + + /** + * Called to notify that the color effect or a color tone of the existing effect + * of a video clip has changed. + * + * @param aMovie movie + * @param aClip changed video clip + */ + virtual void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, + TInt aIndex) = 0; + + /** + * Called to notify that the audio settings of a video clip have changed. + * + * @param aMovie movie + * @param aClip changed video clip + */ + virtual void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, + TInt aIndex) = 0; + + /** + * Called to notify that some generator-specific settings of + * a generated video clip have changed. + * + * @param aMovie movie + * @param aClip changed video clip + */ + virtual void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, + TInt aIndex) = 0; + + /** + * Called to notify that the descriptive name of a clip has changed. + * + * @param aMovie movie + * @param aIndex changed video clip index + */ + virtual void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, + TInt aIndex) = 0; + + /** + * Called to notify that the start transition effect of the movie + * has changed (but no other changes have occurred). + * + * @param aMovie movie + */ + virtual void NotifyStartTransitionEffectChanged(CVedMovie& aMovie) = 0; + + /** + * Called to notify that a middle transition effect has changed + * (but no other changes have occurred). + * + * @param aMovie movie + * @param aIndex index of the changed middle transition effect + */ + virtual void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, + TInt aIndex) = 0; + + /** + * Called to notify that the end transition effect of the movie + * has changed (but no other changes have occurred). + * + * @param aMovie movie + */ + virtual void NotifyEndTransitionEffectChanged(CVedMovie& aMovie) = 0; + + /** + * Called to notify that a new audio clip has been successfully + * added to the movie. Note that the indices of the audio clips + * starting after the new clip have also changed as a result. + * + * @param aMovie movie + * @param aClip new audio clip + */ + virtual void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex) = 0; + + /** + * Called to notify that adding a new audio clip to the movie has failed. + * + * Possible error codes: + * - 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 aMovie movie + * @param aError one of the system wide error codes + */ + virtual void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError) = 0; + + /** + * Called to notify that an audio clip has been removed from the movie. + * Note that the indices of the audio clips starting after the removed + * clip have also changed as a result. + * + * @param aMovie movie + * @param aIndex index of the removed audio clip + */ + virtual void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex) = 0; + + /** + * Called to notify that an audio clip has moved (that is, its + * index has changed). This may happen when the start time of the audio + * clip is changed. Note that the indices of the clips between the old and + * new indices have also changed as a result. + * + * @param aMovie movie + * @param aOldIndex old index of the moved clip + * @param aNewIndex new index of the moved clip + */ + virtual void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, + TInt aNewIndex) = 0; + + /** + * Called to notify that the timings (for example, the start time or + * the duration) of an audio clip have changed (but the index of the + * clip has not changed as a result). + * + * @param aMovie movie + * @param aClip changed audio clip + */ + virtual void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, + TInt aIndex) = 0; + + /** + * Called to notify that the quality setting of the movie has been + * changed. + * + * @param aMovie movie + */ + virtual void NotifyMovieQualityChanged(CVedMovie& aMovie) = 0; + + /** + * Called to notify that the movie has been reseted. + * + * @param aMovie movie + */ + virtual void NotifyMovieReseted(CVedMovie& aMovie) = 0; + + /** + * Called to notify that the output parameters have been changed + * + * @param aMovie movie + */ + virtual void NotifyMovieOutputParametersChanged(CVedMovie& aMovie) = 0; + + /** + * Called to notify that a dynamic level mark has been inserted + * to an audio clip. + * + * @param aMovie movie + * @param aClipIndex audio clip index + * @param aMarkIndex index of the inserted level mark + */ + virtual void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex) = 0; + + /** + * Called to notify that a dynamic level mark has been inserted + * to an audio clip. + * + * @param aMovie movie + * @param aClipIndex audio clip index + * @param aMarkIndex index of the inserted level mark + */ + virtual void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex) = 0; + + /** + * Called to notify that a dynamic level mark has been inserted + * to an audio clip. + * + * @param aMovie movie + * @param aClipIndex audio clip index + * @param aMarkIndex index of the inserted level mark + */ + virtual void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex) = 0; + + /** + * Called to notify that a dynamic level mark has been inserted + * to an audio clip. + * + * @param aMovie movie + * @param aClipIndex audio clip index + * @param aMarkIndex index of the inserted level mark + */ + virtual void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex) = 0; + }; + + +/** + * Observer for movie processing operations. + * + * + * @see CVedMovie + */ +class MVedMovieProcessingObserver + { +public: + /** + * Called to notify that a new movie processing operation has been started. + * + * @param aMovie movie + */ + virtual void NotifyMovieProcessingStartedL(CVedMovie& aMovie) = 0; + + /** + * Called to inform about the current progress of the movie processing operation. + * + * @param aMovie movie + * @param aPercentage percentage of the operation completed, must be + * in range 0..100 + */ + virtual void NotifyMovieProcessingProgressed(CVedMovie& aMovie, TInt aPercentage) = 0; + + /** + * Called to notify that the movie processing operation has been completed. + * + * @param aMovie movie + * @param aError error code why the operation was completed. + * KErrNone if the operation was completed + * successfully. + */ + virtual void NotifyMovieProcessingCompleted(CVedMovie& aMovie, TInt aError) = 0; + }; + + +/** + * Video movie, which consists of zero or more video clips and zero or more audio clips. + * + * @see CVedVideoClip + * @see CVedAudioClip + */ +class CVedMovie : public CBase + { +public: + + /** + * Enumeration for movie quality settings. + */ + enum TVedMovieQuality + { + EQualityAutomatic = 0, + EQualityMMSInteroperability, + EQualityResolutionCIF, // Obsolete, please use Medium/High instead + EQualityResolutionQCIF, // Obsolete, please use Medium/High instead + EQualityResolutionMedium, + EQualityResolutionHigh, + EQualityLast // this should always be the last + }; + + +public: + + /* Constructors & destructor. */ + + /** + * Constructs a new empty CVedMovie object. May leave if no resources are available. + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * + * @param aFs file server session to use to lock the video and audio + * clip files of the new movie; or NULL to not to lock the files + * + * @return pointer to a new CVedMovie instance + */ + static CVedMovie* NewL(RFs* aFs); + + /** + * Constructs a new empty CVedMovie object and leaves the object in the cleanup stack. + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * + * @param aFs file server session to use to lock the video and audio + * clip files of the new movie; or NULL to not to lock the files + * + * @return pointer to a new CVedMovie instance + */ + static CVedMovie* NewLC(RFs* aFs); + + + ~CVedMovie(); + + + /** + * Sets the quality setting of this movie. + * + * @param aQuality quality setting + */ + virtual void SetQuality(TVedMovieQuality aQuality); + + + /** + * Returns the video type of this movie. + * + * @return video type of this movie + */ + virtual TVedVideoType VideoType() const; + + /** + * Returns the resolution of this movie. Panics with + * TVedPanic::EMovieEmpty if there are no clips + * in the movie. + * + * @return resolution of the movie + */ + virtual TSize Resolution() const; + + /** + * Returns the audio type of the movie audio track. + * + * @return audio type of the movie audio track + */ + virtual TVedAudioType AudioType() const; + + /** + * Returns the audio sampling rate of the movie audio track. + * + * @return audio sampling rate of the movie audio track. + */ + virtual TInt AudioSamplingRate() const; + + /** + * Returns the audio channel mode of the movie audio track. + * + * @return audio channel mode of the movie audio track. + */ + virtual TVedAudioChannelMode AudioChannelMode() const; + + + /** + * Inserts a video clip from the specified file to the specified index + * in this movie. The observers are notified when the clip has been added + * or adding clip has failed. Panics with EMovieAddOperationAlreadyRunning + * if another add video or audio clip operation is already running. + * Panics with code USER-130 if the clip index is invalid. + * The file will be opened in EFileShareReadersOnly mode by default, + * and the same mode should be used by the client too if it need to open + * the file at the same time. + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * + * @param aFileName file name of the clip to add + * @param aIndex index the clip should be inserted at + */ + virtual void InsertVideoClipL(const TDesC& aFileName, TInt aIndex); + + + + /* Processing methods. */ + + /** + * Starts a video processing operation. This method is asynchronous and + * returns immediately. The processing will happen in the background and + * the observer will be notified about the progress of the operation. + * Processed data is written into the specified file. Panics with + * TVedPanic::EMovieEmpty if there are no clips + * in the movie. Note that calling ProcessL may cause + * changes in the maximum frame rates of generated clips. + * + * Possible leave codes: + * - KErrNoMemory if memory allocation fails + * - KErrAccessDenied if the file access is denied + * - KErrDiskFull if the disk is full + * - KErrWrite if not all data could be written + * - KErrBadName if the filename is bad + * - KErrDirFull if the directory is full + * + * @param aObserver observer to be notified of the processing status + * @param aFileName name of the file to be written + */ + virtual void ProcessL(const TDesC& aFileName, + MVedMovieProcessingObserver& aObserver); + + /** + * Cancels the current video processing operation. If there is no + * operation in progress, the function does nothing. + */ + virtual void CancelProcessing(); + + + /* Observer methods. */ + + /** + * Registers a movie observer. Panics with panic code + * EMovieObserverAlreadyRegistered if the movie observer is + * already registered. + * + * @param aObserver observer that will receive the events + */ + virtual void RegisterMovieObserverL(MVedMovieObserver* aObserver); + + /** + * Unregisters a movie observer. + * + * @param aObserver observer to be unregistered + */ + virtual void UnregisterMovieObserver(MVedMovieObserver* aObserver); + + + /** + * Returns the target bitrate of the movie audio track. + * + * @return target bitrate of the movie audio track. + */ + virtual TInt AudioBitrate() const; + + /** + * Returns the target framerate of the movie video track. + * + * @return target framerate of the movie video track. + */ + virtual TReal VideoFrameRate() const; + + /** + * Sets the output parameters for the movie. Leaves + * with KErrNotSupported if a parameter is illegal, + * e.g., target bitrate is too high for the given + * codec. Setting a integer parameter to zero indicates + * that a default value will be used for that parameter. + * + * This method overrides the SetQuality method + * + * Possible leave codes: + * - KErrNotSupported if setting is not valid + * + * @param Output parameters + */ + + virtual void SetOutputParametersL(TVedOutputParameters& aOutputParams); + +public: // Stub stuff + + void ConstructL(); + + CVedMovie(); + + enum TVedMovieCurrentCallbackType + { + ENotifyVideoClipAdded, + ENotifyMovieQualityChanged, + ENotifyMovieOutputParametersChanged, + ENotifyMovieProcessingStartedL, + ENotifyMovieProcessingProgressed, + ENotifyMovieProcessingCompleted + }; + + void IssueCallback( TVedMovieCurrentCallbackType aCallback ); + + static TInt AsyncTimerExpired(TAny* aPtr); + + void DoCurrentCallbackL(); + + MVedMovieObserver* iObserver; + MVedMovieProcessingObserver* iProcessObserver; + + CDeltaTimer* iDeltaTimer; + TCallBack iDeltaTimerCallBack; + TDeltaTimerEntry iDeltaTimerEntry; + + TVedMovieCurrentCallbackType iCurrentCallback; + TInt iProgress; + + TVedMovieQuality iQuality; + TVedOutputParameters iOutputParams; + TVedAudioType iAudioType; + + }; + + +#endif // __VEDMOVIE_H__ +