mmappcomponents/videoplaylistutility/src/videoplaylistutility.cpp
changeset 0 a2952bb97e68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/videoplaylistutility/src/videoplaylistutility.cpp	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,326 @@
+/*
+* 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:  Implementation of CVideoPlaylistUtility
+*
+*/
+
+// Version : %version: 2 %
+
+
+
+// INCLUDE FILES
+
+#include <videoplaylistutility.h>
+#include <mediarecognizer.h>
+#include <streaminglinkmodel.h>
+#include <mpxmediaarray.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneralextdefs.h>
+
+#include "videoplaylistutility_log.h"
+
+
+// CONSTANTS
+const TInt KSingleLink(1);
+_LIT( KDATATYPEVIDEOHELIX, "video/videohelix" );
+
+
+// ============================ MEMBER FUNCTIONS ===================================================
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::CVideoPlaylistUtility
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -------------------------------------------------------------------------------------------------
+//
+CVideoPlaylistUtility::CVideoPlaylistUtility()
+: iAsx( EFalse )
+{
+
+}
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -------------------------------------------------------------------------------------------------
+//
+void CVideoPlaylistUtility::ConstructL()
+{
+
+}
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::NewL
+// Two-phased constructor.
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C CVideoPlaylistUtility* CVideoPlaylistUtility::NewL()
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::NewL()"));
+
+    CVideoPlaylistUtility* self = new( ELeave ) CVideoPlaylistUtility();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::~CVideoPlaylistUtility
+// Destructor
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C CVideoPlaylistUtility::~CVideoPlaylistUtility()
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::~CVideoPlaylistUtility()"));
+     
+    if(iPlaylistArray)
+    {
+        delete iPlaylistArray;
+        iPlaylistArray = NULL;
+    }
+
+    if(iStreamingLinkModel)
+    {
+        iStreamingLinkModel->ResetLinkCount();
+        iStreamingLinkModel->FreeFilehandle();
+
+        delete iStreamingLinkModel;
+        iStreamingLinkModel = NULL;
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CVideoPlaylistUtility::GetItemArrayL
+// -------------------------------------------------------------------------------------------------
+//
+void CVideoPlaylistUtility::GetItemArrayL( TInt aAccessPointId )
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::GetItemArrayL()" ));
+        
+    HBufC* tempBuffer = HBufC::NewLC( iStreamingLinkModel->MaxLinkLength() );
+    TPtr tempurl(tempBuffer->Des());
+    
+    TInt linkError = KErrNone; 
+    TInt localUrl;
+    TBool seek = ETrue;
+
+    iPlaylistArray = CMPXMediaArray::NewL();
+    
+    while(linkError == KErrNone)
+    {
+        linkError = iStreamingLinkModel->GetNextLinkL( tempurl, localUrl ); 
+        
+        if (linkError == KErrNone)
+        {
+            CMPXMedia* lItem = CMPXMedia::NewL();
+            CleanupStack::PushL( lItem );
+
+            lItem->SetTObjectValueL(KMPXMediaGeneralType, EMPXItem);
+            lItem->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXVideo);
+            // Bump up the score during plugin resolution in the FW
+            lItem->SetTextValueL(KMPXMediaGeneralMimeType, KDATATYPEVIDEOHELIX);
+            lItem->SetTextValueL(KMPXMediaGeneralUri, *tempBuffer);
+            if (!localUrl)
+            {
+                // embed the access point into the playlist
+                lItem->SetTObjectValueL(KMPXMediaGeneralExtAccessPoint, aAccessPointId); 
+            }
+            
+            if ( iAsx )
+            {
+                // Get asx seek attribute
+                seek = iStreamingLinkModel->IsSeekable();
+
+                lItem->SetTObjectValueL<TBool>(KMPXMediaGeneralExtVideoSeekable, seek); 
+            }
+            
+            CleanupStack::Pop( lItem );
+            
+            iPlaylistArray->AppendL(lItem);
+            lItem = NULL;   
+        }
+    }
+        
+
+    CleanupStack::Pop();  // tempBuffer
+    delete tempBuffer;    
+}
+
+// -----------------------------------------------------------------------------
+// CMPlayerM3UPlaylistParser::ComposePlaylistL
+// -----------------------------------------------------------------------------
+//
+void CVideoPlaylistUtility::ComposePlaylistL()
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::ComposePlaylistL()"));
+    
+    // instantiate a CMPXMedia object to represent the playlist 
+    // which will contain the CMPXMediaArray
+    iPlaylist = CMPXMedia::NewL();
+            
+    // set type
+    iPlaylist->SetTObjectValueL(KMPXMediaGeneralType, EMPXItem);
+        
+    // set category
+    iPlaylist->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXPlaylist);        
+
+    // set iPlaylist array
+    iPlaylist->SetCObjectValueL(KMPXMediaArrayContents, iPlaylistArray);
+        
+    // set array acount
+    iPlaylist->SetTObjectValueL(KMPXMediaArrayCount, iPlaylistArray->Count());
+
+    // the ownership has been transfered 
+    // safe to delete 
+    delete iPlaylistArray;
+    iPlaylistArray = NULL;
+
+}
+    
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::OpenLinkFileL
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C CMPXMedia* CVideoPlaylistUtility::GetPlayListL( TInt aAccessPointId )
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::GetPlayListL()"));
+    
+    CMPXMedia* playlist = NULL;
+    
+    // Create the CMPXMediaItemArray that will have the links
+    GetItemArrayL(aAccessPointId);
+    
+    // Embed the CMPXMediaItemArray into a CMPXMedia object 
+    ComposePlaylistL();
+    
+    playlist = iPlaylist;
+    iPlaylist = NULL;
+    
+    return playlist;
+}
+
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::GetFileInfoL
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C void CVideoPlaylistUtility::GetFileInfoL( const TDesC& aFileName, 
+                                                        CMediaRecognizer::TMediaType aMediaType,
+                                                        TBool& aSingleLink, TBool& aLocalFile )
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::GetFileInfoL() FileName "));
+
+    TInt error = KErrNone;  
+    aSingleLink = aLocalFile = EFalse;
+    iStreamingLinkModel = CStreamingLinkModel::NewL();
+    
+        
+    if ( aMediaType == CMediaRecognizer::ELocalRamFile )
+    {
+        error = iStreamingLinkModel->OpenLinkFileL( aFileName );
+    }
+    else 
+    {
+        error = iStreamingLinkModel->OpenAsxFileL( aFileName ); 
+        iAsx = ETrue;
+    }
+    
+    if(error == KErrNone)
+    {
+        // check to see if its a single link file 
+        if (iStreamingLinkModel->MultiLinksCount() == KSingleLink)
+        {
+            aSingleLink = ETrue;
+        }
+        aLocalFile = iStreamingLinkModel->AreAllLinksLocal();
+    }
+    else
+    {
+        User::Leave( KErrBadName );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::GetFileInfoL
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C void CVideoPlaylistUtility::GetFileInfoL( RFile& aFile, 
+                                                        CMediaRecognizer::TMediaType aMediaType,
+                                                        TBool& aSingleLink, TBool& aLocalFile )
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::GetFileInfoL() RFile"));
+
+    TInt error = KErrNone;  
+    aSingleLink = aLocalFile = EFalse;
+    iStreamingLinkModel = CStreamingLinkModel::NewL();
+            
+    if ( aMediaType == CMediaRecognizer::ELocalRamFile )
+    {
+        error = iStreamingLinkModel->OpenLinkFileL( aFile );
+    }
+    else 
+    {
+        error = iStreamingLinkModel->OpenAsxFileL( aFile ); 
+        iAsx = ETrue;
+    }
+    
+    if(error == KErrNone)
+    {
+        // check to see if its a single link file 
+        if (iStreamingLinkModel->MultiLinksCount() == KSingleLink)
+        {
+            aSingleLink = ETrue;
+        }
+        aLocalFile = iStreamingLinkModel->AreAllLinksLocal();
+    }
+    else
+    {
+        User::Leave( KErrBadName );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::GetLinkLC
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CVideoPlaylistUtility::GetLinkLC()
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::GetLinkLC()"));
+
+    TBool localUrl;
+    HBufC* tempBuffer = HBufC::NewLC( iStreamingLinkModel->MaxLinkLength() );
+  
+    TPtr tempurl(tempBuffer->Des());
+    
+    iStreamingLinkModel->GetNextLinkL( tempurl, localUrl );
+            
+    // push tempBuffer to the cleanup stack again
+    // caller of GetLinkLC will pop and destroy it
+    return tempurl;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CVideoPlaylistUtility::IsSeekable
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C TBool CVideoPlaylistUtility::IsSeekable()
+{
+    VIDEOPLAYLISTUTILITY_ENTER_EXIT(_L("CVideoPlaylistUtility::Seekable()"));
+
+    return iStreamingLinkModel->IsSeekable();
+}
+
+//  End of File