videoplayback/videohelix/tsrc/ut_videohelixtest/src/mpxvideoplayerutility_stub.cpp
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/videohelix/tsrc/ut_videohelixtest/src/mpxvideoplayerutility_stub.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,737 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+*
+* Description: Stub for helix
+*
+*/
+
+// Version : %version: 10 %
+
+#include <audiopreference.h>
+#include <mmf/server/mmffile.h>
+
+#include "stifutilities.h"
+#include "mpxvideoplayerutility_stub.h"
+#include "mpxvideoplaybackcontroller.h"
+#include "mpxvideo_debug.h"
+
+
+
+#define MAX_VOLUME 100
+
+CMpxVideoPlayerUtility*
+CMpxVideoPlayerUtility::NewL( CMPXVideoPlaybackController* aVideoPlaybackCtrl )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::NewL()"));
+
+    StifUtilities* utility = reinterpret_cast<StifUtilities*>( Dll::Tls() );
+
+    if ( ! utility->iPlayerUtility )
+    {
+        utility->iPlayerUtility = new (ELeave) CMpxVideoPlayerUtility( aVideoPlaybackCtrl );
+        utility->iPlayerUtility->ConstructL();
+    }
+
+    return utility->iPlayerUtility;
+}
+
+CMpxVideoPlayerUtility::CMpxVideoPlayerUtility( CMPXVideoPlaybackController* aVideoPlaybackCtrl )
+    : iVideoPlaybackController( aVideoPlaybackCtrl )
+    , iFirstPlayCmd( ETrue )
+{
+}
+
+void CMpxVideoPlayerUtility::ConstructL()
+{
+    iEventArray = new (ELeave) CMmfCallbackArray( 1 );
+    iCallback   = CIdle::NewL( CActive::EPriorityLow );
+}
+
+CMpxVideoPlayerUtility::~CMpxVideoPlayerUtility()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::~CMpxVideoPlayerUtility()"));
+
+    if ( iCallback->IsActive() )
+    {
+        iCallback->Cancel();
+    }
+
+    delete iCallback;
+
+    iEventArray->ResetAndDestroy();
+}
+
+void CMpxVideoPlayerUtility::Close()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::Close()"));
+}
+
+void CMpxVideoPlayerUtility::Reset()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::Reset()"));
+}
+
+void CMpxVideoPlayerUtility::OpenControllerL()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::OpenControllerL()"));
+}
+
+TTimeIntervalMicroSeconds CMpxVideoPlayerUtility::PositionL() const
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::PositionL(%Ld)"), iPosition.Int64());
+
+    return iPosition;
+}
+
+TTimeIntervalMicroSeconds CMpxVideoPlayerUtility::DurationL() const
+{
+    TTimeIntervalMicroSeconds dur( iDuration );
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::DurationL(%Ld)"), dur.Int64());
+    return dur;
+}
+
+TInt CMpxVideoPlayerUtility::NumberOfMetaDataEntriesL() const
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::NumberOfMetaDataEntriesL(%d)"), iMetaData.Count() );
+
+    return iMetaData.Count();
+}
+
+CMMFMetaDataEntry* CMpxVideoPlayerUtility::MetaDataEntryL( TInt aMetaDataIndex ) const
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::MetaDataEntryL()"),
+                   _L("index = %d"), aMetaDataIndex );
+
+    CMMFMetaDataEntry* pEntry = NULL;
+
+    if ( aMetaDataIndex < iMetaData.Count() )
+    {
+        CMMFMetaDataEntry* pTmp = iMetaData[aMetaDataIndex];
+
+        if ( pTmp )
+        {
+            pEntry = CMMFMetaDataEntry::NewL( pTmp->Name(), pTmp->Value() );
+        }
+    }
+
+    return pEntry;
+}
+
+void CMpxVideoPlayerUtility::SetVolumeL( TInt aVolume )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::SetVolumeL()"),
+                   _L("volume = %d"), aVolume );
+
+    iVolume = aVolume;
+}
+
+TInt CMpxVideoPlayerUtility::Volume() const
+{
+    TInt vol = iVolume;
+
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::Volume(%d)"), vol);
+
+    return vol;
+}
+
+TInt CMpxVideoPlayerUtility::MaxVolume() const
+{
+    TInt maxVol = MAX_VOLUME;
+
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::MaxVolume(%d)"), maxVol);
+
+    return maxVol;
+}
+
+void CMpxVideoPlayerUtility::VideoFrameSizeL( TSize& aSize ) const
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::VideoFrameSizeL()"));
+    aSize = iSize;
+}
+
+TInt CMpxVideoPlayerUtility::AudioBitRateL() const
+{
+    TInt bitRate = iAudioBitRate;
+
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::AudioBitRateL(%d)"), bitRate);
+
+    return bitRate;
+}
+
+TInt CMpxVideoPlayerUtility::VideoBitRateL() const
+{
+    TInt bitRate = iVideoBitRate;
+
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::VideoBitRateL(%d)"), bitRate);
+
+    return bitRate;
+}
+
+TInt CMpxVideoPlayerUtility::VideoFormatMimeType( TDes8& aMimeType ) const
+{
+    if ( iMimeType )
+    {
+        aMimeType = iMimeType->Des();
+    }
+
+    return KErrNone;
+}
+
+void CMpxVideoPlayerUtility::RefreshFrameL()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::RefreshFrameL()"));
+}
+
+void CMpxVideoPlayerUtility::RestartDsa( const TRegion& /*aRegion*/ )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::RestartDsa()"));
+
+    if ( iStifObserver )
+    {
+        TCallbackEvent* event = new TCallbackEvent;
+        event->iEvent = EPbCmdRestartDSA;
+        event->iData  = 0;
+        event->iError = KErrNone;
+        iStifObserver->HandleUtilityEvent( event );
+    }
+}
+
+void CMpxVideoPlayerUtility::AbortDsa()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::AbortDsa()"));
+
+    if ( iStifObserver )
+    {
+        TCallbackEvent* event = new TCallbackEvent;
+        event->iEvent = EPbCmdAbortDSA;
+        event->iData  = 0;
+        event->iError = KErrNone;
+        iStifObserver->HandleUtilityEvent( event );
+    }
+}
+
+void CMpxVideoPlayerUtility::SetDisplayWindowL( const TRect& /*aScreenRect*/,
+                                                const TRect& /*aClipRect*/,
+                                                const TRegion& /*aDrawingRegion*/ )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::SetDisplayWindowL()"));
+
+    if ( iStifObserver )
+    {
+        TCallbackEvent* event = new TCallbackEvent;
+        event->iEvent = EPbCmdSetDisplayWindow;
+        event->iData  = 0;
+        event->iError = KErrNone;
+        iStifObserver->HandleUtilityEvent( event );
+    }
+}
+
+TBool CMpxVideoPlayerUtility::AudioEnabledL() const
+{
+    TBool enabled = iAudioEnabled;
+
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::AudioEnabledL(%d)"), enabled);
+
+    return enabled;
+}
+
+void CMpxVideoPlayerUtility::Prepare()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::Prepare()"));
+
+    //
+    //  Read PrepareComplete error
+    //
+    RFile file;
+    _LIT(KFileName, "\\vhpp_prepareerror.txt");
+
+    RFs fs;
+    fs.Connect();
+
+    file.Open( fs, KFileName, EFileRead | EFileShareAny );
+
+    TInt prepError;
+    HBufC8* fBuf = HBufC8::NewL( 16 );
+    TPtr8 fileBuf = fBuf->Des();
+
+    file.Read( fileBuf, 16 );
+
+    TLex8 number( fileBuf );
+    number.Val( prepError );
+
+    TMMFEvent* event = new TMMFEvent();
+
+    event->iEventType = KMMFEventCategoryVideoPrepareComplete;
+    event->iErrorCode = prepError;
+
+    AddCallbackEvent( event );
+
+    file.Close();
+    fs.Close();
+}
+
+void CMpxVideoPlayerUtility::GetVideoLoadingProgressL( TInt& aPercentageProgress )
+{
+    aPercentageProgress = 100;
+
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::GetVideoLoadingProgressL(%d)"), aPercentageProgress );
+}
+
+void CMpxVideoPlayerUtility::Play()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::Play()"));
+
+    if ( iFirstPlayCmd )
+    {
+        //
+        //  Send Loading Started
+        //
+        TMMFEvent* event = new TMMFEvent();
+        event->iErrorCode = KErrNone;
+        event->iEventType = KMMFEventCategoryVideoLoadingStarted;
+
+        AddCallbackEvent( event );
+
+        //
+        //  Send Loading Complete
+        //
+        event = new TMMFEvent();
+        event->iErrorCode = KErrNone;
+        event->iEventType = KMMFEventCategoryVideoLoadingComplete;
+
+        AddCallbackEvent( event );
+
+        iFirstPlayCmd = EFalse;
+    }
+}
+
+void CMpxVideoPlayerUtility::PauseL()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::PauseL()"));
+}
+
+void CMpxVideoPlayerUtility::SetPlayVelocityL( TInt aVelocity )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::SetPlayVelocityL()"),
+                   _L("velocity = %d"), aVelocity);
+}
+
+void CMpxVideoPlayerUtility::SetPositionL(const TTimeIntervalMicroSeconds& aPosition)
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::SetPositionL()"),
+                   _L("aPosition = %Ld"), aPosition.Int64());
+
+    iPosition = aPosition;
+
+    RFile file;
+    _LIT(KFileName, "\\vhpp_playerror.txt");
+
+    RFs fs;
+    fs.Connect();
+
+    TInt err = file.Open( fs, KFileName, EFileRead | EFileShareAny );
+
+    if ( err == KErrNone )
+    {
+        TInt playError;
+        HBufC8* fBuf = HBufC8::NewL( 16 );
+        TPtr8 fileBuf = fBuf->Des();
+
+        file.Read( fileBuf, 16 );
+
+        TLex8 number( fileBuf );
+        number.Val( playError );
+
+        TMMFEvent* event = new TMMFEvent();
+
+        event->iErrorCode = playError;
+
+        if ( iPosition >= iDuration )
+        {
+            MPX_DEBUG(_L("    Sending PlaybackComplete()"));
+
+            //
+            //  Send Playback Complete
+            //
+            event->iEventType = KMMFEventCategoryPlaybackComplete;
+        }
+        else if ( iPosition < 0 )
+        {
+            //
+            //  Send Event
+            //
+            event->iEventType = KMMFEventCategoryVideoPlayerGeneralError;
+        }
+
+        AddCallbackEvent( event );
+    }
+
+    file.Close();
+    fs.Close();
+}
+
+TInt CMpxVideoPlayerUtility::Stop()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::Stop()"));
+
+    return KErrNone;
+}
+
+void CMpxVideoPlayerUtility::HandleEvent( const TMMFEvent& aEvent )
+{
+    MPX_ENTER_EXIT(
+        _L("CMpxVideoPlayerUtility::HandleEvent()"),
+        _L("EventType = 0x%08x, ErrorCode = %d"), aEvent.iEventType, aEvent.iErrorCode );
+
+    //
+    //  Call on the controller to handle the event
+    //
+    iVideoPlaybackController->HandleMMFEvent( aEvent );
+}
+
+void CMpxVideoPlayerUtility::OpenFileL( const RFile& aFile )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::OpenFileL()"));
+
+    TInt openError = ReadOpenError();
+
+    if ( ! openError )
+    {
+        ReadFileDetails( aFile );
+    }
+}
+
+void CMpxVideoPlayerUtility::OpenFileL( const TDesC& aFileName )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::OpenFileL()"),
+                   _L("aFileName = %S"), &aFileName);
+}
+
+void CMpxVideoPlayerUtility::OpenUrlL( const TDesC& aUrl, TInt aApId )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::OpenUrlL()"),
+                   _L("aUrl = %S, ApId = %d"), &aUrl, aApId);
+
+    TInt openError = ReadOpenError();
+}
+
+
+TInt CMpxVideoPlayerUtility::ReadOpenError()
+{
+    //
+    //  Read OpenComplete error
+    //
+    RFile file;
+    _LIT(KFileName, "\\vhpp_openerror.txt");
+
+    RFs fs;
+    fs.Connect();
+
+    file.Open( fs, KFileName, EFileRead | EFileShareAny );
+
+    TInt openError;
+    HBufC8* fBuf = HBufC8::NewL( 16 );
+    TPtr8 fileBuf = fBuf->Des();
+
+    file.Read( fileBuf, 16 );
+
+    TLex8 number( fileBuf );
+    number.Val( openError );
+
+    TMMFEvent* event = new TMMFEvent();
+
+    event->iEventType = KMMFEventCategoryVideoOpenComplete;
+    event->iErrorCode = openError;
+
+    AddCallbackEvent( event );
+
+    file.Close();
+    fs.Close();
+
+    return openError;
+}
+
+
+TInt CMpxVideoPlayerUtility::CustomCommandSync( const TMMFMessageDestinationPckg& /*aDestination*/,
+                                                TInt /*aFunction*/,
+                                                const TDesC8& /*aDataTo1*/,
+                                                const TDesC8& /*aDataTo2*/ )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::CustomCommandSync()"));
+
+    return KErrNone;
+}
+
+TInt CMpxVideoPlayerUtility::SendMmfEvent( TAny* aPtr )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::SendMmfEvent()"));
+
+    static_cast<CMpxVideoPlayerUtility*>(aPtr)->DoSendMmfEvent();
+
+    return KErrNone;
+}
+
+void CMpxVideoPlayerUtility::DoSendMmfEvent()
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::DoSendMmfEvent()"));
+
+    TInt count = iEventArray->Count();
+
+    if ( count > 0 )
+    {
+        TMMFEvent* event = (*iEventArray)[0];
+
+        iVideoPlaybackController->HandleMMFEvent( *event );
+
+        if ( count > 1 )
+        {
+            //
+            //  More events exist, start another callback
+            //
+            iCallback->Start( TCallBack( CMpxVideoPlayerUtility::SendMmfEvent, this ) );
+        }
+
+        iEventArray->Delete( 0 );
+    }
+}
+
+void CMpxVideoPlayerUtility::AddCallbackEvent( TMMFEvent* event )
+{
+    iEventArray->AppendL( event );
+
+    if ( ! iCallback->IsActive() )
+    {
+        iCallback->Start( TCallBack( CMpxVideoPlayerUtility::SendMmfEvent, this ) );
+    }
+}
+
+void CMpxVideoPlayerUtility::AddStifObserver( MStifTestObserver* aStifObserver )
+{
+    iStifObserver = aStifObserver;
+}
+
+void CMpxVideoPlayerUtility::ReadFileDetails( const RFile& aFile )
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::ReadFileDetails()"));
+
+    HBufC8* fBuf = HBufC8::NewL( 1024 );
+    TPtr8 fileBuf = fBuf->Des();
+
+    aFile.Read( fileBuf, 1024 );
+
+    ParseFileDetails( fileBuf );
+}
+
+void CMpxVideoPlayerUtility::ParseFileDetails( TDesC8& aBuffer )
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::ParseFileDetails()"));
+
+    TPtrC8 bufferPtr;
+    bufferPtr.Set( aBuffer );
+
+    TInt offset;
+
+    TInt error = KErrNone;
+
+    do
+    {
+        error = KErrNone;
+        TPtrC8 ptr;
+
+        offset = bufferPtr.Find(_L8(";"));
+
+        if ( offset == KErrNotFound )
+        {
+            error = offset;
+        }
+        else
+        {
+            ptr.Set( bufferPtr.Left( offset ) );
+            bufferPtr.Set( bufferPtr.Mid( ++offset ));
+
+            ParseDetail( ptr );
+        }
+    }
+    while ( ! error );
+}
+
+
+TInt CMpxVideoPlayerUtility::ParseDetail( TPtrC8& aData )
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::ParseDetail()"));
+
+    TInt error = KErrNone;
+
+    TPtrC8 item;
+    TPtrC8 value;
+
+    TInt offset = aData.Find(_L8("="));
+
+    if ( offset == KErrNotFound )
+    {
+        error = offset;
+    }
+    else
+    {
+        item.Set( aData.Left( offset ) );
+        value.Set( aData.Mid( ++offset ) );
+
+        FindFileDetail( item, value );
+    }
+
+    return error;
+}
+
+
+void CMpxVideoPlayerUtility::FindFileDetail( TPtrC8& aItem, TPtrC8& value )
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::FindFileDetail()"));
+
+    if ( ! aItem.Compare(_L8("VideoFrameSizeWidth")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iSize.iWidth );
+    }
+    else if ( ! aItem.Compare(_L8("VideoFrameSizeHeight")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iSize.iHeight );
+    }
+    else if ( ! aItem.Compare(_L8("VideoBitRate")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iVideoBitRate );
+    }
+    else if ( ! aItem.Compare(_L8("AudioBitRate")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iAudioBitRate );
+    }
+    else if ( ! aItem.Compare(_L8("AudioEnabled")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iAudioEnabled );
+    }
+    else if ( ! aItem.Compare(_L8("Duration")) )
+    {
+        TInt dur = 0;
+        TLex8 lex(value);
+        lex.Val( dur );
+
+        iDuration = dur;
+    }
+    else if ( ! aItem.Compare(_L8("MimeType")) )
+    {
+        delete iMimeType;
+
+        iMimeType = value.AllocL();
+    }
+    else if ( ! aItem.Compare(_L8("NumMetaDataEntries")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iNumMetaDataEntries );
+    }
+    else if ( ! aItem.Compare(_L8("Seekable")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iSeekable );
+    }
+    else if ( ! aItem.Compare(_L8("LiveStream")) )
+    {
+        TLex8 lex(value);
+        lex.Val( iLiveStream );
+    }
+    else if ( ! aItem.Compare(_L8("Title")) )
+    {
+        delete iTitle;
+
+        iTitle = value.AllocL();
+    }
+    else if ( ! aItem.Compare(_L8("Description")) )
+    {
+        delete iDescription;
+
+        iDescription = value.AllocL();
+    }
+    else if ( ! aItem.Compare(_L8("Artist")) )
+    {
+        delete iArtist;
+
+        iArtist = value.AllocL();
+    }
+
+    HBufC* name = HBufC::NewL( aItem.Length() );
+    TPtr namePtr( name->Des() );
+    namePtr.Copy( aItem );
+
+    HBufC* data = HBufC::NewL( value.Length() );
+    TPtr dataPtr( data->Des() );
+    dataPtr.Copy( value );
+
+    CMMFMetaDataEntry* pEntry = CMMFMetaDataEntry::NewL( namePtr, dataPtr );
+    iMetaData.Append( pEntry );
+}
+
+void CMpxVideoPlayerUtility::SetVolumeSteps( TInt aVolumeSteps )
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::SetVolumeSteps()"));
+
+    //
+    // variate volume steps to set expected result for STIF
+    // depending on if it's a 10-steps or 20-steps)
+    //
+    iVideoPlaybackController->SetVolumeSteps( aVolumeSteps );
+}
+
+TUint32 CMpxVideoPlayerUtility::FourCCCode() const
+{
+    MPX_DEBUG(_L("CMpxVideoPlayerUtility::FourCCCode()"));
+
+    return 0;
+}
+
+#ifdef SYMBIAN_BUILD_GCE
+
+TInt CMpxVideoPlayerUtility::VideoSurfaceCreated()
+{
+    return KErrNone;
+}
+
+TInt CMpxVideoPlayerUtility::SurfaceParametersChanged()
+{
+    return KErrNone;
+}
+
+TInt CMpxVideoPlayerUtility::RemoveSurface()
+{
+    return KErrNone;
+}
+
+#endif
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+void CMpxVideoPlayerUtility::OpenFile64L( const RFile64& aFile )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoPlayerUtility::OpenFile64L()"));
+
+    TInt openError = ReadOpenError();
+
+    if ( ! openError )
+    {
+        ReadFileDetails( aFile );
+    }
+}
+
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+