diff -r 000000000000 -r 951a5db380a0 videditor/ManualVideoEditor/inc/VeiCutAudioContainer.h --- /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 +#include +#include +#include +#include +#include +#include + +#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