--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/ManualVideoEditor/inc/VeiCutAudioContainer.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,541 @@
+/*
+* 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 VEICUTAUDIOCONTAINER_H
+#define VEICUTAUDIOCONTAINER_H
+
+#include <coecntrl.h>
+#include <aknprogressdialog.h>
+#include <VideoPlayer.h>
+#include <VedCommon.h>
+#include <VedMovie.h>
+#include <MdaAudioSamplePlayer.h>
+#include <VedAudioClipInfo.h>
+
+#include "VeiRemConTarget.h"
+
+class CVeiCutAudioView;
+class CVeiCutterBar;
+class CAknsBasicBackgroundControlContext;
+class CVeiErrorUI;
+class CVeiTextDisplay;
+class CSampleArrayHandler;
+
+
+const TInt KMinCutAudioVolumeLevel = 1;
+const TInt KMaxCutAudioVolumeLevel = 10;
+
+/**
+ * CVeiCutAudioContainer container control class.
+ *
+ * Container for CVeiCutAudioView.
+ */
+class CVeiCutAudioContainer: public CCoeControl,
+ public MCoeControlObserver,
+ public MMdaAudioPlayerCallback,
+ public MVedAudioClipVisualizationObserver,
+ public MProgressDialogCallback,
+ public MVeiMediakeyObserver
+{
+public:
+ /**
+ * Edit state.
+ */
+ enum TCutAudioState
+ {
+ EStateInitializing = 1,
+ EStateOpening,
+ EStateStoppedInitial,
+ EStateStopped,
+ EStatePlaying,
+ EStatePlayingMenuOpen,
+ EStatePaused,
+ EStateTerminating
+ };
+
+ enum TMarkState
+ {
+ ENoMark = 0,
+ EMarked
+ };
+
+
+
+ /**
+ * Start or end mark.
+ */
+ enum TCutMark
+ {
+ ENoMarks,
+ EStartMark,
+ EEndMark
+ };
+
+
+
+public:
+ /**
+ * Creates a CStoryboardContainer object, which will draw itself to aRect.
+ *
+ * @param aRect Frame rectangle for container.
+ * @param aMovie movie being edited
+ *
+ * @return a pointer to the created instance of CStoryboardContainer
+ */
+ static CVeiCutAudioContainer* NewL( const TRect& aRect,
+ CVeiCutAudioView& aView,
+ CVeiErrorUI& aErrorUI );
+
+ /**
+ * Creates a CStoryboardContainer 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 CVeiCutAudioContainer* NewLC( const TRect& aRect,
+ CVeiCutAudioView& aView,
+ CVeiErrorUI& aErrorUI );
+
+ /**
+ * Default constructor.
+ *
+ * @param aRect Frame rectangle for container.
+ * @param aView pointer to the view.
+ */
+ void ConstructL( const TRect& aRect,
+ CVeiCutAudioView& aView,
+ CVeiErrorUI& aErrorUI );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CVeiCutAudioContainer();
+
+public:
+ void OpenAudioFileL( const TDesC& aFileName );
+
+ /**
+ * ###Missin' description###
+ *
+ * @param aState
+ */
+ void SetStateL( CVeiCutAudioContainer::TCutAudioState aState );
+ /**
+ * Starts playing.
+ *
+ * @param aStartTime
+ */
+ void PlayL( const TTimeIntervalMicroSeconds& aStartTime = TTimeIntervalMicroSeconds( 0 ) );
+
+ /**
+ * Stops playing.
+ */
+ void StopL();
+
+ /**
+ * Pauses playing.
+ */
+ void PauseL();
+
+ /**
+ * Closes the stream.
+ */
+ void CloseStreamL();
+
+ /**
+ * Returns the playback position.
+ *
+ * @return playback position
+ */
+ const TTimeIntervalMicroSeconds& PlaybackPositionL();
+
+ /**
+ * Marks the in point.
+ */
+ void MarkedInL();
+
+ /**
+ * Marks the out point.
+ */
+ void MarkedOutL();
+
+ /**
+ * Change volume level. Changes current volume level by given amount.
+ *
+ * @param aVolumeChange volume change
+ */
+ void SetVolumeL( TInt aVolumeChange );
+
+ /**
+ * Sets cut in time to cut video bar.
+ *
+ * @param aTime Cut in time
+ */
+ void SetInTimeL( const TTimeIntervalMicroSeconds& aTime );
+
+ /**
+ * Sets cut out time to cut video bar.
+ *
+ * @param aTime Cut out time
+ */
+ void SetOutTimeL( const TTimeIntervalMicroSeconds& aTime );
+
+ /**
+ * Sets duration to cut video bar.
+ *
+ * @param aTime duration
+ */
+ void SetDuration( const TTimeIntervalMicroSeconds& aDuration );
+
+public:
+ /**
+ * Update function that is called by the static callback method.
+ */
+ void DoUpdate();
+
+ /**
+ * From CCoeControl, OfferKeyEventL.
+ *
+ * @param aKeyEvent key event
+ * @param aType event code
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * Returns total length of the video clip.
+ *
+ * @return total length
+ */
+ const TTimeIntervalMicroSeconds& TotalLength();
+
+ /**
+ * Returns the player state.
+ *
+ * @return player state
+ */
+ inline TCutAudioState State() { return iState; };
+ /**
+ * Returns current volume level.
+ *
+ * @return volume level
+ */
+ inline TInt Volume() const { return iInternalVolume; };
+
+ /**
+ * Returns minimum volume level.
+ *
+ * @return min volume level
+ */
+ inline TInt MinVolume() const { return 1; };
+
+ /**
+ * Returns maximum volume level.
+ *
+ * @return max volume level
+ */
+ inline TInt MaxVolume()const { return iMaxVolume; };
+
+ /**
+ * Returns the visualization resolution.
+ *
+ * @return The visualization resolution, i.e. the size of the sample array
+ */
+ TInt VisualizationResolution()const;
+
+ /**
+ * Prepares the control for termination; stops audio playback
+ * and sets the state to EStateTerminating.
+ *
+ */
+ void PrepareForTerminationL();
+
+public:
+ virtual void NotifyAudioClipVisualizationStarted( const CVedAudioClipInfo& aInfo );
+
+ virtual void NotifyAudioClipVisualizationProgressed( const CVedAudioClipInfo& aInfo,
+ TInt aPercentage );
+ virtual void NotifyAudioClipVisualizationCompleted( const CVedAudioClipInfo& aInfo,
+ TInt aError,
+ TInt8* aVisualization,
+ TInt aResolution);
+
+private:
+ /**
+ * Callback function for the timer.
+ *
+ * @param aThis self pointer
+ *
+ * @return dummy value
+ */
+ static TInt DoAudioBarUpdate( TAny* aThis );
+
+ /**
+ * From MMdaAudioPlayerCallback
+ */
+ virtual void MapcInitComplete( TInt aError,
+ const TTimeIntervalMicroSeconds& aDuration );
+
+ virtual void MapcPlayComplete( TInt aError );
+
+ /**
+ * Time increment.
+ *
+ * @param aKeyCount number a key events
+ * @return time
+ */
+ TInt TimeIncrement( TInt aKeyCount )const;
+
+ /**
+ * Constructor.
+ *
+ * @param aView instance of cut audio view
+ * @param aErrorUI instance of CVeiErrorUI
+ */
+ CVeiCutAudioContainer( const TRect& aRect,
+ CVeiCutAudioView& aView,
+ CVeiErrorUI& aErrorUI );
+
+
+ /**
+ * Continue playing
+ */
+ void ResumeL();
+
+ /**
+ * Gets intra frame bitmap from video clip.
+ *
+ * @param aTime intra frame time.
+ */
+ void GetThumbAtL( 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, CVeiCutAudioContainer::TCutMark aCutMark = ENoMarks );
+
+
+
+ /**
+ * Update function that is called when visualization must be changed.
+ */
+ void UpdateVisualizationL();
+
+ /**
+ * Get the visualization data from the engine
+ */
+ void GetVisualizationL();
+
+ /**
+ * From MProgressDialogCallback
+ */
+ void DialogDismissedL( TInt aButtonId );
+
+ /** Callback function */
+ static TInt AsyncBack( TAny* aThis );
+
+ /**
+ * Propagate command to view's HandleCommandL
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * Draw the visualization, including background and indicators etc.
+ * to a bitmap, which can be blitted to the screen.
+ */
+ void DrawToBufBitmapL();
+
+ /**
+ * Start a progress note dialog
+ */
+ void LaunchProgressNoteL();
+
+ /** HandleVolumeUpL
+ *
+ * @see MVeiMediakeyObserver
+ */
+ virtual void HandleVolumeUpL();
+
+ /** HandleVolumeDownL
+ *
+ * @see MVeiMediakeyObserver
+ */
+ virtual void HandleVolumeDownL();
+
+private:
+ //data
+ /** cut video view */
+ CVeiCutAudioView& iView;
+
+ /** Error UI */
+ CVeiErrorUI& iErrorUI;
+
+ /** Current state. */
+ TCutAudioState iState;
+
+ /** Previous state. */
+ TCutAudioState iPrevState;
+
+ /** cut audio bar. */
+ CVeiCutterBar* iCutAudioBar;
+
+ /** 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;
+
+ /** Videoplayerutility volume */
+ TInt iInternalVolume;
+
+ /** Max volume */
+ TInt iMaxVolume;
+
+ /** 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;
+
+ CFbsBitmap* iPauseBitmap;
+ CFbsBitmap* iPauseBitmapMask;
+
+ /// Double buffer bitmap
+ CFbsBitmap* iBufBitmap;
+
+ CPeriodic* iVideoBarTimer;
+ CMdaAudioPlayerUtility* iAudioSamplePlayer;
+ TRect iCutTimeDisplayRect;
+ CVeiTextDisplay* iCutTimeDisplay;
+ TRect iIconDisplayRect;
+
+ CSampleArrayHandler* iSampleArrayHandler;
+
+ TInt iMarkOutCounter;
+ TInt iMarkInCounter;
+
+ TInt iPreviousScreenMode;
+ TInt iCurrentScreenMode;
+
+ TMarkState iMarkInState;
+ TMarkState iMarkOutState;
+
+ TTimeIntervalMicroSeconds iMarkedInTime;
+ TTimeIntervalMicroSeconds iMarkedOutTime;
+
+ /** Progress note. */
+ CAknProgressDialog* iProgressNote;
+
+ /** Callback utility */
+ CAsyncCallBack* iCallBack;
+
+ /** Remote connection API used to handle the volume keys. */
+ CVeiRemConTarget* iRemConTarget;
+
+ /** 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;
+
+ /** Indicates which mark the user has tapped */
+ TCutMark iTappedMark;
+};
+#endif
+
+// End of File