videditor/ManualVideoEditor/src/VeiCutAudioContainer.cpp
changeset 9 d87d32eab1a9
parent 0 951a5db380a0
equal deleted inserted replaced
0:951a5db380a0 9:d87d32eab1a9
     1 /*
       
     2 * Copyright (c) 2010 Ixonos Plc.
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - Initial contribution
       
    11 *
       
    12 * Contributors:
       
    13 * Ixonos Plc
       
    14 *
       
    15 * Description: 
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 // System includes
       
    22 #include <manualvideoeditor.rsg>
       
    23 #include <videoeditoruicomponents.mbg>
       
    24 #include <eikbtgpc.h>
       
    25 #include <coemain.h>
       
    26 #include <eikenv.h>
       
    27 #include <aknsbasicbackgroundcontrolcontext.h> 
       
    28 #include <aknsdrawutils.h> 
       
    29 #include <aknsdatacontext.h> 
       
    30 #include <stringloader.h>
       
    31 #include <aknnotewrappers.h> 
       
    32 #include <MdaAudioSamplePlayer.h>
       
    33 #include <eikprogi.h>
       
    34 #include <audiopreference.h>
       
    35 #include <aknlayoutscalable_avkon.cdl.h>
       
    36 #include <aknlayoutscalable_apps.cdl.h>
       
    37 // User includes
       
    38 #include "manualvideoeditor.hrh"
       
    39 #include "VeiAppUi.h"
       
    40 #include "VeiCutAudioContainer.h"
       
    41 #include "VeiCutAudioView.h"
       
    42 #include "VeiCutterBar.h"
       
    43 #include "veitextdisplay.h"
       
    44 #include "VideoEditorCommon.h"      // Video Editor UID
       
    45 #include "VideoEditorHelp.hlp.hrh"  // Topic contexts (literals)
       
    46 #include "VeiVideoEditorSettings.h"
       
    47 #include "VideoEditorUtils.h"
       
    48 #include "SampleArrayHandler.h"
       
    49 #include "VeiErrorUi.h"
       
    50 
       
    51 
       
    52 // ================= MEMBER FUNCTIONS =======================
       
    53 CVeiCutAudioContainer* CVeiCutAudioContainer::NewL( const TRect& aRect, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI )
       
    54     {
       
    55     CVeiCutAudioContainer* self = CVeiCutAudioContainer::NewLC( aRect, aView, aErrorUI );
       
    56     CleanupStack::Pop( self );
       
    57     return self;
       
    58     }
       
    59 
       
    60 CVeiCutAudioContainer* CVeiCutAudioContainer::NewLC( const TRect& aRect, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI )
       
    61     {
       
    62     CVeiCutAudioContainer* self = new (ELeave) CVeiCutAudioContainer( aRect, aView, aErrorUI );
       
    63     CleanupStack::PushL( self );
       
    64     self->ConstructL( aRect, aView, aErrorUI );
       
    65     return self;
       
    66     }
       
    67 
       
    68 void CVeiCutAudioContainer::ConstructL( const TRect& aRect, CVeiCutAudioView& /*aView*/, CVeiErrorUI& /*aErrorUI*/ )
       
    69     {
       
    70     CreateWindowL();
       
    71 
       
    72     iState = EStateInitializing;
       
    73     iFrameReady = EFalse;
       
    74 
       
    75     iSeekPos = TTimeIntervalMicroSeconds( 0 );
       
    76     iSeeking = EFalse;
       
    77     iCutAudioBar = CVeiCutterBar::NewL( this );
       
    78     iCutTimeDisplay = CVeiTextDisplay::NewL( iCutTimeDisplayRect, this );
       
    79 
       
    80     iPreviousScreenMode = -1;
       
    81     iCurrentScreenMode = -1;
       
    82 
       
    83     TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) );
       
    84 
       
    85     AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask,
       
    86         mbmPath, EMbmVideoeditoruicomponentsQgn_prop_ve_pause, 
       
    87         EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask );
       
    88 
       
    89     SetRect( aRect );
       
    90 
       
    91     iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );
       
    92 
       
    93     iAudioSamplePlayer = CMdaAudioPlayerUtility::NewL( *this,EMdaPriorityMax, 
       
    94         TMdaPriorityPreference( KAudioPrefVideoRecording ) );
       
    95 
       
    96     iVideoBarTimer = CPeriodic::NewL( CActive::EPriorityLow );
       
    97 
       
    98     iSampleArrayHandler = CSampleArrayHandler::NewL();
       
    99 
       
   100     EnableDragEvents();
       
   101 
       
   102     ActivateL();
       
   103     }
       
   104 
       
   105 CVeiCutAudioContainer::CVeiCutAudioContainer( const TRect& /*aRect*/, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI ):iView( aView ), iErrorUI( aErrorUI )
       
   106     {
       
   107     }       
       
   108 
       
   109 void CVeiCutAudioContainer::OpenAudioFileL( const TDesC& aFileName )
       
   110     {
       
   111     if ( iAudioSamplePlayer )
       
   112         {
       
   113         iAudioSamplePlayer->OpenFileL( aFileName );
       
   114         }
       
   115     GetVisualizationL();
       
   116     }
       
   117 
       
   118 CVeiCutAudioContainer::~CVeiCutAudioContainer()
       
   119     {
       
   120     if ( iProgressNote )
       
   121         {
       
   122         delete iProgressNote;
       
   123         iProgressNote = NULL;
       
   124         }
       
   125     if ( iCutAudioBar )
       
   126         {
       
   127         delete iCutAudioBar;
       
   128         }
       
   129     if ( iCutTimeDisplay )
       
   130         {
       
   131         delete iCutTimeDisplay;
       
   132         }
       
   133     if ( iBgContext )
       
   134         {
       
   135         delete iBgContext;
       
   136         }
       
   137     delete iPauseBitmap;
       
   138     delete iPauseBitmapMask;
       
   139 
       
   140     if ( iVideoBarTimer )
       
   141         {
       
   142         iVideoBarTimer->Cancel();
       
   143         delete iVideoBarTimer;
       
   144         }
       
   145     if ( iAudioSamplePlayer )
       
   146         {
       
   147         delete iAudioSamplePlayer;
       
   148         }
       
   149     if (iSampleArrayHandler)
       
   150         {
       
   151         delete iSampleArrayHandler;
       
   152         }
       
   153         
       
   154     delete iCallBack;
       
   155 
       
   156     delete iBufBitmap;
       
   157     iBufBitmap = NULL;
       
   158 
       
   159     delete iRemConTarget;
       
   160     }
       
   161 
       
   162 void CVeiCutAudioContainer::SizeChanged()
       
   163     {
       
   164     TSize videoScreenSize;
       
   165     TRect rect( Rect() ); 
       
   166     if ( iBgContext )
       
   167         {
       
   168         iBgContext->SetRect( rect );
       
   169         }
       
   170 
       
   171     iPreviousScreenMode = iCurrentScreenMode;
       
   172     iCurrentScreenMode = iEikonEnv->ScreenDevice()->CurrentScreenMode();
       
   173 
       
   174 
       
   175 	// Scissor icon
       
   176 	TAknLayoutRect scissorsIconLayout;
       
   177 	scissorsIconLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::main_vded_pane_g1());
       
   178 	iCutAudioBar->SetComponentRect(CVeiCutterBar::EScissorsIcon, scissorsIconLayout.Rect());
       
   179 		
       
   180 	// Progress bar
       
   181 	TAknLayoutRect progressBarLayout; 
       
   182 	progressBarLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_slider_pane());
       
   183 	iCutAudioBar->SetComponentRect(CVeiCutterBar::EProgressBar, progressBarLayout.Rect());
       
   184 
       
   185 	// left end of the slider when that part is unselected
       
   186 	TAknLayoutRect sliderLeftEndLayout;
       
   187 	sliderLeftEndLayout.LayoutRect( progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3() );
       
   188 	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() );
       
   189 		
       
   190 	// middle part of the slider when that part is unselected	
       
   191 	TAknLayoutRect sliderMiddleLayout;
       
   192 	sliderMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5());
       
   193 	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, sliderMiddleLayout.Rect() );		
       
   194 	
       
   195 	// right end of the slider when that part is unselected
       
   196 	TAknLayoutRect sliderRightEndLayout;
       
   197 	sliderRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4());
       
   198 	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() );	
       
   199 		
       
   200 	// left end of the cut selection slider 
       
   201 	TAknLayoutRect sliderSelectedLeftEndLayout;
       
   202 	sliderSelectedLeftEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3());
       
   203 	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, sliderSelectedLeftEndLayout.Rect() );
       
   204 		
       
   205 	// middle part of the cut selection slider 
       
   206 	TAknLayoutRect sliderSelectedMiddleLayout;
       
   207 	sliderSelectedMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5());
       
   208 	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, sliderSelectedMiddleLayout.Rect() );		
       
   209 	
       
   210 	// right end of the cut selection slider 
       
   211 	TAknLayoutRect sliderSelectedRightEndLayout;
       
   212 	sliderSelectedRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4());
       
   213 	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon, sliderSelectedRightEndLayout.Rect() ); 
       
   214 
       
   215     // playhead
       
   216     TAknLayoutRect playheadLayout;
       
   217 	playheadLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g1());
       
   218 	iCutAudioBar->SetComponentRect( CVeiCutterBar::EPlayheadIcon, playheadLayout.Rect() ); 
       
   219 
       
   220     // left/right border of cut selection slider
       
   221     TAknLayoutRect cutAreaBorderLayout;
       
   222 	cutAreaBorderLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g2());
       
   223 	iCutAudioBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon, cutAreaBorderLayout.Rect() ); 
       
   224 		
       
   225 		
       
   226 	// Start cut time text
       
   227 	TAknLayoutText startTimeTextLayout;
       
   228 	startTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t1() );
       
   229 	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeText, startTimeTextLayout.TextRect());
       
   230 	
       
   231 	// End cut time text
       
   232 	TAknLayoutText endTimeTextLayout;
       
   233 	endTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t2() );
       
   234 	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeText, endTimeTextLayout.TextRect());
       
   235 	
       
   236 	// Start cut time icon
       
   237 	TAknLayoutRect startTimeIconLayout;
       
   238 	startTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g2() );
       
   239 	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeIcon, startTimeIconLayout.Rect());
       
   240 	
       
   241 	// End cut time icon
       
   242 	TAknLayoutRect endTimeIconLayout;
       
   243 	endTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g3() );
       
   244 	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeIcon, endTimeIconLayout.Rect());
       
   245 		
       
   246 	// Pause icon
       
   247 	
       
   248 
       
   249 
       
   250 	// Video Display	
       
   251 	TAknLayoutRect videoDisplayLayout;
       
   252 	videoDisplayLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_video_pane());
       
   253 
       
   254 	iIconDisplayRect = videoDisplayLayout.Rect();
       
   255 	LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::SizeChanged(): iIconDisplayRect: %d,%d", iIconDisplayRect.iBr.iX, iIconDisplayRect.iBr.iY);
       
   256 
       
   257 	//CVeiCutterBar
       
   258 	// : Change this when LAF data is ready
       
   259 	TPoint cutBarTl = TPoint(STATIC_CAST( TInt, rect.iBr.iX*0.0114 ),
       
   260 		STATIC_CAST( TInt, rect.iBr.iY*0.875 ) );
       
   261 	TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ),
       
   262 		STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) );
       
   263 
       
   264 	TRect cutBarRect( cutBarTl, cutBarSize );
       
   265 	iCutAudioBar->SetRect( cutBarRect );
       
   266 
       
   267 	//CVeiTextDisplay
       
   268 	// : Change this when LAF data is ready
       
   269 	TPoint cutTimeDisplayTl = TPoint(cutBarTl.iX,
       
   270 		STATIC_CAST( TInt, rect.iBr.iY*0.757 ) );
       
   271 	TSize cutTimeDisplaySize = TSize(cutBarSize.iWidth,
       
   272 		STATIC_CAST( TInt, rect.iBr.iY*0.0903 ) );
       
   273 
       
   274 	iCutTimeDisplayRect = TRect( cutTimeDisplayTl, cutTimeDisplaySize );
       
   275 	iCutTimeDisplay->SetRect( iCutTimeDisplayRect );
       
   276 	iCutTimeDisplay->SetLayout( CVeiTextDisplay::ECutInCutOut );
       
   277 
       
   278 
       
   279 
       
   280     TInt iconWidth = STATIC_CAST( TInt, rect.iBr.iX * 0.07954545455 );
       
   281     AknIconUtils::SetSize( iPauseBitmap, TSize(iconWidth,iconWidth), EAspectRatioNotPreserved );
       
   282 
       
   283     //  Create buffer bitmap with the correct size
       
   284     if (iBufBitmap)
       
   285         {
       
   286         delete iBufBitmap;
       
   287         iBufBitmap = NULL;
       
   288         }
       
   289     TSize size = Rect().Size();
       
   290     TDisplayMode dmode = EColor64K;
       
   291     // " ... If the instantiation process really needs 
       
   292     // not to leave, use "new CXxx" and check for NULL."
       
   293     iBufBitmap = new CFbsBitmap;
       
   294     TInt err = KErrNone;
       
   295     if (iBufBitmap)
       
   296         {
       
   297         err = iBufBitmap->Create(size, dmode);
       
   298         }
       
   299 
       
   300     if (iState != EStateInitializing && !err)
       
   301         {
       
   302         TRAP_IGNORE( DrawToBufBitmapL() );
       
   303         }
       
   304     }
       
   305 
       
   306 
       
   307 TTypeUid::Ptr CVeiCutAudioContainer::MopSupplyObject( TTypeUid aId )
       
   308     {
       
   309     if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext )
       
   310         {
       
   311         return MAknsControlContext::SupplyMopObject( aId, iBgContext );
       
   312         }
       
   313     return CCoeControl::MopSupplyObject( aId );
       
   314     }
       
   315 
       
   316 TInt CVeiCutAudioContainer::CountComponentControls() const
       
   317     {
       
   318     return 2;
       
   319     }
       
   320 
       
   321 CCoeControl* CVeiCutAudioContainer::ComponentControl( TInt aIndex ) const
       
   322     {
       
   323     switch ( aIndex )
       
   324         {
       
   325         case 0:
       
   326             return iCutAudioBar;
       
   327         case 1:
       
   328             return iCutTimeDisplay;
       
   329         default:
       
   330             return NULL;
       
   331         }
       
   332     }
       
   333 
       
   334 void CVeiCutAudioContainer::DrawToBufBitmapL()
       
   335     {
       
   336     //  Create bitmap graphics context
       
   337     CFbsBitmapDevice * bitmapDevice = CFbsBitmapDevice::NewL (iBufBitmap);
       
   338     CleanupStack::PushL (bitmapDevice);
       
   339     CFbsBitGc * bitmapContext = 0;
       
   340     User::LeaveIfError (bitmapDevice->CreateContext (bitmapContext));
       
   341     CleanupStack::PushL (bitmapContext);
       
   342     CGraphicsContext * graphicsContext = 0;
       
   343     User::LeaveIfError (bitmapDevice->CreateContext (graphicsContext));
       
   344     CleanupStack::PushL (graphicsContext);
       
   345 
       
   346     // Draw skin background
       
   347     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   348     MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );    
       
   349     AknsDrawUtils::DrawBackground( skin, cc, this, *((CBitmapContext*)graphicsContext), TPoint(0,0), Rect(), KAknsDrawParamDefault );
       
   350 
       
   351     if ( iState == EStatePaused )
       
   352         {
       
   353         TPoint pauseIconTl = TPoint( iIconDisplayRect.iTl.iX - STATIC_CAST( TInt, Rect().iBr.iX*0.105),
       
   354             iIconDisplayRect.iTl.iY + STATIC_CAST( TInt, Rect().iBr.iY*0.178 ));
       
   355         bitmapContext->BitBltMasked( pauseIconTl, iPauseBitmap, 
       
   356             TRect( TPoint(0,0), iPauseBitmap->SizeInPixels() ), 
       
   357             iPauseBitmapMask, EFalse );
       
   358         }
       
   359 
       
   360     if (iSampleArrayHandler)
       
   361         {
       
   362         bitmapContext->SetPenSize( TSize(2,1) );    
       
   363         bitmapContext->SetBrushStyle(CGraphicsContext::ESolidBrush);
       
   364         bitmapContext->SetBrushColor(KRgbWhite);
       
   365         bitmapContext->SetPenColor( KRgbBlack); 
       
   366         bitmapContext->DrawRoundRect( iIconDisplayRect, TSize(4,4));
       
   367 
       
   368         iSampleArrayHandler->ScaleAudioVisualization(iIconDisplayRect.Height()/2 - 3); // -2 to eliminate drawing columns to long
       
   369 
       
   370         // how many pixels are reserved for each vertical sample line
       
   371         TInt diff = 1;          
       
   372         // how many samples fit in rect
       
   373         TInt samplesInDisplay = iIconDisplayRect.Width()/diff;  
       
   374 
       
   375         TBool started = EFalse;
       
   376         TPoint topLeftHighlighted(iIconDisplayRect.iTl.iX, iIconDisplayRect.iTl.iY);    
       
   377         TPoint bottomRightLighted(iIconDisplayRect.iTl.iX, iIconDisplayRect.iBr.iY);
       
   378 
       
   379         for (TInt i = 0; (iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2 < iSampleArrayHandler->Size() && 
       
   380             iIconDisplayRect.iTl.iX + i*diff < iIconDisplayRect.iBr.iX;  i++)                               
       
   381             {
       
   382             TInt x = iIconDisplayRect.iTl.iX + i*diff;  
       
   383             TInt y = iIconDisplayRect.iBr.iY - iIconDisplayRect.Height()/2;
       
   384 
       
   385             // in the beginning of clip, nothing is drawn on the left side of the rect                      
       
   386             if ((iSampleArrayHandler->CurrentPoint() + i) - samplesInDisplay/2 > 1)
       
   387                 {
       
   388                 if (iSampleArrayHandler->SampleCutted((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2))
       
   389                     {
       
   390                     if (!started)
       
   391                         {                       
       
   392                         topLeftHighlighted.iX = x;
       
   393                         started = ETrue;
       
   394                         }
       
   395                     bottomRightLighted.iX = x;
       
   396                     bitmapContext->SetPenColor( KRgbRed );
       
   397                     }
       
   398                 else
       
   399                     {
       
   400                     bitmapContext->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush);    
       
   401                     TRect rec(TPoint(1,1), TPoint(2,2));
       
   402                     bitmapContext->DrawRect( rec);
       
   403                     bitmapContext->SetPenColor( KRgbBlack); 
       
   404                     }
       
   405 
       
   406                 // to eliminate from drawing over surrounding black rect
       
   407                 if (x > iIconDisplayRect.iTl.iX + 1)
       
   408                     {                   
       
   409                     bitmapContext->DrawLine(TPoint(x, y),
       
   410                         TPoint(x, (y - 1) - iSampleArrayHandler->Sample((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2)));
       
   411 
       
   412                     bitmapContext->DrawLine(TPoint(x, y),
       
   413                         TPoint(x, (y + 1) + iSampleArrayHandler->Sample((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2)));
       
   414                     }
       
   415                 }
       
   416             }
       
   417 
       
   418         // not selected area is "dimmed"
       
   419         bitmapContext->SetPenColor( KRgbBlack); 
       
   420         bitmapContext->SetDrawMode(CGraphicsContext::EDrawModeAND);
       
   421         bitmapContext->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush);
       
   422 
       
   423         TPoint brArea1(topLeftHighlighted.iX, iIconDisplayRect.iBr.iY);
       
   424         TRect rect1(iIconDisplayRect.iTl, brArea1);
       
   425         bitmapContext->DrawRoundRect( rect1, TSize(4,4));
       
   426 
       
   427         TPoint tlArea2(bottomRightLighted.iX, iIconDisplayRect.iTl.iY);
       
   428         TRect rect2(tlArea2, iIconDisplayRect.iBr);
       
   429         bitmapContext->DrawRoundRect( rect2, TSize(4,4));
       
   430 
       
   431         bitmapContext->SetPenColor( KRgbGreen );    
       
   432         bitmapContext->DrawLine(TPoint((iIconDisplayRect.iTl.iX + iIconDisplayRect.iBr.iX)/2, 
       
   433             iIconDisplayRect.iTl.iY + 1),
       
   434             TPoint((iIconDisplayRect.iTl.iX + iIconDisplayRect.iBr.iX)/2, 
       
   435             iIconDisplayRect.iBr.iY - 2));
       
   436         }
       
   437 
       
   438     CleanupStack::PopAndDestroy( graphicsContext ); 
       
   439     CleanupStack::PopAndDestroy( bitmapContext );
       
   440     CleanupStack::PopAndDestroy( bitmapDevice );         
       
   441     DrawDeferred();
       
   442     }
       
   443 
       
   444 void CVeiCutAudioContainer::Draw( const TRect& /*aRect*/ ) const
       
   445     {
       
   446     CWindowGc& gc = SystemGc();
       
   447 
       
   448     if ( iBufBitmap && iBufBitmap->Handle() )
       
   449         {
       
   450         gc.BitBlt(TPoint(0,0), iBufBitmap);
       
   451         }
       
   452     }
       
   453 
       
   454 // ----------------------------------------------------------------------------
       
   455 // CVeiCutAudioContainer::GetHelpContext(...) const
       
   456 //
       
   457 // Gets the control's help context. Associates the control with a particular
       
   458 // Help file and topic in a context sensitive application.
       
   459 // ----------------------------------------------------------------------------
       
   460 //
       
   461 void CVeiCutAudioContainer::GetHelpContext( TCoeHelpContext& aContext ) const
       
   462     {
       
   463     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::GetHelpContext(): In");
       
   464 
       
   465     // Set UID of the CS Help file (same as application UID).
       
   466     aContext.iMajor = KUidVideoEditor;
       
   467 
       
   468     // Set the context/topic.
       
   469     aContext.iContext = KVED_HLP_CUT_AUDIO_VIEW;
       
   470 
       
   471     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::GetHelpContext(): Out");
       
   472     }
       
   473 
       
   474 
       
   475 void CVeiCutAudioContainer::HandleControlEventL(
       
   476     CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
       
   477     {
       
   478     }
       
   479 
       
   480 // ----------------------------------------------------------------------------
       
   481 // CVeiCutAudioContainer::HandlePointerEventL
       
   482 // From CCoeControl
       
   483 // ----------------------------------------------------------------------------
       
   484 //		
       
   485 void CVeiCutAudioContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent )
       
   486 	{
       
   487 	LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandlePointerEventL(): In");
       
   488 	if( AknLayoutUtils::PenEnabled() && iCutAudioBar )
       
   489 		{
       
   490 		CCoeControl::HandlePointerEventL( aPointerEvent );
       
   491 		
       
   492 		switch( aPointerEvent.iType )
       
   493 			{
       
   494 			case TPointerEvent::EButton1Down:
       
   495 				{
       
   496 				iIsMarkDrag = EFalse;
       
   497 				iIsMarkTapped = EFalse;
       
   498 				TRect startMarkRect = iCutAudioBar->StartMarkRect();
       
   499 				TRect endMarkRect = iCutAudioBar->EndMarkRect();				
       
   500 				// check if the pen goes down inside the start mark
       
   501 				if (startMarkRect.Contains(aPointerEvent.iPosition)) 
       
   502 					{
       
   503 					iIsMarkTapped = ETrue;
       
   504 					iTappedMark = EStartMark;
       
   505 					}
       
   506 				// check if the pen goes down inside the end mark	
       
   507 				else if (endMarkRect.Contains(aPointerEvent.iPosition))
       
   508 					{
       
   509 					iIsMarkTapped = ETrue;
       
   510 					iTappedMark = EEndMark;
       
   511 					}					
       
   512 				
       
   513 				TRect progressBarRect(iCutAudioBar->ProgressBarRect());	
       
   514 				// check if the pen goes down inside the progress bar				
       
   515 				if( progressBarRect.Contains( aPointerEvent.iPosition ) )
       
   516 					{
       
   517 					iIsMarkDrag = EFalse;					
       
   518 					}
       
   519 				break;
       
   520 				}
       
   521 			case TPointerEvent::EDrag:
       
   522 				{
       
   523 				
       
   524 				TRect progressBarRect(iCutAudioBar->ProgressBarRect());
       
   525 				if ( progressBarRect.Contains( aPointerEvent.iPosition ) )
       
   526 				{
       
   527 					
       
   528 					if (iIsMarkTapped)
       
   529 						{
       
   530 						iIsMarkDrag = ETrue;
       
   531 						HandleProgressBarTouchL( progressBarRect, 
       
   532 												 aPointerEvent.iPosition.iX,
       
   533 												 ETrue,
       
   534 												 iTappedMark );
       
   535 						}
       
   536 					else 
       
   537 						{
       
   538 						
       
   539 						HandleProgressBarTouchL( progressBarRect, 
       
   540 												 aPointerEvent.iPosition.iX,
       
   541 												 EFalse);
       
   542 						}
       
   543 				}
       
   544 				break;		
       
   545 				}
       
   546 			case TPointerEvent::EButton1Up:
       
   547 				{
       
   548 				// pen up event is handled if it wasn't dragged
       
   549 				if (!iIsMarkDrag)
       
   550 					{
       
   551 					TRect progressBarRect(iCutAudioBar->ProgressBarRect());					
       
   552 					// Check if pressed position is in progress bar's rect
       
   553 					if( progressBarRect.Contains( aPointerEvent.iPosition ) )
       
   554 						{
       
   555 						HandleProgressBarTouchL( progressBarRect, 
       
   556 											 aPointerEvent.iPosition.iX,
       
   557 											 EFalse);
       
   558 						}
       
   559 					}
       
   560 				break;
       
   561 				}		
       
   562 			default:
       
   563 				{
       
   564 				break;	
       
   565 				}	
       
   566 			}
       
   567 		}	
       
   568 	LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandlePointerEventL(): Out");		
       
   569 	}
       
   570 
       
   571 
       
   572 // ----------------------------------------------------------------------------
       
   573 // CVeiCutAudioContainer::HandleProgressBarTouchL
       
   574 // 
       
   575 // ----------------------------------------------------------------------------
       
   576 //	
       
   577 void CVeiCutAudioContainer::HandleProgressBarTouchL( TRect aPBRect, 
       
   578 												 TInt aPressedPoint,
       
   579 												 TBool aDragMarks,
       
   580 												 CVeiCutAudioContainer::TCutMark aCutMark )
       
   581 	{
       
   582 	if ( (AknLayoutUtils::PenEnabled()) && ( iState!=EStateInitializing ))
       
   583 		{	
       
   584 		LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleProgressBarTouchL(): In");
       
   585 
       
   586 		if (iState == EStatePlaying)		
       
   587 			{
       
   588 			StopL();	
       
   589 			}
       
   590 		
       
   591 		// Progress Bar start and end points, and length
       
   592 		TInt pbEndPoint( aPBRect.iBr.iX );
       
   593 		TInt pbStartPoint = ( aPBRect.iTl.iX );		
       
   594 		TInt totalPBLength( pbEndPoint - pbStartPoint );
       
   595 				
       
   596 		// calculate the time position from the tapped progress bar coordinates 
       
   597 		TTimeIntervalMicroSeconds newPosition( 
       
   598 										( ( aPressedPoint - pbStartPoint ) * 
       
   599 							  			iAudioSamplePlayer->Duration().Int64() ) / 
       
   600 							  			totalPBLength );
       
   601 		
       
   602 		// move cut marks
       
   603 		if (aDragMarks)
       
   604 		{
       
   605 			// check that the start mark doesn't go past the end mark
       
   606 			// and not to the beginning			
       
   607 			if ((aCutMark == EStartMark) && 
       
   608 			    (newPosition.Int64() > 0) &&
       
   609 				(aPressedPoint < iCutAudioBar->EndMarkPoint() - 2*iCutAudioBar->EndMarkRect().Width()))
       
   610 				{				
       
   611 				iView.MoveStartOrEndMarkL(newPosition, EStartMark);				
       
   612 				iCutAudioBar->SetInPoint( newPosition	);
       
   613 				iCutTimeDisplay->SetCutIn( newPosition );
       
   614 				}
       
   615 			// check that the end mark doesn't go before the start mark	
       
   616 			// and not too close to the beginning			
       
   617 			else if ((aCutMark == EEndMark) && 
       
   618 				(newPosition.Int64() >= KMinCutVideoLength) &&			
       
   619 				(aPressedPoint > iCutAudioBar->StartMarkPoint() + 2*iCutAudioBar->StartMarkRect().Width()))
       
   620                 
       
   621 				{				
       
   622 				iView.MoveStartOrEndMarkL(newPosition, EEndMark);				
       
   623 				iCutAudioBar->SetOutPoint( newPosition	);
       
   624 				iCutTimeDisplay->SetCutOut( newPosition );
       
   625 				}
       
   626 		}
       
   627 				
       
   628 		// move playhead
       
   629 		else if (( newPosition != iLastPosition ) && !aDragMarks)
       
   630 			{
       
   631 			iLastPosition = newPosition;
       
   632 			
       
   633 			iSeekPos = TTimeIntervalMicroSeconds( newPosition );
       
   634 			
       
   635 			iCutAudioBar->SetCurrentPoint( (static_cast<TInt32>(iSeekPos.Int64() / 1000)));
       
   636 			iAudioSamplePlayer->SetPosition( iSeekPos );
       
   637 			UpdateVisualizationL();
       
   638 					
       
   639 			iView.UpdateTimeL();
       
   640 			}	
       
   641 			
       
   642 		LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleProgressBarTouchL(): Out");
       
   643 			
       
   644 		}// PenEnabled
       
   645 		
       
   646 	}
       
   647 
       
   648 
       
   649 void CVeiCutAudioContainer::PlayL( const TTimeIntervalMicroSeconds& aStartTime )
       
   650     {
       
   651     LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL(): In, aStartTime:%Ld", aStartTime.Int64());
       
   652     if ( aStartTime != TTimeIntervalMicroSeconds(0) )
       
   653         {
       
   654         LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 2, setting pos:%Ld", aStartTime.Int64());
       
   655         iAudioSamplePlayer->SetPosition( aStartTime );
       
   656         UpdateVisualizationL();
       
   657         }
       
   658     else
       
   659         {
       
   660         LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 3, setting pos:%Ld", iSeekPos.Int64());     
       
   661         iAudioSamplePlayer->SetPosition( iSeekPos );
       
   662         UpdateVisualizationL();
       
   663         }   
       
   664 
       
   665     SetStateL( EStatePlaying );
       
   666 
       
   667     iAudioSamplePlayer->Play();
       
   668     const TUint delay = 100000;
       
   669 
       
   670     if ( !iVideoBarTimer->IsActive() )
       
   671         {
       
   672         LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 4");
       
   673         iVideoBarTimer->Start( delay, delay, TCallBack( CVeiCutAudioContainer::DoAudioBarUpdate, this ) );
       
   674         LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 5");
       
   675         }
       
   676     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL(): Out");    
       
   677     }
       
   678 
       
   679 void CVeiCutAudioContainer::StopL()
       
   680     {
       
   681     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::StopL(): In");
       
   682     iAudioSamplePlayer->Stop();
       
   683 
       
   684     iSeekPos = TTimeIntervalMicroSeconds( 0 );
       
   685     iLastPosition = TTimeIntervalMicroSeconds( 0 );
       
   686     SetStateL( EStateStopped );
       
   687     PlaybackPositionL();
       
   688 
       
   689     iVideoBarTimer->Cancel();
       
   690     iCutAudioBar->SetFinishedStatus( ETrue );
       
   691 
       
   692     UpdateVisualizationL();
       
   693 
       
   694     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::StopL(): Out");
       
   695     }
       
   696 
       
   697 void CVeiCutAudioContainer::PauseL()
       
   698     {
       
   699     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PauseL(): In");
       
   700 
       
   701     PlaybackPositionL();
       
   702 
       
   703     iVideoBarTimer->Cancel();
       
   704     iAudioSamplePlayer->Pause();
       
   705 
       
   706     if (iState != EStateInitializing) 
       
   707         {
       
   708         SetStateL( EStatePaused );
       
   709         }
       
   710     else
       
   711         {
       
   712         SetStateL( EStateStoppedInitial );
       
   713         }
       
   714     iView.UpdateCBAL(iState);
       
   715     // draw new visualization to bitmap
       
   716     DrawToBufBitmapL();
       
   717 
       
   718     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PauseL(): Out");
       
   719     }
       
   720 
       
   721 void CVeiCutAudioContainer::CloseStreamL()
       
   722     {
       
   723     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::CloseStreamL(): In");
       
   724 
       
   725     PlaybackPositionL();
       
   726     SetStateL( EStateStopped );
       
   727 
       
   728     iAudioSamplePlayer->Stop();
       
   729     iAudioSamplePlayer->Close();
       
   730 
       
   731     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::CloseStreamL(): Out");
       
   732     }
       
   733 
       
   734 void CVeiCutAudioContainer::SetInTimeL( const TTimeIntervalMicroSeconds& aTime )
       
   735     {
       
   736     iMarkedInTime = aTime;
       
   737     if ( iCutTimeDisplay )
       
   738         {       
       
   739         iCutTimeDisplay->SetCutIn( aTime );
       
   740         }
       
   741     if ( iCutAudioBar )
       
   742         {
       
   743         iCutAudioBar->SetInPoint( aTime );
       
   744         }
       
   745     if (iSampleArrayHandler)
       
   746         {
       
   747         iSampleArrayHandler->SetCutInPoint(aTime);          
       
   748         }
       
   749     // draw new visualization to bitmap
       
   750     DrawToBufBitmapL();
       
   751     }
       
   752 
       
   753 void CVeiCutAudioContainer::SetOutTimeL( const TTimeIntervalMicroSeconds& aTime )
       
   754     {
       
   755     iMarkedOutTime = aTime;
       
   756     if ( iCutTimeDisplay )
       
   757         {
       
   758         iCutTimeDisplay->SetCutOut( aTime );
       
   759         }
       
   760     if ( iCutAudioBar )
       
   761         {
       
   762         iCutAudioBar->SetOutPoint( aTime );
       
   763         }
       
   764     if (iSampleArrayHandler)
       
   765         {
       
   766         iSampleArrayHandler->SetCutOutPoint(aTime);         
       
   767         }
       
   768     // draw new visualization to bitmap
       
   769     DrawToBufBitmapL();
       
   770     }
       
   771 
       
   772 const TTimeIntervalMicroSeconds& CVeiCutAudioContainer::TotalLength()
       
   773     {
       
   774     return iDuration;
       
   775     }
       
   776 
       
   777 const TTimeIntervalMicroSeconds& CVeiCutAudioContainer::PlaybackPositionL()
       
   778     {
       
   779     if (iSeeking)
       
   780         {
       
   781         return iSeekPos;
       
   782         }
       
   783     if (iState != EStatePlaying)
       
   784         {
       
   785         return iLastPosition;
       
   786         }
       
   787 
       
   788     TInt posError = iAudioSamplePlayer->GetPosition( iLastPosition );
       
   789     //LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::PlaybackPositionL(): %Ld, error: %d", iLastPosition.Int64(), posError);
       
   790     posError = 0;
       
   791 
       
   792     return iLastPosition;
       
   793     }
       
   794 
       
   795 TKeyResponse CVeiCutAudioContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
       
   796     {
       
   797     if ( aType == EEventKeyDown ) 
       
   798         {
       
   799         iKeyRepeatCount = 0;
       
   800 
       
   801         iAudioSamplePlayer->GetPosition( iSeekPos );
       
   802 
       
   803         LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyDown, pos: %Ld", iSeekPos.Int64());
       
   804 
       
   805         return EKeyWasConsumed;
       
   806         }
       
   807     else if ( aType == EEventKeyUp ) 
       
   808         {
       
   809 
       
   810         if ( iSeeking == EFalse )
       
   811             {
       
   812             LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyUp, seeking false");
       
   813             return EKeyWasNotConsumed;
       
   814             }
       
   815 
       
   816         iSeeking = EFalse;
       
   817         iLastPosition = iSeekPos;
       
   818         iAudioSamplePlayer->SetPosition( iSeekPos );
       
   819         UpdateVisualizationL();
       
   820         if ( iState == EStatePlaying )
       
   821             {
       
   822             iAudioSamplePlayer->Play();
       
   823             }
       
   824 
       
   825         LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyUp, seeking true");
       
   826 
       
   827         return EKeyWasConsumed;
       
   828         }
       
   829     else if ( aType == EEventKey )
       
   830         {
       
   831         if ( ( aKeyEvent.iRepeats == 0 ) &&
       
   832             ( (aKeyEvent.iCode != EKeyDownArrow ) &&
       
   833             ( aKeyEvent.iCode != EKeyUpArrow ) ) )
       
   834             {
       
   835             iAudioSamplePlayer->Pause();
       
   836             }
       
   837         iLastKeyCode = aKeyEvent.iCode;
       
   838 
       
   839         switch (aKeyEvent.iCode)
       
   840             {
       
   841             case EKeyOK:
       
   842                 {
       
   843                 iView.HandleCommandL( EAknSoftkeyOk );
       
   844                 return EKeyWasConsumed;
       
   845                 }
       
   846             case EKeyDownArrow:
       
   847                 {
       
   848                 iView.ProcessCommandL( EVeiCmdCutVideoVolumeDown );
       
   849                 return EKeyWasConsumed;
       
   850                 }
       
   851             case EKeyUpArrow:
       
   852                 {
       
   853                 iView.ProcessCommandL( EVeiCmdCutVideoVolumeUp );
       
   854                 return EKeyWasConsumed;
       
   855                 }
       
   856             case EKeyRightArrow:
       
   857                 {
       
   858 
       
   859                 if ( iSeeking == EFalse )
       
   860                     {
       
   861                     iAudioSamplePlayer->Pause();
       
   862                     }
       
   863 
       
   864                 iSeeking = ETrue;
       
   865                 iKeyRepeatCount++;
       
   866 
       
   867                 TInt adjustment = TimeIncrement( iKeyRepeatCount );
       
   868 
       
   869                 TInt64 newPos = iSeekPos.Int64() + adjustment;
       
   870 
       
   871                 if ( newPos > iAudioSamplePlayer->Duration().Int64() )
       
   872                     {
       
   873                     newPos = iAudioSamplePlayer->Duration().Int64();
       
   874                     }
       
   875                 iSeekPos = TTimeIntervalMicroSeconds( newPos );
       
   876                 iCutAudioBar->SetCurrentPoint( static_cast<TInt32>((iSeekPos.Int64() / 1000)));
       
   877 
       
   878                 iView.UpdateTimeL();
       
   879 
       
   880                 // mieti onko eka rivi tarpeen
       
   881                 iAudioSamplePlayer->SetPosition( iSeekPos );
       
   882                 UpdateVisualizationL();
       
   883                 return EKeyWasConsumed;
       
   884                 }
       
   885 
       
   886             case EKeyLeftArrow:
       
   887                 {
       
   888                 if ( iSeeking == EFalse )
       
   889                     {
       
   890                     iAudioSamplePlayer->Pause();
       
   891                     }
       
   892 
       
   893                 iSeeking = ETrue;
       
   894                 iKeyRepeatCount++;
       
   895 
       
   896                 TInt adjustment = TimeIncrement( iKeyRepeatCount );
       
   897 
       
   898                 TInt64 newPos = iSeekPos.Int64() - adjustment;
       
   899                 if ( newPos < 0 ) 
       
   900                     {
       
   901                     newPos = 0;
       
   902                     }
       
   903                 iSeekPos = TTimeIntervalMicroSeconds( newPos ); 
       
   904                 iCutAudioBar->SetCurrentPoint(static_cast<TInt32>( (iSeekPos.Int64() / 1000)));
       
   905 
       
   906                 iView.UpdateTimeL();                
       
   907                 iAudioSamplePlayer->SetPosition( iSeekPos );
       
   908                 UpdateVisualizationL();
       
   909                 return EKeyWasConsumed;
       
   910                 }
       
   911             case EKeyBackspace:     //Clear 
       
   912                 {
       
   913                 iView.ClearInOutL( ETrue, ETrue );
       
   914                 UpdateVisualizationL();             
       
   915                 return EKeyWasConsumed;
       
   916                 }
       
   917             default:
       
   918                 {
       
   919                 return EKeyWasNotConsumed;
       
   920                 }
       
   921             }
       
   922         }
       
   923     else
       
   924         {
       
   925         return EKeyWasNotConsumed;
       
   926         }
       
   927     }
       
   928 
       
   929 
       
   930 
       
   931 TInt CVeiCutAudioContainer::TimeIncrement(TInt aKeyCount) const
       
   932     {
       
   933     if ( aKeyCount < 3 )
       
   934         {
       
   935         return 100000;
       
   936         }
       
   937     else if ( aKeyCount < 4 )
       
   938         {
       
   939         return 300000;
       
   940         }
       
   941     else if ( aKeyCount < 5 )
       
   942         {
       
   943         return 500000;
       
   944         }
       
   945     else if ( aKeyCount < 10 )
       
   946         {
       
   947         return 1000000;
       
   948         }
       
   949     else if ( aKeyCount < 13 )
       
   950         {
       
   951         return 2000000;
       
   952         }
       
   953     else if ( aKeyCount < 15 )
       
   954         {
       
   955         return 3000000;
       
   956         }
       
   957     else
       
   958         {
       
   959         return 5000000;
       
   960         }
       
   961     }
       
   962 
       
   963 void CVeiCutAudioContainer::SetStateL(CVeiCutAudioContainer::TCutAudioState aState)
       
   964     {
       
   965     LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::SetStateL(): In: aState:%d", aState);
       
   966 
       
   967     iState = aState;
       
   968     iView.UpdateCBAL( aState );
       
   969 
       
   970     // If the foreground is lost while an arrow key is down, we do not get
       
   971     // the key up -event, and iSeeking remains true. Reseting it here just in case.
       
   972     iSeeking = EFalse;
       
   973 
       
   974     // While playing, grab the volume keys for adjusting playback volume.
       
   975     // In other states let them pass e.g. to the music player.
       
   976     if(EStatePlaying == iState)
       
   977         {
       
   978         if (!iRemConTarget)
       
   979             {
       
   980             iRemConTarget = CVeiRemConTarget::NewL( *this );
       
   981             }
       
   982         }
       
   983     else
       
   984         {
       
   985         delete iRemConTarget;
       
   986         iRemConTarget = NULL;
       
   987         }
       
   988 
       
   989     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::SetStateL(): Out");
       
   990     }
       
   991 
       
   992 void CVeiCutAudioContainer::MarkedInL()
       
   993     {
       
   994     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedInL(): In");             
       
   995 
       
   996     if (iState == EStateInitializing || iState == EStateOpening)
       
   997         {
       
   998         return;
       
   999         }
       
  1000 
       
  1001     TTimeIntervalMicroSeconds cutIn = PlaybackPositionL();
       
  1002     if ( iCutTimeDisplay )
       
  1003         {
       
  1004         iCutTimeDisplay->SetCutIn( cutIn );
       
  1005         }
       
  1006     LOGFMT2(KVideoEditorLogFile, "\tIn point: %Ld, state: %d", cutIn.Int64(), iState);
       
  1007 
       
  1008     iCutAudioBar->SetInPoint( cutIn );
       
  1009     
       
  1010     if (iSampleArrayHandler)
       
  1011         {
       
  1012         iSampleArrayHandler->SetCutInPoint(cutIn);          
       
  1013         }
       
  1014         
       
  1015     if ( iState == EStatePlaying )
       
  1016         {
       
  1017         PauseL();
       
  1018         }
       
  1019     else
       
  1020         {
       
  1021         iView.UpdateCBAL( iState );
       
  1022         }
       
  1023     
       
  1024     UpdateVisualizationL();     
       
  1025     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedInL(): Out");    
       
  1026     }
       
  1027 
       
  1028 void CVeiCutAudioContainer::MarkedOutL()
       
  1029     {
       
  1030     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedOutL(): In");
       
  1031     
       
  1032     if (iState == EStateInitializing || iState == EStateOpening)
       
  1033         {
       
  1034         return;
       
  1035         }
       
  1036     
       
  1037     TTimeIntervalMicroSeconds cutOut = PlaybackPositionL();
       
  1038     
       
  1039     if ( iCutTimeDisplay )
       
  1040         {
       
  1041         iCutTimeDisplay->SetCutOut( cutOut );
       
  1042         }
       
  1043 
       
  1044     LOGFMT2(KVideoEditorLogFile, "\tOut point: %Ld, state: %d", cutOut.Int64(), iState);
       
  1045     iCutAudioBar->SetOutPoint( cutOut );
       
  1046     
       
  1047     if (iSampleArrayHandler)
       
  1048         {
       
  1049         iSampleArrayHandler->SetCutOutPoint(cutOut);            
       
  1050         }
       
  1051     
       
  1052     if ( iState == EStatePlaying )
       
  1053         {
       
  1054         PauseL();
       
  1055         }
       
  1056     else
       
  1057         {
       
  1058         iView.UpdateCBAL( iState );
       
  1059         }
       
  1060         
       
  1061     UpdateVisualizationL();                 
       
  1062     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedOutL(): Out");
       
  1063     }
       
  1064     
       
  1065 void CVeiCutAudioContainer::SetVolumeL( TInt aVolumeChange )
       
  1066     {
       
  1067     iInternalVolume += aVolumeChange;
       
  1068 
       
  1069     if ( iInternalVolume < 0 )
       
  1070         {
       
  1071         iInternalVolume = 0;
       
  1072         }
       
  1073     if ( iInternalVolume > KMaxCutAudioVolumeLevel )
       
  1074         {
       
  1075         iInternalVolume = KMaxCutAudioVolumeLevel;
       
  1076         }
       
  1077     
       
  1078     if ( iAudioSamplePlayer )   
       
  1079         {
       
  1080         TInt vol = STATIC_CAST( TInt, (iInternalVolume*iMaxVolume)/KMaxCutAudioVolumeLevel );
       
  1081         iAudioSamplePlayer->SetVolume( vol );
       
  1082         }
       
  1083     }
       
  1084 
       
  1085 TInt CVeiCutAudioContainer::DoAudioBarUpdate( TAny* aThis )
       
  1086     {
       
  1087     STATIC_CAST( CVeiCutAudioContainer*, aThis )->DoUpdate();
       
  1088     return 42;
       
  1089     }
       
  1090 
       
  1091 void CVeiCutAudioContainer::DoUpdate()
       
  1092     {
       
  1093     TTimeIntervalMicroSeconds time;
       
  1094     iAudioSamplePlayer->GetPosition( time );
       
  1095 
       
  1096     if ( iSeeking )
       
  1097         {
       
  1098         time = iSeekPos;
       
  1099         LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::DoUpdate(): 1, time:%Ld", time.Int64());
       
  1100         }
       
  1101     else
       
  1102         {
       
  1103         LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::DoUpdate(): 2, time:%Ld", time.Int64());
       
  1104         }
       
  1105     
       
  1106     iCutAudioBar->SetCurrentPoint(static_cast<TInt32>( (time.Int64() / 1000)));
       
  1107     iCutAudioBar->DrawDeferred();
       
  1108 
       
  1109     TRAP_IGNORE( UpdateVisualizationL() );
       
  1110     }
       
  1111     
       
  1112 
       
  1113 void CVeiCutAudioContainer::UpdateVisualizationL()
       
  1114     {   
       
  1115     TTimeIntervalMicroSeconds time;
       
  1116     iAudioSamplePlayer->GetPosition( time );
       
  1117     iSampleArrayHandler->SetCurrentPoint(time);
       
  1118 
       
  1119     DrawToBufBitmapL();
       
  1120     }
       
  1121 
       
  1122 // @: not leave safe!
       
  1123 void CVeiCutAudioContainer::MapcInitComplete( TInt aError,
       
  1124                     const TTimeIntervalMicroSeconds& DEBUGLOG_ARG(aDuration) )
       
  1125     {
       
  1126     LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcInitComplete(): In, aError:%d, aDuration:%Ld", aError, aDuration.Int64());
       
  1127     if( aError == KErrNone )    // The sample is ready to play.
       
  1128         {
       
  1129         CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL( iInternalVolume );
       
  1130 
       
  1131         iMaxVolume = iAudioSamplePlayer->MaxVolume();
       
  1132         TInt vol = STATIC_CAST( TInt, (iInternalVolume*iMaxVolume)/KMaxCutAudioVolumeLevel );
       
  1133         iAudioSamplePlayer->SetVolume( vol );
       
  1134         /* Show mute icon in navipane */
       
  1135         if ( vol == 0 )
       
  1136             {
       
  1137             iView.VolumeDownL();
       
  1138             }
       
  1139         }
       
  1140     iCutAudioBar->SetTotalDuration( iDuration );
       
  1141 
       
  1142     SetStateL( EStateStoppedInitial );
       
  1143     iView.UpdateTimeL();
       
  1144 
       
  1145     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcInitComplete(): Out");
       
  1146     }
       
  1147     
       
  1148 void CVeiCutAudioContainer::SetDuration( const TTimeIntervalMicroSeconds& aDuration )
       
  1149     {
       
  1150     iDuration = aDuration;
       
  1151     iCutAudioBar->SetTotalDuration( iDuration );
       
  1152     }   
       
  1153 
       
  1154 void CVeiCutAudioContainer::LaunchProgressNoteL()
       
  1155     {
       
  1156     iProgressNote = new ( ELeave ) CAknProgressDialog( REINTERPRET_CAST( CEikDialog**, 
       
  1157                     &iProgressNote), ETrue);
       
  1158     iProgressNote->SetCallback(this);
       
  1159     iProgressNote->PrepareLC( R_VEI_PROGRESS_NOTE_WITH_CANCEL );
       
  1160 
       
  1161     HBufC* stringholder  = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUT, iEikonEnv );
       
  1162     iProgressNote->SetTextL( *stringholder );
       
  1163     CleanupStack::PopAndDestroy(stringholder);
       
  1164         
       
  1165     iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
       
  1166     iProgressNote->RunLD();
       
  1167     }
       
  1168 
       
  1169 void CVeiCutAudioContainer::MapcPlayComplete( TInt DEBUGLOG_ARG(aError) )
       
  1170     {
       
  1171     LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete(): In, error:%d", aError);
       
  1172 
       
  1173     if (EStateTerminating == iState)
       
  1174         {
       
  1175         LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete: app is closing...");
       
  1176         return;
       
  1177         }
       
  1178 
       
  1179     TRAP_IGNORE( SetStateL( EStateStopped ) );
       
  1180     iVideoBarTimer->Cancel();
       
  1181 
       
  1182     iCutAudioBar->SetFinishedStatus( ETrue );
       
  1183     iLastPosition = TTimeIntervalMicroSeconds( 0 );
       
  1184     iSeekPos = 0;
       
  1185     TRAP_IGNORE( iView.StopNaviPaneUpdateL() );
       
  1186 
       
  1187     TRAP_IGNORE( UpdateVisualizationL() );
       
  1188 
       
  1189     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete(): Out");
       
  1190     }
       
  1191 
       
  1192 void CVeiCutAudioContainer::NotifyAudioClipVisualizationStarted(const CVedAudioClipInfo& /*aInfo*/)
       
  1193     {
       
  1194     TRAP_IGNORE( LaunchProgressNoteL() );
       
  1195     }
       
  1196 
       
  1197 void CVeiCutAudioContainer::NotifyAudioClipVisualizationProgressed(const CVedAudioClipInfo& /*aInfo*/, 
       
  1198                                                         TInt aPercentage)
       
  1199     {   
       
  1200     if ( iProgressNote )
       
  1201         {
       
  1202         TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage ) );
       
  1203         }   
       
  1204     }
       
  1205                                                         
       
  1206 void CVeiCutAudioContainer::NotifyAudioClipVisualizationCompleted(const CVedAudioClipInfo& /*aInfo*/, 
       
  1207                                                        TInt aError, TInt8* aVisualization,
       
  1208                                                        TInt aResolution)
       
  1209     {       
       
  1210     if ( iProgressNote )
       
  1211         {
       
  1212         TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw(100) );
       
  1213         TRAP_IGNORE( iProgressNote->ProcessFinishedL() );
       
  1214         }
       
  1215     if (KErrNone == aError)
       
  1216         {       
       
  1217         iSampleArrayHandler->SetVisualizationArray(aVisualization, aResolution);
       
  1218         TRAP_IGNORE( DrawToBufBitmapL() );
       
  1219         }
       
  1220     }
       
  1221 
       
  1222 TInt CVeiCutAudioContainer::VisualizationResolution() const
       
  1223     {
       
  1224     return iIconDisplayRect.Width();    
       
  1225     }   
       
  1226 
       
  1227 void CVeiCutAudioContainer::DialogDismissedL( TInt aButtonId )
       
  1228     {
       
  1229     if (aButtonId != EAknSoftkeyDone )
       
  1230         {   
       
  1231         iView.CancelVisualizationL();
       
  1232         if (! iCallBack)
       
  1233             {       
       
  1234             TCallBack cb (CVeiCutAudioContainer::AsyncBack, this);
       
  1235             iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard);
       
  1236             }
       
  1237         iCallBack->CallBack();
       
  1238         }
       
  1239     }
       
  1240     
       
  1241 TInt CVeiCutAudioContainer::AsyncBack(TAny* aThis)
       
  1242     {
       
  1243     LOG( KVideoEditorLogFile, "CVeiCutAudioContainer::AsyncExit");
       
  1244 
       
  1245     CVeiCutAudioContainer* view = static_cast<CVeiCutAudioContainer*>(aThis);
       
  1246     TRAPD( err, view->HandleCommandL(EVeiCmdCutVideoViewBack) );
       
  1247     
       
  1248     return err;
       
  1249     }   
       
  1250 
       
  1251 
       
  1252 void CVeiCutAudioContainer::HandleCommandL(TInt aCommand)       
       
  1253     {
       
  1254     iView.HandleCommandL(aCommand); 
       
  1255     }
       
  1256 
       
  1257 void CVeiCutAudioContainer::GetVisualizationL()
       
  1258     {   
       
  1259     iView.GetAudioVisualizationL();
       
  1260     }
       
  1261 
       
  1262 //=============================================================================
       
  1263 void CVeiCutAudioContainer::HandleVolumeUpL()
       
  1264     {
       
  1265     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeUpL: in");
       
  1266 
       
  1267     iView.VolumeUpL();
       
  1268 
       
  1269     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeUpL: out");
       
  1270     }
       
  1271 
       
  1272 //=============================================================================
       
  1273 void CVeiCutAudioContainer::HandleVolumeDownL()
       
  1274     {
       
  1275     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeDownL: in");
       
  1276 
       
  1277     iView.VolumeDownL();
       
  1278 
       
  1279     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeDownL: out");
       
  1280     }
       
  1281 
       
  1282 //=============================================================================
       
  1283 void CVeiCutAudioContainer::PrepareForTerminationL()
       
  1284     {
       
  1285     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PrepareForTerminationL: in");
       
  1286 
       
  1287     SetStateL( EStateTerminating );
       
  1288 
       
  1289     iVideoBarTimer->Cancel();
       
  1290     iAudioSamplePlayer->Stop();
       
  1291     iAudioSamplePlayer->Close();
       
  1292 
       
  1293     LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PrepareForTerminationL: out");
       
  1294     }
       
  1295 
       
  1296 // End of File