--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoContainer.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,560 @@
+/*
+* 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 VEICUTVIDEOCONTAINER_H
+#define VEICUTVIDEOCONTAINER_H
+
+#include <coecntrl.h>
+#include <VideoPlayer.h>
+#include <VedCommon.h>
+#include <VedMovie.h>
+#include <aknprogressdialog.h>
+#include <coedef.h>
+
+#include "VeiVideoDisplay.h"
+#include "VeiImageConverter.h"
+#include "VeiRemConTarget.h"
+#include "mveinavipanecontrolobserver.h"
+
+
+class CVeiSimpleCutVideoView;
+class CVeiCutterBar;
+class CAknsBasicBackgroundControlContext;
+class CVeiErrorUI;
+class CVeiVideoDisplay;
+class CVeiTextDisplay;
+#ifdef RD_TACTILE_FEEDBACK
+class MTouchFeedback;
+#endif /* RD_TACTILE_FEEDBACK */
+
+//const TInt KMinVolumeLevel = 1;
+const TInt KVeiCutBarHeight = 20;
+const TInt KProgressbarFinalValue = 50;
+_LIT(KEncoderType, "JPEG" ); // encoder type for image conversion
+
+/**
+ * CVeiSimpleCutVideoContainer container control class.
+ *
+ * Container for CVeiSimpleCutVideoView.
+ */
+class CVeiSimpleCutVideoContainer : public CCoeControl,
+ public MCoeControlObserver,
+ public MVedVideoClipFrameObserver,
+ public MVedVideoClipInfoObserver,
+ public MConverterController,
+ public MProgressDialogCallback,
+ public MVeiVideoDisplayObserver,
+ public MVeiMediakeyObserver,
+ public MVeiNaviPaneControlObserver
+ {
+ public:
+ /**
+ * Edit state.
+ */
+ enum TCutVideoState
+ {
+ EStateInitializing = 1,
+ EStateOpening,
+ EStateStoppedInitial,
+ EStateStopped,
+ EStatePlaying,
+ EStatePlayingMenuOpen,
+ EStatePaused,
+ EStateGettingFrame,
+ EStateBuffering,
+ EStateTerminating
+ };
+
+ /**
+ * Start or end mark.
+ */
+ enum TCutMark
+ {
+ ENoMark,
+ EStartMark,
+ EEndMark,
+ EPlayHead
+ };
+
+ public:
+ /**
+ * Creates a CVeiSimpleCutVideoContainer object, which will draw itself to aRect.
+ *
+ * @param aRect Frame rectangle for container.
+ * @param aView
+ *
+ * @return a pointer to the created instance of CStoryboardContainer
+ */
+ static CVeiSimpleCutVideoContainer* NewL( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI );
+
+ /**
+ * Creates a CVeiSimpleCutVideoContainer 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
+ *
+ * @return a pointer to the created instance of CStoryboardContainer
+ */
+ static CVeiSimpleCutVideoContainer* NewLC( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI );
+
+ /**
+ * Default constructor.
+ *
+ * @param aRect Frame rectangle for container.
+ * @param aView pointer to the view.
+ */
+ void ConstructL(const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CVeiSimpleCutVideoContainer();
+
+ public:
+ /**
+ * Takes one thumbnail bitmap from given file.
+ *
+ * @param aFilename name of video clip file
+ */
+ void GetThumbL( const TDesC& aFilename );
+
+ /**
+ * ###Missin' description###
+ *
+ * @param aState
+ */
+ void SetStateL( CVeiSimpleCutVideoContainer::TCutVideoState aState, TBool aUpdateCBA = ETrue);
+ /**
+ * Starts playing.
+ *
+ * @param aStartTime
+ */
+ void PlayL( const TDesC& aFilename );
+ void PlayMarkedL( const TDesC& aFilename,
+ const TTimeIntervalMicroSeconds& aStartTime,
+ const TTimeIntervalMicroSeconds& aEndTime );
+ /**
+ * Stops playing.
+ */
+ void StopL();
+
+ /**
+ * Pauses playing.
+ */
+ void PauseL( TBool aUpdateCBA = ETrue );
+
+ /**
+ * Closes the stream.
+ */
+ void CloseStreamL();
+
+ /**
+ * Returns the playback position.
+ *
+ * @return playback position
+ */
+ TTimeIntervalMicroSeconds PlaybackPositionL();
+
+ /**
+ * Marks the in point.
+ */
+ void MarkedInL();
+
+ /**
+ * Marks the out point.
+ */
+ void MarkedOutL();
+
+ /**
+ * Sets cut in time to cut video bar.
+ *
+ * @param aTime Cut ín time
+ */
+ void SetInTime( const TTimeIntervalMicroSeconds& aTime );
+
+ /**
+ * Sets cut out time to cut video bar.
+ *
+ * @param aTime Cut out time
+ */
+ void SetOutTime( const TTimeIntervalMicroSeconds& aTime );
+
+ /**
+ * Takes the snapshot from current frame
+ */
+ void TakeSnapshotL();
+
+ void MuteL();
+ public:
+
+ /**
+ * Update function that is called by the static callback method.
+ */
+ void DoUpdate();
+ // from MVeiVideoDisplayObserver
+ virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo = 0 );
+
+ virtual void NotifyVideoClipFrameCompleted(CVedVideoClipInfo& aInfo,
+ TInt aError,
+ CFbsBitmap* aFrame);
+ /**
+ * Called to notify that video clip info is ready
+ * for reading.
+ *
+ * Possible error codes:
+ * - <code>KErrNotFound</code> if there is no file with the specified name
+ * in the specified directory (but the directory exists)
+ * - <code>KErrPathNotFound</code> if the specified directory
+ * does not exist
+ * - <code>KErrUnknown</code> if the specified file is of unknown format
+ *
+ * @param aInfo video clip info
+ * @param aError <code>KErrNone</code> if info is ready
+ * for reading; one of the system wide
+ * error codes if reading file failed
+ */
+ virtual void NotifyVideoClipInfoReady(CVedVideoClipInfo& aInfo,
+ TInt aError);
+
+ /**
+ * From CCoeControl, OfferKeyEventL.
+ *
+ * @param aKeyEvent key event
+ * @param aType event code
+ */
+ TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+ /**
+ * From MProgressDialogCallback, DialogDismissedL.
+ *
+ * @param aButtonId button id
+ */
+ virtual void DialogDismissedL( TInt aButtonId );
+
+ /**
+ * Opens a video clip file and initializes videoplayerutility.
+ *
+ * @param aFilename file to open
+ */
+ void OpenFileL( const TDesC& aFilename/*, TBool aStartPlaying = EFalse */);
+
+ /**
+ * Prepares the control for termination; stops video playback
+ * and sets the state to EStateTerminating.
+ *
+ */
+ void PrepareForTerminationL();
+
+ // From MConverterController
+ void NotifyCompletion( TInt aErr );
+
+ void ResolveCaptionNameL( TApaAppCaption& aCaption ) const;
+
+ void FocusChanged(TDrawNow aDrawNow);
+
+ private:
+ /**
+ * Callback function for the timer.
+ *
+ * @param aThis self pointer
+ *
+ * @return dummy value
+ */
+ static TInt DoAudioBarUpdate( TAny* aThis );
+
+ /**
+ * Time increment.
+ *
+ * @param aKeyCount number a key events
+ * @return time
+ */
+ TInt TimeIncrement( TInt aKeyCount ) const;
+
+ /**
+ * Constructor.
+ *
+ * @param aView instance of cut video view
+ * @param aErrorUI instance of CVeiErrorUI
+ */
+ CVeiSimpleCutVideoContainer( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI );
+
+ /**
+ * Gets intra frame bitmap from video clip.
+ *
+ * @param aTime intra frame time.
+ */
+ void GetThumbAtL( const TTimeIntervalMicroSeconds& aTime );
+
+ /**
+ * From CoeControl, MopSupplyObject.
+ *
+ * @param aId
+ */
+ virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+
+ /**
+ * From CoeControl, SizeChanged.
+ */
+ void SizeChanged();
+
+ /**
+ * From CoeControl, CountComponentControls.
+ *
+ * @return number of component controls in this control
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl, ComponentControl.
+ *
+ * @param aIndex index of the control to return
+ */
+ CCoeControl* ComponentControl(TInt aIndex) const;
+
+ /**
+ * From CCoeControl,Draw.
+ *
+ * @param aRect region of the control to be redrawn
+ */
+ void Draw(const TRect& aRect) const;
+
+ /**
+ * 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;
+
+ /**
+ * From CCoeControl, HandleControlEventL
+ */
+ void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+
+ /**
+ * HandlePointerEventL
+ * Handles pen inputs
+ *
+ * @param aPointerEvent pointer event
+ */
+ void HandlePointerEventL(const TPointerEvent& aPointerEvent );
+
+ /**
+ * Handles progress bar touch events
+ * @param aPBRect Current progress bar rectangle
+ * @param aPressedPoint The x coordinate value that was pressed
+ * inside the progress bar
+ * @param aDragMarks ETrue if the user drags start or end marks.
+ * EFalse otherwise
+ */
+ void HandleProgressBarTouchL( TRect aPBRect, TInt aPressedPoint, TBool aDragMarks, CVeiSimpleCutVideoContainer::TCutMark aCutMark = ENoMark );
+
+ /**
+ * Rounds the parameter value to nearest second value
+ * @param aMicroSecs Time value in microseconds
+ * @return Rounded value in seconds
+ */
+ TInt RoundMicroSecsToSecs( TTimeIntervalMicroSeconds aMicroSecs );
+
+ /*
+ * Indicates ProgressNote.
+ *
+ */
+ void ShowProgressNoteL();
+
+ /**
+ * Shows information note with given message.
+ *
+ * @param aMessage message to show.
+ */
+ void ShowInformationNoteL( const TDesC& aMessage ) const;
+
+ /**
+ * The entity of ProgressCallBackL() function
+ * @return 0 when work is done, otherwise return 1.
+ */
+ TInt UpdateProgressNote();
+
+ /**
+ * Saves snapshot.
+ */
+ void SaveSnapshotL();
+
+ /**
+ * Cancels saving of the snapshot.
+ */
+ void CancelSnapshotSave();
+
+ void StopProgressDialog();
+
+ void ShowGlobalErrorNote(const TInt aErr);
+
+ /** HandleVolumeUpL
+ *
+ * @see MVeiMediakeyObserver
+ */
+ virtual void HandleVolumeUpL();
+
+ /**
+ * From MVeiNaviPaneControlObserver
+ */
+ void SetVolumeLevelL( TInt aVolume );
+
+ /** HandleVolumeDownL
+ *
+ * @see MVeiMediakeyObserver
+ */
+ virtual void HandleVolumeDownL();
+
+ /** Callback function */
+ static TInt AsyncTakeSnapshot(TAny* aThis);
+ /** Callback function */
+ static TInt AsyncSaveSnapshot(TAny* aThis);
+
+ /** LaunchSavingDialogsL
+ *
+ * Displays Avkon file handling queries
+ *
+ * @param
+ * @return ETrue if a file name is successfully created
+ * EFalse otherwise
+ *
+ */
+ TBool LaunchSavingDialogsL();
+
+ protected:
+ // implementation
+ void HandleVideoClickedL();
+
+ private: //data
+ /** cut video view */
+ CVeiSimpleCutVideoView& iView;
+
+ /** Error UI */
+ CVeiErrorUI& iErrorUI;
+
+ /** Video clip info*/
+ CVedVideoClipInfo* iVideoClipInfo;
+
+ /** Current state. */
+ TCutVideoState iState;
+
+ /** Previous state. */
+ TCutVideoState iPreviousState;
+
+ /** Previous state. */
+ TCutVideoState iPrevState;
+
+ /** cut video bar. */
+ CVeiCutterBar* iCutVideoBar;
+
+ /** Last position. */
+ TTimeIntervalMicroSeconds iLastPosition;
+
+ /** Video clip duration */
+ TTimeIntervalMicroSeconds iDuration;
+
+ /**
+ * Control context that provides a layout background with a
+ * background bitmap and its layout rectangle.
+ */
+ CAknsBasicBackgroundControlContext* iBgContext;
+
+ /** Key repeat count in seek function. */
+ TInt iKeyRepeatCount;
+
+ /** Seek thumbnail position in video clip. */
+ TTimeIntervalMicroSeconds iSeekPos;
+
+ /** Seek - flag. */
+ TBool iSeeking;
+
+ /** Frame ready - flag */
+ TBool iFrameReady;
+
+ /** Last keycode, used in OfferKeyEventL(); */
+ TUint iLastKeyCode;
+
+ /** The actuall calls to ICL are done from this image converter. */
+ CVeiImageConverter* iConverter;
+
+ //** Whether we need to take snapshot. */
+ TBool iTakeSnapshot;
+
+ /** Progress dialog */
+ CAknProgressDialog* iProgressDialog;
+
+ HBufC* iSaveToFileName;
+ TSize iFrameSize;
+ CPeriodic* iVideoBarTimer;
+ CVeiVideoDisplay* iVideoDisplay;
+ TRect iDisplayRect;
+ TRect iCutTimeDisplayRect;
+ CVeiTextDisplay* iCutTimeDisplay;
+ TBool iPlayOrPlayMarked;
+
+ TRect iIconDisplayRect;
+ CFbsBitmap* iPauseBitmap;
+ CFbsBitmap* iPauseBitmapMask;
+ CFbsBitmap* iPlayBitmap;
+ CFbsBitmap* iPlayBitmapMask;
+
+ /** Callback utility */
+ CAsyncCallBack* iCallBackSaveSnapshot;
+ CAsyncCallBack* iCallBackTakeSnapshot;
+
+ /** Remote connection API used to handle the volume keys. */
+ CVeiRemConTarget* iRemConTarget;
+
+ TBool iTakeSnapshotWaiting;
+
+ /** ETrue if user is dragging the start or end mark with a pen,
+ EFalse otherwise */
+ TBool iIsMarkDrag;
+
+ /** ETrue if the pen is in start or end mark area when it goes down,
+ EFalse otherwise */
+ TBool iIsMarkTapped;
+
+ /** ETrue if the pen is in display area or in play/pause button area
+ when it goes down, EFalse otherwise */
+ TBool iIsIconOrDisplayTapped;
+
+ /** Indicates which mark the user has tapped */
+ TCutMark iTappedMark;
+
+ /// Point where button down event has occured.
+ TPoint iButtonDownPoint;
+
+ /** File name that is used when saving the snapshot */
+ TFileName iSnapshotFileName;
+
+ // Feedback for screen touch:
+#ifdef RD_TACTILE_FEEDBACK
+ MTouchFeedback* iTouchFeedBack;
+#endif /* RD_TACTILE_FEEDBACK */
+
+#include "veicutvideocontainer.inl"
+
+ };
+#endif
+
+// End of File