diff -r 000000000000 -r 951a5db380a0 videditor/ManualVideoEditor/inc/VeiEditVideoContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videditor/ManualVideoEditor/inc/VeiEditVideoContainer.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,837 @@ +/* +* 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 VEDEDITVIDEOCONTAINER_H +#define VEDEDITVIDEOCONTAINER_H + +#include +#include +#include +#include +#include +#include +#include + +#include "veivideodisplay.h" +#include "veiframetaker.h" +#include "veicutterbar.h" +#include "VeiDisplayLighter.h" +#include "VeiImageClipGenerator.h" +#include "VeiTitleClipGenerator.h" +#include "VeiImageConverter.h" +#include "VeiRemConTarget.h" +#include "VideoEditorCommon.h" + +const TInt KMaxZoomFactorX = 4; +const TInt KMaxZoomFactorY = 2; + +const TInt KVolumeSliderMin = -10; +const TInt KVolumeSliderMax = 10; +const TInt KVolumeSliderStep = 1; + +class CVedMovie; +class CVeiEditVideoView; +class CAknProgressDialog; +class CEikProgressInfo; +class CAknsBasicBackgroundControlContext; +class CVeiVideoDisplay; +class CVeiTextDisplay; +class CVeiCutterBar; +class CPeriodic; +class CVeiIconBox; +class CAknNavigationDecorator; +class CVeiSlider; +class CStoryboardVideoItem; +class CStoryboardAudioItem; +class CTransitionInfo; + +using namespace VideoEditor; + + +/** + * CVeiEditVideoContainer container control class. + * + */ +class CVeiEditVideoContainer: public CCoeControl, + public MCoeControlObserver, + public MVedMovieObserver, + public MVedVideoClipFrameObserver, + public MVedVideoClipInfoObserver, + public MProgressDialogCallback, + public MConverterController, + public MVeiVideoDisplayObserver, + public MVeiFrameTakerObserver, + public MVeiMediakeyObserver + + +{ +public: + + /** + * Creates a CVeiEditVideoContainer object, which will draw + * itself to aRect. + * + * @param aRect Frame rectangle for container. + * @param aMovie movie being edited + * @param aView owner + * + * @return a pointer to the created instance of CVeiEditVideoContainer + */ + static CVeiEditVideoContainer* NewL( const TRect& aRect, + CVedMovie& aMovie, + CVeiEditVideoView& aView ); + + /** + * Creates a CVeiEditVideoContainer object, which will draw + * itself to aRect. + * Leaves the created object in the cleanup stack. + * + * @param aRect Frame rectangle for container. + * @param aMovie movie being edited + * @param aView owner + * + * @return a pointer to the created instance of CVeiEditVideoContainer + */ + static CVeiEditVideoContainer* NewLC( const TRect& aRect, + CVedMovie& aMovie, + CVeiEditVideoView& aView ); + + /** + * Constructor. + * + * @param aMovie instance of CVedMovie + * @param aView instance of Edit Video View + */ + CVeiEditVideoContainer( CVedMovie& aMovie, CVeiEditVideoView& aView ); + + /** + * Default constructor. + * @param aRect Frame rectangle for container. + */ + void ConstructL( const TRect& aRect ); + + /** + * Destructor. + */ + virtual ~CVeiEditVideoContainer(); + + /** + * Enumeration for selection mode + */ + enum TSelectionMode + { + EModeNavigation = 0, + EModeMove, + EModeDuration, + EModeRecordingSetStart, + EModeRecording, + EModeRecordingPaused, + EModeSlowMotion, + EModePreview, + EModeMixingAudio, + EModeAdjustVolume + }; + + /** + * Enumeration for preview state + */ + enum TPreviewState + { + EStateInitializing = 0, + EStateOpening, + EStateStopped, + EStatePlaying, + EStatePaused, + EStateClosed, + EStateBuffering, + EStateGettingFrame, + EStateTerminating + }; + + TBool CurrentClipIsFile(); + + /** + * Sets cursor position to aCurrentIndex. If cursor is on audio track, + * audio index is set and if in video track, video cursor is set. + * + * @param aCurrentIndex Cursor position + */ + void SetCurrentIndex( TInt aCurrentIndex ); + + /** + * Returns the current index. + * + * @return current index + */ + TInt CurrentIndex()const; + + /** + * Updates thumbnail in video array. + * + * @aIndex Index in video array + */ + void UpdateThumbnailL( TInt aIndex ); + + /** + * Sets the selected status. + * + * @param aSelected status + */ + void SetSelectionMode( TSelectionMode aSelectionMode ); + + /** + * Control iInfoDisplay's arrows visibility . + */ + void ArrowsControl()const; + + /** + * Returns the current index and decrements index. + * + * @return current index + */ + TUint GetAndDecrementCurrentIndex(); + + void SetCursorLocation( TCursorLocation aCursorLocation ); + + void PlayVideoFileL( const TDesC& aFilename, const TBool& aFullScreen ); + + void PauseVideoL(); + + /** + * Starts playing video + */ + void PlayVideo( const TDesC& aFilename, TBool& aFullScreen ); + + void StopVideo( TBool aCloseStream ); + + /** + * Set starting value of slow motion. + * + * @param aSlowMotionStartValue slow motion value + */ + void SetSlowMotionStartValueL( TInt aSlowMotionStartValue ); + + void SetRecordedAudioDuration( const TTimeIntervalMicroSeconds& aDuration ); + void DrawTrackBoxes()const; + +public: + + /** + * Update function that is called by the static callback method. + */ + void DoUpdate(); + /** + * + */ + void SetFinishedStatus( TBool aStatus ); + /** + * + */ + void TakeSnapshotL(); + + /** + * Saves snapshot. + */ + void SaveSnapshotL(); + /** + * Gets intra frame bitmap from video clip. + * + * @param aTime intra frame time. + */ + void GetThumbAtL( const TTimeIntervalMicroSeconds& aTime ); + + /** + * + */ + TTimeIntervalMicroSeconds TotalLength(); + + /** + * Returns the playback position. + * @return playback position + */ + TTimeIntervalMicroSeconds PlaybackPositionL(); + + + /** + * Sets hole screen to black + * + * + */ + void SetBlackScreen( TBool aBlack ); + + + /** + * Returns snapshots size by bytes. + * + * + */ + TInt SnapshotSize(); + + /** + * Returns audio mixing ratio between original and imported track. + * Used in EModeMixAudio + * + */ + TInt AudioMixingRatio()const; + + /** + * Returns clip volume, used in EModeAdjustVolume + * + */ + TInt Volume()const; + + /** + * Prepares the control for termination; stops video playback + * and set the state to EStateTerminating. + * + */ + void PrepareForTerminationL(); + +private: + + /** + * Callback function for the timer. + * + * @param aThis self pointer + * + * @return dummy value 42 + */ + static TInt Update( TAny* aThis ); + + void StartZooming(); + + void ShowMiddleAnimationL( TVedMiddleTransitionEffect aMiddleEffect ); + + void ShowEndAnimationL( TVedEndTransitionEffect aEndEffect ); + + void ShowStartAnimationL( TVedStartTransitionEffect aStartEffect ); + + void SetColourToningIcons( TInt aIndex ); + + /** + * Handles video item timeline touch events + * @param aPointerEvent pointer event + */ + void HandleVideoTimelineTouchL( TPointerEvent aPointerEvent ); + + /** + * Handles volume slider touch events + * @param aPointerEvent pointer event + */ + void HandleVolumeSliderTouchL( TPointerEvent aPointerEvent ); + + /** + * Calculates the rects for the video items in the timeline + * and adds them to iVideoItemRectArray + */ + void CalculateVideoClipRects(); + + /** + * Goes through the table iVideoItemRectArray and + * finds the clip that the user has clicked. + * @param aPressedPointX The x coordinate value that was pressed + * inside the timeline + * @return index of the clip that the user has clicked or -1 if + * the click was in the empty part of the timeline + */ + TInt FindClickedClip( TInt aPressedPointX ); + +private: + + /** + * Gets album from aFilename. If file belongs to album, album name is + * returned in aAlbumName, otherwise KNullDesc. + */ + void GetAlbumL( const TDesC& aFilename, TDes& aAlbumName )const; + + /** + * Starts active object which takes thumbnails from videoclip. + * When completed -> NotifyFramesCompleted(...) + */ + void StartFrameTakerL( TInt aIndex ); + + /** + * + */ + void ConvertBW( CFbsBitmap& aBitmap )const; + + /** + * + */ + void ConvertToning( CFbsBitmap& aBitmap )const; + + + /** + * Gets an object whose type is encapsulated by the specified TTypeUid + * object. + * + * @param aId Encapsulates the Uid that identifies the type of object + * required. + * + * @return + */ + virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); + + + virtual void NotifyFramesCompleted( CFbsBitmap* aFirstFrame, + CFbsBitmap* aLastFrame, + CFbsBitmap* aTimelineFrame, + TInt aError ); + + + virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, + const TInt& aInfo = 0 ); + /** + * From MVedVideoClipInfoObserver + */ + virtual void NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo, + TInt aError ); + void NotifyCompletion( TInt aErr ); + + /** + * From MVedMovieObserver + */ + virtual void NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ); + + virtual void NotifyVideoClipAddingFailed( CVedMovie& aMovie, TInt aError ); + + virtual void NotifyVideoClipRemoved( CVedMovie& aMovie, TInt aIndex ); + + virtual void NotifyVideoClipIndicesChanged( CVedMovie& aMovie, + TInt aOldIndex, + TInt aNewIndex ); + + virtual void NotifyVideoClipTimingsChanged( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyVideoClipColorEffectChanged( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyVideoClipAudioSettingsChanged( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyStartTransitionEffectChanged( CVedMovie& aMovie ); + + virtual void NotifyMiddleTransitionEffectChanged( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyEndTransitionEffectChanged( CVedMovie& aMovie ); + + virtual void NotifyAudioClipAdded( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyAudioClipAddingFailed( CVedMovie& aMovie, + TInt aError ); + + virtual void NotifyAudioClipRemoved( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyAudioClipIndicesChanged( CVedMovie& aMovie, + TInt aOldIndex, + TInt aNewIndex ); + + virtual void NotifyAudioClipTimingsChanged( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyMovieReseted( CVedMovie& aMovie ); + + virtual void NotifyVideoClipFrameCompleted( CVedVideoClipInfo& aInfo, + TInt aError, + CFbsBitmap* aFrame ); + + virtual void NotifyVideoClipGeneratorSettingsChanged( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyVideoClipDescriptiveNameChanged( CVedMovie& aMovie, + TInt aIndex ); + + virtual void NotifyMovieQualityChanged( CVedMovie& aMovie ); + + virtual void NotifyMovieOutputParametersChanged( CVedMovie& aMovie ); + + virtual void NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex ); + + virtual void NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex ); + + virtual void NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex ); + + virtual void NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& aMovie, + TInt aClipIndex, + TInt aMarkIndex ); + + virtual void DialogDismissedL( TInt aButtonId ); + + /** + * Moves selected audio clip right. Only for OfferKeyEventL use. + * + * @return EKeyWasConsumed if key event was processed and + * EKeyWasNotConsumed if it was not. + */ + TKeyResponse MoveAudioRight(); + + /** + * Moves selected audio clip left. Only for OfferKeyEventL use. + * + * @return EKeyWasConsumed if key event was processed and + * EKeyWasNotConsumed if it was not. + */ + TKeyResponse MoveAudioLeft(); + + + /** + * Time increment. + * + * @return Time in milliseconds + */ + TInt TimeIncrement( TInt aKeyCount )const; + + /* + * From CoeControl,SizeChanged. + */ + void SizeChanged(); + + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + /** + * From CoeControl,CountComponentControls. + */ + TInt CountComponentControls()const; + + /** + * From CCoeControl,ComponentControl. + */ + CCoeControl* ComponentControl( TInt aIndex )const; + + /** + * From CCoeControl,Draw. + */ + void Draw( const TRect& aRect )const; + + /** + * From CCoeControl. Handles a change to the control's resources. + * @param aType A message UID value. + */ + void HandleResourceChange( TInt aType ); + + /** + * From CCoeControl, gets the control's help context. Associates the + * control with a particular Help file and topic in a context sensitive + * application. + * + * @param aContext Control's help context. + */ + void GetHelpContext( TCoeHelpContext& aContext )const; + + /** + * Draws play head when previewing video + */ + void DrawPlayHead() /*const*/; + + /** + * From MCoeControlObserver, called when there is a control event + * to handle. + * + * @param aControl control originating the event + * @param aEventType event type + */ + void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); + + /** + * From CCoeControl + * + * @param aPointerEvent pointer event + */ + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + + /** + * Callback function for the playhead timer. + * @param aThis self pointer + * @return dummy value 42 + */ + static TInt UpdatePosition( TAny* aThis ); + + /** + * Update function that is called by the static + * callback method - UpdatePosition. + */ + void DoUpdatePosition(); + + /** + * Returns the boolean is audioclip cutted. + * + * @return TBool + */ + TBool IsAudioClipCutted(); + + TKeyResponse HandleScrollBarL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + + void CreateScrollBarL( const TRect& aRect ); + + /** + * Cancels saving of the snapshot. + */ + void CancelSnapshotSave(); + + /** + * Starts progress dialog + * + * @param aDialogResId resource id of the dialog + * @param aTextResId text of dialog + */ + void StartProgressDialogL( const TInt aDialogResId, const TInt aTextResId ); + + void SetPreviewState( const TPreviewState aNewState ); + + /** HandleVolumeUpL + * + * @see MVeiMediakeyObserver + */ + virtual void HandleVolumeUpL(); + + /** HandleVolumeDownL + * + * @see MVeiMediakeyObserver + */ + virtual void HandleVolumeDownL(); + + /** Callback function */ + static TInt AsyncTakeSnapshot( TAny* aThis ); + +private: + CVeiDisplayLighter* iScreenLight; + /** View eg.owner*/ + CVeiEditVideoView& iView; + + /** Movie being edited. */ + CVedMovie& iMovie; + + /** Currently processed thumbnail index. */ + TInt iCurrentlyProcessedIndex; + + /** Video cursor position. */ + TInt iVideoCursorPos; + + /** Audio cursor position. */ + TInt iAudioCursorPos; + + /** No thumbnail icon. */ + CFbsBitmap* iNoThumbnailIcon; + CFbsBitmap* iNoThumbnailIconMask; + + /** Audio icon. */ + CFbsBitmap* iAudioIcon; + + /** Audio mixing icon. */ + CFbsBitmap* iAudioMixingIcon; + + CFbsBitmap* iAudioTrackIcon; + CFbsBitmap* iAudioTrackIconMask; + /** Video track icon. */ + CFbsBitmap* iVideoTrackIcon; + CFbsBitmap* iVideoTrackIconMask; + + /** Array of video items. */ + RPointerArray < CStoryboardVideoItem > iVideoItemArray; + + /** Array of audio items. */ + RPointerArray < CStoryboardAudioItem > iAudioItemArray; + + /** Array of video item rects. */ + RArray < TRect > iVideoItemRectArray; + + /** The index of the clip that the user has clicked. */ + TInt iClickedClip; + + /** The part of the timeline that doesn't include video clips. + If there are no video clips, the rect is the same as the + whole timeline (=iVideoBarBox) */ + TRect iEmptyVideoTimeLineRect; + + /** Cursor location. */ + TCursorLocation iCursorLocation; + + /** Selection mode. */ + TSelectionMode iSelectionMode; + + /** Transition info. */ + CTransitionInfo* iTransitionInfo; + + /** Previous cursor location. */ + TCursorLocation iPrevCursorLocation; + + /** Key repeat count. Incremented in OfferKeyEventL() */ + TInt iKeyRepeatCount; + + TSize iTransitionMarkerSize; + TRect iVideoBarBox; + TRect iAudioBarBox; + TPoint iAudioBarIconPos; + TRect iAudioTrackBox; + TPoint iVideoBarIconPos; + TRect iVideoTrackBox; + TRect iBarArea; + TRect iTextArea; + TInt iTextBaseline; + TRect iIconArea; + TRect iIconTopEmptyArea; + TRect iIconBottomEmptyArea; + TInt iIconTextBaseline; + TPoint iHorizontalSliderPoint; + TSize iHorizontalSliderSize; + TPoint iVerticalSliderPoint; + TSize iVerticalSliderSize; + + CAknProgressDialog* iProgressDialog; + //CEikProgressInfo* iProgressInfo; + + /** Background context. Skin stuff. */ + CAknsBasicBackgroundControlContext* iBgContext; + + TTimeIntervalMicroSeconds iRecordedAudioStartTime; + TTimeIntervalMicroSeconds iRecordedAudioDuration; + + TBool iRecordedAudio; + + TInt iZoomFactorX; + TInt iZoomFactorY; + CPeriodic* iZoomTimer; + + CVeiVideoDisplay* iVideoDisplay; + + CVeiVideoDisplay* iTransitionDisplayLeft; // left hand side + CVeiVideoDisplay* iTransitionDisplayRight; // right hand side + TRect iTransitionDisplayLeftBox; + TRect iTransitionDisplayRightBox; + + CVeiTextDisplay* iInfoDisplay; + CVeiTextDisplay* iArrowsDisplay; + + TRect iVideoDisplayBox; + TRect iVideoDisplayBoxOnTransition; + TRect iInfoDisplayBox; + TRect iSlowMotionBox; + TRect iTransitionArrowsBox; + + CVeiCutterBar* iDummyCutBar; + CVeiCutterBar* iDummyCutBarLeft; + + /* Iconbox */ + CVeiIconBox* iEffectSymbols; + TRect iEffectSymbolBox; + + TRect iDummyCutBarBox; + TRect iDummyCutBarBoxOnTransition; + + CFbsBitmap* iGradientBitmap; + + TBool iFinished; + TBool iTakeSnapshot; + HBufC* iSaveToFileName; + + /** Seek thumbnail position in video clip. */ + TTimeIntervalMicroSeconds iSeekPos; + + /** Seek - flag. */ + TBool iSeeking; + + /** Last keycode, used in OfferKeyEventL(); */ + TUint iLastKeyCode; + + /** Last position. */ + TTimeIntervalMicroSeconds iLastPosition; + + + /** Periodic timer used for playhead update . */ + CPeriodic* iPeriodic; + /** Current point. This is where the horizontal bar is drawn. */ + TUint iCurrentPoint; + CVeiImageConverter* iConverter; + + TInt iSlowMotionValue; + + //** Preview flag. */ + TBool iFullScreenSelected; + + CVeiFrameTaker* iFrameTaker; + + //** GetFrame-flag for seeking functionality. */ + TBool iSeekingFrame; + + HBufC* iTempFileName; + + CVedVideoClipInfo* iTempVideoInfo; + + /** Current preview state. */ + TPreviewState iPreviewState; + /** Previous preview state. */ + TPreviewState iPreviousPreviewState; + + TInt iCurrentPointX; + TBool iCloseStream; + TBool iFrameReady; + TBool iBackKeyPressed; + /** Previous cursor location for preview. */ + TCursorLocation iCursorPreviousLocation; + + /** Flag indicating to draw the screen black. */ + TBool iBlackScreen; + + /** Horizontal slider component. */ + CVeiSlider* iHorizontalSlider; + /** Vertical slider component. */ + CVeiSlider* iVerticalSlider; + + /** Flag telling whether video file must be reopened in preview. */ + TBool iMustBeReopened; + + /** Pause indicator. */ + TRect iPauseIconBox; + CFbsBitmap* iPauseBitmap; + CFbsBitmap* iPauseBitmapMask; + + /** Remote connection API used to handle the volume keys. */ + CVeiRemConTarget* iRemConTarget; + + TBool iTakeSnapshotWaiting; + + /** Callback utility */ + CAsyncCallBack* iCallBack; + + /** ETrue if user is dragging a video clip with touch, + EFalse otherwise */ + TBool iIsVideoDrag; + + /** ETrue if the pen goes down inside a timeline video clip + EFalse otherwise */ + TBool iIsVideoTapped; + + /** The position where the user is dragging the clip into */ + TInt iNewClipPosition; + +#include "veieditvideocontainer.inl" +}; + +#endif +// End of File