diff -r 000000000000 -r 951a5db380a0 videditor/SimpleVideoEditor/inc/SimpleVideoEditorImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videditor/SimpleVideoEditor/inc/SimpleVideoEditorImpl.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,350 @@ +/* +* 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 _SIMPLEVIDEOEDITORIMPL_H_ +#define _SIMPLEVIDEOEDITORIMPL_H_ + +// + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include "SimpleVideoEditorExitObserver.h" +#include "ExtProgressDialog.h" +#include "VeiImageClipGenerator.h" +#include "VeiTitleClipGenerator.h" + +#include "SimpleVideoEditor.h" +#include "veisettings.h" + +// FORWARD DECLATATIONS +class CVeiTempMaker; +class CExtProgressDialog; +class CDummyControl; +class CErrorUI; + + +// CLASS DECLARATION +NONSHARABLE_CLASS(CSimpleVideoEditorImpl) : public CActive, + public MVedMovieObserver, + public MVedMovieProcessingObserver, + public MVeiImageClipGeneratorObserver, + public MProgressDialogCallback, + public MExtProgressDialogCallback, + public MCoeForegroundObserver, + public MVedAudioClipInfoObserver + { + public: // Constructor and destructor + + static CSimpleVideoEditorImpl* NewL(MSimpleVideoEditorExitObserver& aExitObserver); + ~CSimpleVideoEditorImpl(); + + public: // New functions + + void StartMerge( const TDesC& aSourceFileName ); + void StartChangeAudio( const TDesC& aSourceFileName ); + void StartAddText( const TDesC& aSourceFileName ); + + void StartWaitDialogL(); + void StartProgressDialogL(); + void StartAnimatedProgressDialogL (); + void CancelMovieProcessing(); + + private: // from CActive + + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + private: // from MProgressDialogCallback + + void DialogDismissedL( TInt aButtonId ); + + private: //from MVedMovieObserver + + void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex); + void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError); + void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex); + void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex); + void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyVideoClipSettingsChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyStartTransitionEffectChanged(CVedMovie& aMovie); + void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyEndTransitionEffectChanged(CVedMovie& aMovie); + void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex); + void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError); + void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex); + void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex); + void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, TInt aIndex); + void NotifyMovieQualityChanged(CVedMovie& aMovie); + void NotifyMovieReseted(CVedMovie& aMovie); + void NotifyMovieOutputParametersChanged(CVedMovie& aMovie); + void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); + void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); + void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); + void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); + + private: //from MVedMovieProcessingObserver + + void NotifyMovieProcessingStartedL(CVedMovie& aMovie); + void NotifyMovieProcessingProgressed(CVedMovie& aMovie, TInt aPercentage); + void NotifyMovieProcessingCompleted(CVedMovie& aMovie, TInt aError); + + public: // from MVedAudioClipInfoObserver + + void NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, TInt aError ); + + public: //from MVeiImageClipGeneratorObserver + + void NotifyImageClipGeneratorInitializationComplete(CVeiImageClipGenerator& aGenerator, TInt aError); + + private: // From MCoeForegroundObserver + + virtual void HandleGainingForeground(); + virtual void HandleLosingForeground(); + + private: // Construct + + CSimpleVideoEditorImpl(MSimpleVideoEditorExitObserver& aExitObserver); + void ConstructL(); + + private: // New functions + + // Helper functions to keep RunL function smaller + void InitializeOperationL(); + void GetMergeInputFileL(); + void GetAudioFileL(); + void GetTextL(); + + TInt ShowListQueryL( TInt& aPosition, TInt aHeadingResourceId, TInt aQueryResourceId ) const; + + void StartMovieProcessingL(const TDesC& aSourceFile); + + void RestoreOrientation(); + + /** FilterError + * + * Sets error code based on current values of iState and iOperationMode + * i.e this is a context sensitive error mapping function + * + * @param + * @return new error code + */ + TInt FilterError() const; + + /** CompleteRequest + * + * Force RunL + * + * @param - + * @return - + */ + void CompleteRequest(); + + /** + * Shows error note with given message. + * + * @param aResourceId No description. + */ + void ShowErrorNote( const TInt aResourceId ) const; + + /** + * HandleError + * + * @param aErr Error code + */ + void HandleError(); + + /* QueryAudioInsertionL + * + * Launches a query dialog in case audio clip is shorter or longer + * than the video clip + * + * @param - + * @return 0 if user selects "No", + * 1 if video and audio clips are the same length or + * the user selects "Yes" + */ + TInt QueryAudioInsertionL( TTimeIntervalMicroSeconds aVideoDuration, + TTimeIntervalMicroSeconds aAudioDuration ); + + /** + * ProcessingOkL + * + * Called after succesfull processing + */ + void ProcessingOkL(); + + /** + * ProcessingFailed + * + * Called after unsuccesfull processing + */ + void ProcessingFailed(); + + /** QueryAndSaveL + * + * Displays Avkon file handling queries + * + * @param aSourceFileName name of the video clip that + * is selected to be merged + * @return TInt 1 if the video should be saved, + * 0 if the user has cancelled the saving + * + */ + TInt QueryAndSaveL(const TDesC& aSourceFileName); + + /* LaunchSaveVideoQueryL + * + * Launches a query dialog "Save video:" with items + * "Replace original" and "Save with a new name" + * + * @param - + * @return - list query id or -1 if the user selects No + */ + TInt LaunchSaveVideoQueryL (); + + /* LaunchSaveChangesQueryL + * + * Launches a query dialog "Save changes?" query. + * + * @param - + * @return 0 if user selects "No", otherwise 1 + */ + TInt LaunchListQueryDialogL (MDesCArray * aTextItems, + const TDesC & aPrompt); + + void ResolveCaptionNameL( TApaAppCaption& aCaption ) const; + + private: // Data + + enum TOperationMode + { + EOperationModeMin = 0, // invalid + EOperationModeMerge, + EOperationModeMergeWithVideo, + EOperationModeMergeWithImage, + EOperationModeChangeAudio, + EOperationModeAddText, + EOperationModeMax // invalid + } iOperationMode; + + enum TState + { + EStateMin = 0, // Invalid + EStateInitializing, + EStateInsertInputFirst, + EStateInsertInputSecond, + EStateInsertVideo, + EStateCreateImageGenerator, + EStateInsertImage, + EStateCheckAudioLength, + EStateInsertAudio, + EStateInsertTextToBegin, + EStateInsertTextToEnd, + EStateProcessing, + EStateProcessingOk, + EStateProcessingFailed, + EStateFinalizing, + EStateReady, + EOpMax // Invalid + } iState; + + CEikonEnv& iEnv; + + // Dummy control to eat key presses while dialogs are not active + CDummyControl* iDummyControl; + + // Interface to notify completion + MSimpleVideoEditorExitObserver& iExitObserver; + + RConeResourceLoader iResLoader; + + // + CVedMovie* iMovie; + + // Temporary file name for storing preview clip. + HBufC* iTempFile; + + // Owned by iMovie + CVeiImageClipGenerator* iImageClipGenerator; + + // Owned by iMovie + CVeiTitleClipGenerator* iTextGenerator; + + // Input and output file names + TFileName iSourceFileName; + TFileName iMergeFileName; + TFileName iAudioFileName; + HBufC* iAddText; + TFileName iOutputFileName; + + // Store the original orientation when forcing to portrait + CAknAppUiBase::TAppUiOrientation iOriginalOrientation; + + // For process priority manipulation + TProcessPriority iOriginalProcessPriority; + TBool iProcessPriorityAltered; + + // Progress dialog. + CAknProgressDialog* iProgressDialog; + + // Progress dialog. + CExtProgressDialog* iAnimatedProgressDialog; + + // Wait dialog. + CAknWaitDialog* iWaitDialog; + + TInt iPercentagesProcessed; + TInt iCancelPercentage; + TInt iError; + + // Position where the image or video will be merged + // 0 if to the beginning, 1 if to the end. + TInt iVideoOrImageIndex; + + /** Error UI */ + CErrorUI* iErrorUI; + + /** Pointer to an instance of CVedAudioClipInfo */ + CVedAudioClipInfo* iAudioClipInfo; + + /** Allowed audio mime types, used as playback in video */ + CDesCArrayFlat *iAcceptedAudioTypes; + + /** Used to figure out if the CVeiImageClipGenerator::NewL() has + * completed in a situation where the action is cancelled. */ + TBool iGeneratorComplete; + TBool iDialogDismissed; + }; + +// +#endif + +// End of file