diff -r 000000000000 -r a2952bb97e68 mmappcomponents/videoplaylistutility/src/videoplaylistutility.cpp --- /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 +#include +#include +#include +#include +#include +#include + +#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(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