videoplayback/videohelix/src/mpxvideohelixplayback.cpp
changeset 0 96612d01cf9f
child 8 ce5ada96ab30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/videohelix/src/mpxvideohelixplayback.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2008 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:  This class plays local video file
+ *
+*/
+
+// Version : %version: 11 %
+
+
+//
+//  INCLUDE FILES
+//
+#include <apgcli.h>
+#include <e32cmn.h>
+#include <mpxcenrepwatcher.h>
+#include <mpxcenrepobserver.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxcommandgeneraldefs.h>
+#include <mpxmessagegeneraldefs.h>
+#include <mpxplaybackcommanddefs.h>
+#include <mmf/server/mmffile.h>
+
+#include "mpxvideohelixplayback.h"
+#include "mpxvideoprivatecrkeys.h"
+#include <mpxvideoplaybackdefs.h>
+
+//
+//  CONSTANTS
+//
+const TUid KLocalPlaybackUid = { 0x10282551 };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+//  ----------------------------------------------------------------------------
+//    Two-phased constructor.
+//  ----------------------------------------------------------------------------
+//
+CMPXVideoHelixPlayback* CMPXVideoHelixPlayback::NewL( TAny* /*aInitParams*/ )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::NewL()"));
+
+    CMPXVideoHelixPlayback* p = new (ELeave) CMPXVideoHelixPlayback();
+    CleanupStack::PushL(p);
+    p->ConstructL();
+    CleanupStack::Pop(p);
+    return p;
+}
+
+//  ----------------------------------------------------------------------------
+//    Symbian 2nd phase constructor can leave.
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::ConstructL()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::ConstructL()"));
+
+    iVideoPlaybackCtlr = CMPXVideoPlaybackController::NewL( *iObs );
+
+    User::LeaveIfError( iFs.Connect() );
+    iFs.ShareProtected();
+}
+
+//  ----------------------------------------------------------------------------
+//    C++ constructor
+//  ----------------------------------------------------------------------------
+//
+CMPXVideoHelixPlayback::CMPXVideoHelixPlayback()
+{
+    MPX_DEBUG(_L("CMPXVideoHelixPlayback::CMPXVideoHelixPlayback()"));
+}
+
+//  ----------------------------------------------------------------------------
+//    Destructor
+//  ----------------------------------------------------------------------------
+//
+CMPXVideoHelixPlayback::~CMPXVideoHelixPlayback()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::~CMPXVideoHelixPlayback"));
+
+    iFs.Close();
+
+    if ( iVideoPlaybackCtlr )
+    {
+        delete iVideoPlaybackCtlr;
+        iVideoPlaybackCtlr = NULL;
+    }
+}
+
+//  ------------------------------------------------------------------------------------------------
+//    Sets the file name and file handle
+//  ------------------------------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::OpenFileHandleL( const TDesC& aUri, RFile& aFile )
+{
+    MPX_ENTER_EXIT(
+            _L("CMPXVideoHelixPlayback::OpenFileHandleL( RFile )"),
+            _L("aSong %S"), &aUri );
+
+    if ( aFile.SubSessionHandle() )
+    {
+        aFile.Close();
+    }
+
+    TInt err = aFile.Open( iFs, aUri, EFileRead | EFileShareReadersOrWriters );
+    HandleOpenFileHandleL( err );
+}
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a file name
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::InitialiseL( const TDesC& aSong )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitialiseL()"),
+                   _L("aSong %S"), &aSong );
+
+    RFile fileHandle;
+
+    CleanupClosePushL( fileHandle );
+
+    MPX_TRAPD( err, OpenFileHandleL( aSong, fileHandle ));
+
+    if ( err == KErrNone )
+    {
+        iVideoPlaybackCtlr->OpenFileL( aSong, fileHandle );
+    }   
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    else if ( err == KErrTooBig )
+    {
+        // 
+        // use RFile64 handle
+        //
+        RFile64 fileHandle64;
+        CleanupClosePushL( fileHandle64 );
+        
+        MPX_TRAPD( err, OpenFileHandle64L( aSong, fileHandle64 ));
+
+        if ( err != KErrNone )
+        {
+            // Handle error
+            iVideoPlaybackCtlr->HandleError( err );
+        }
+        else
+        {
+            iVideoPlaybackCtlr->OpenFile64L( aSong, fileHandle64 );
+        }
+        
+        CleanupStack::PopAndDestroy(); // fileHandle64        
+    }
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    else
+    {
+        // Handle error
+        iVideoPlaybackCtlr->HandleError( err );        
+    }
+    
+    CleanupStack::PopAndDestroy(); // fileHandle
+}
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a file handle
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::InitialiseL( RFile& aSong )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitialiseL( RFile )"));
+
+    TFileName filename;
+    aSong.FullName( filename );
+
+    iVideoPlaybackCtlr->OpenFileL( filename, aSong );
+}
+
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a file name
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::InitStreamingL( const TDesC& aUri,
+                                             const TDesC8& /*aType*/,
+                                             TInt aAccessPoint )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitStreamingL()"),
+                   _L("aUri %S, aType %d"), &aUri, aAccessPoint );
+
+    RFile fileHandle;
+
+    CleanupClosePushL( fileHandle );
+
+    MPX_TRAPD( err, OpenFileHandleL( aUri, fileHandle ));
+
+    if ( err != KErrNone )
+    {
+        // Handle error
+        iVideoPlaybackCtlr->HandleError( err );
+    }
+    else
+    {
+        iVideoPlaybackCtlr->OpenFileL( aUri, fileHandle, aAccessPoint );
+    }
+
+    CleanupStack::PopAndDestroy();
+}
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a file handle
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::InitStreamingL( RFile& aFile, TInt aAccessPoint  )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitStreamingL( RFile )"));
+
+    TFileName filename;
+    aFile.FullName( filename );
+
+    iVideoPlaybackCtlr->OpenFileL( filename, aFile, aAccessPoint );
+}
+
+//  ----------------------------------------------------------------------------
+//    Executes a command on the selected song
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::CommandL( CMPXCommand& aCmd )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::CommandL() - CMPXCommand"));
+
+    iVideoPlaybackCtlr->HandleCommandL( aCmd );
+}
+
+
+//  ----------------------------------------------------------------------------
+//    Executes a command on the selected song
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::CommandL(TMPXPlaybackCommand aCmd, TInt aData)
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::CommandL() - TMPXPlaybackCommand"));
+
+    iVideoPlaybackCtlr->HandleCommandL(aCmd, aData);
+}
+
+
+//  ----------------------------------------------------------------------------
+//    Sets a property of the plugin
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::SetL( TMPXPlaybackProperty aProperty, TInt aValue )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::SetL()"));
+
+    // Route the SetL() to VideoPlaybackController
+    iVideoPlaybackCtlr->SetPropertyL(aProperty, aValue);
+}
+
+//  ----------------------------------------------------------------------------
+//    Gets a property of the plugin (async)
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::PropertyL( TMPXPlaybackProperty aProperty ) const
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::PropertyL()"));
+
+    // Route the PropertyL() to VideoPlaybackController
+    iVideoPlaybackCtlr->GetPropertyL( aProperty );
+}
+
+//  ----------------------------------------------------------------------------
+//    Gets a list of sub players, UPnP only
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::SubPlayerNamesL()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::SubPlayerNamesL()"));
+    iObs->HandleSubPlayerNames( KLocalPlaybackUid, NULL, ETrue, KErrNone );
+}
+
+//  ----------------------------------------------------------------------------
+//    Select a sub player
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::SelectSubPlayerL( TInt /*aIndex*/ )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::SelectSubPlayerL()"));
+    User::Leave( KErrNotSupported );
+}
+
+//  ----------------------------------------------------------------------------
+//    Gets media properties
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::MediaL( const TArray<TMPXAttribute>& aAttrs )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::MediaL()"));
+    iVideoPlaybackCtlr->SendMediaL( aAttrs );
+}
+
+//  ----------------------------------------------------------------------------
+//    Cancel request
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::CancelRequest()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::CancelRequest()"));
+}
+
+//  ----------------------------------------------------------------------------
+//    Handle Open File Handle
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::HandleOpenFileHandleL( TInt aError )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::HandleOpenFileHandleL()"));
+    
+    //
+    //  Remap KErrNotReady to KErrNotFound, because it is referencing a drive
+    //  that is not existent
+    //
+    if ( aError == KErrNotReady )
+    {
+        aError = KErrNotFound;
+    }
+    
+    MPX_DEBUG(_L("CMPXVideoHelixPlayback::HandleOpenFileHandleL() Open error = %d"), aError);
+    
+    //
+    //  if aSong is an streaming link and contains one of the streaming schemas
+    //  eg. rtsp:// , http:// etc. then a file handle can not be opened
+    //  ignore KErrBadName
+    //
+    if ( aError != KErrBadName )
+    {
+        User::LeaveIfError( aError );
+    }
+}
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+//  ------------------------------------------------------------------------------------------------
+//    Sets the file name and 64-bit file handle
+//  ------------------------------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::OpenFileHandle64L( const TDesC& aUri, RFile64& aFile )
+{
+    MPX_ENTER_EXIT(
+            _L("CMPXVideoHelixPlayback::OpenFileHandle64L( RFile64 )"),
+            _L("aSong %S"), &aUri );
+
+    if ( aFile.SubSessionHandle() )
+    {
+        aFile.Close();
+    }
+
+    TInt err = aFile.Open( iFs, aUri, EFileRead | EFileShareReadersOrWriters );
+    HandleOpenFileHandleL( err );
+}
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a 64-bit file handle
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::Initialise64L( RFile64& aSong )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::Initialise64L( RFile64 )"));
+
+    TFileName filename;
+    aSong.FullName( filename );
+
+    iVideoPlaybackCtlr->OpenFile64L( filename, aSong );
+}
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a 64-bit file handle
+//  ----------------------------------------------------------------------------
+//
+void CMPXVideoHelixPlayback::InitStreaming64L( RFile64& aFile, TInt aAccessPoint  )
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitStreaming64L( RFile64 )"));
+
+    TFileName filename;
+    aFile.FullName( filename );
+
+    iVideoPlaybackCtlr->OpenFile64L( filename, aFile, aAccessPoint );
+}
+
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+// End of file