diff -r 481242ead638 -r 48e827313edd browserplugins/browseraudiovideoplugin/src/BavpMediaRecognizer.cpp --- a/browserplugins/browseraudiovideoplugin/src/BavpMediaRecognizer.cpp Tue Feb 02 00:12:41 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,518 +0,0 @@ -/* -* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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 CBavpMediaRecognizer -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include - -#include "BavpMediaRecognizer.h" -#include "BavpLogger.h" - -// CONSTANTS -_LIT8(KDataTypeRAM, "audio/x-pn-realaudio-plugin"); -_LIT8(KDataTypeSDP, "application/sdp"); -_LIT8(KDataTypePlaylist, "audio/mpegurl"); -_LIT8(KDataTypeRNG, "application/vnd.nokia.ringing-tone"); -_LIT8(KDataTypeMp3, "audio/mp3"); -_LIT8(KDataTypeXmp3, "audio/x-mp3"); -_LIT8(KDataTypeAudio3gp, "audio/3gpp"); - -#if defined(BRDO_ASX_FF) -_LIT8(KDataTypeWvx, "video/x-ms-wvx"); -_LIT8(KDataTypeWax, "audio/x-ms-wax"); -_LIT8(KDataTypeAsx, "video/x-ms-asx"); -#endif // BRDO_ASX_FF - -_LIT(KUrlRtsp, "rtsp:"); - -const TInt KDefaultBufferSize = 1000; - -// _LIT(KRamFileExtension,".ram"); - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::CBavpMediaRecognizer -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -CBavpMediaRecognizer::CBavpMediaRecognizer() - { - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -void CBavpMediaRecognizer::ConstructL() - { - User::LeaveIfError( iRecognizer.Connect() ); - if ( iRecognizer.GetMaxDataBufSize( iBufSize) || iBufSize <= 0 ) - { - iBufSize = KDefaultBufferSize; - } - CreateVideoFormatsArrayL(); - CreateAudioFormatsArrayL(); - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -CBavpMediaRecognizer* CBavpMediaRecognizer::NewL() - { - CBavpMediaRecognizer* self = new( ELeave ) CBavpMediaRecognizer; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::~CBavpMediaRecognizer -// Destructor -// ----------------------------------------------------------------------------- -CBavpMediaRecognizer::~CBavpMediaRecognizer() - { - iVideoControllers.ResetAndDestroy(); - iAudioControllers.ResetAndDestroy(); - iRecognizer.Close(); - iFileHandle.Close(); - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::IdentifyMediaTypeL -// ----------------------------------------------------------------------------- -TBavpMediaType -CBavpMediaRecognizer::IdentifyMediaTypeL( const TDesC& aMediaName, - TBool aIncludeUrls ) - { - TBavpMediaType ret = EUnidentified; - - if ( BaflUtils::FileExists( CEikonEnv::Static()->FsSession(), aMediaName ) ) - { - TDataRecognitionResult fileRecognitionResult; - RecognizeFileL( aMediaName, fileRecognitionResult ); - - if ( !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeSDP ) ) - { - ret = ELocalSdpFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalSdpFile") ); - } - - if ( ret == EUnidentified && - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypePlaylist ) ) - { - ret = ELocalAudioPlaylist; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioPlaylist") ); - } - - if ( ret == EUnidentified && - FileHasAudioSupport( aMediaName, fileRecognitionResult ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRNG ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeMp3 ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeXmp3 ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAudio3gp ) ) - { - ret = ELocalAudioFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioFile") ); - } - - if ( ret == EUnidentified && - FileHasVideoSupport( aMediaName, fileRecognitionResult ) ) - { - ret = ELocalVideoFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalVideoFile") ); - } - - if ( ret == EUnidentified && - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRAM ) ) - { - ret = ELocalRamFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalRamFile") ); - } -#if defined(BRDO_ASX_FF) - if ( ret == EUnidentified && - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWvx ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWax ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAsx )) - { - ret = ELocalAsxFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAsxFile") ); - } -#endif // BRDO_ASX_FF - } - else - { - if ( aIncludeUrls && ValidUrl( aMediaName ) ) - { - ret = EUrl; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - EUrl") ); - } - } - return ret; - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::IdentifyMediaTypeL -// ----------------------------------------------------------------------------- -TBavpMediaType -CBavpMediaRecognizer::IdentifyMediaTypeL( const TDesC& aMediaName, - RFile& aFile, - TBool aIncludeUrls ) - { - if( aFile.SubSessionHandle() ) - { - User::LeaveIfError( iFileHandle.Duplicate( aFile ) ); - } - - TBavpMediaType ret = EUnidentified; - - if ( BaflUtils::FileExists( CEikonEnv::Static()->FsSession(), aMediaName ) || FileHandleExists() ) - { - TDataRecognitionResult fileRecognitionResult; - RecognizeFileL( aMediaName, fileRecognitionResult ); - - if ( !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeSDP ) ) - { - ret = ELocalSdpFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalSdpFile") ); - } - - if ( ret == EUnidentified && - !fileRecognitionResult.iDataType.Des8().CompareF( - KDataTypePlaylist ) ) - { - ret = ELocalAudioPlaylist; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioPlaylist") ); - } - - if ( ret == EUnidentified && - FileHasAudioSupport( aMediaName, fileRecognitionResult ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRNG ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeMp3 ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeXmp3 ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAudio3gp ) ) - { - ret = ELocalAudioFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAudioFile") ); - } - - if ( ret == EUnidentified && - FileHasVideoSupport( aMediaName, fileRecognitionResult ) ) - { - ret = ELocalVideoFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalVideoFile") ); - } - - if ( ret == EUnidentified && - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeRAM ) ) - { - ret = ELocalRamFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalRamFile") ); - } -#if defined(BRDO_ASX_FF) - if ( ret == EUnidentified && - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWvx ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeWax ) || - !fileRecognitionResult.iDataType.Des8().CompareF( KDataTypeAsx ) ) - { - ret = ELocalAsxFile; - Log( EFalse, _L("CBavpMediaRecognizer::IdentifyMediaTypeL - ELocalAsxFile") ); - } -#endif // BRDO_ASX_FF - } - else - { - if (aIncludeUrls && ValidUrl(aMediaName)) - { - ret = EUrl; - } - } - return ret; - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::MimeTypeL -// ----------------------------------------------------------------------------- -TBuf -CBavpMediaRecognizer::MimeTypeL( const TDesC& aLocalFile ) - { - TDataRecognitionResult fileRecognitionResult; - RecognizeFileL( aLocalFile,fileRecognitionResult ); - - if ( fileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible ) - { - return fileRecognitionResult.iDataType.Des(); - } - - return KNullDesC(); - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::FileHasVideoSupport -// ----------------------------------------------------------------------------- -TBool CBavpMediaRecognizer::FileHasVideoSupport( const TDesC& /*aFileName*/, - TDataRecognitionResult& aFileRecognitionResult) - { - // Try with mime type - // We have a good quess -> go with mime type - if ( aFileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible ) - { - for (TInt i = 0 ; i < iVideoControllers.Count() ; i++) - { - RMMFFormatImplInfoArray formats = - iVideoControllers[i]->PlayFormats(); - for ( TInt j = 0; j < formats.Count() ; j++ ) - { - if ( formats[j]->SupportsMimeType( - aFileRecognitionResult.iDataType.Des8() ) ) - return ETrue; - } - } - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::FileHasAudioSupport -// ----------------------------------------------------------------------------- -TBool CBavpMediaRecognizer::FileHasAudioSupport(const TDesC& aFileName, - TDataRecognitionResult& aFileRecognitionResult ) - { - // try with mime type - // we have a good quess -> gogo with mime type - if (aFileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible) - { - for (TInt i = 0 ; i < iAudioControllers.Count() ; i++) - { - RMMFFormatImplInfoArray formats = - iAudioControllers[i]->PlayFormats(); - for (TInt j = 0; j < formats.Count() ; j++) - { - if ( formats[j]->SupportsMimeType( - aFileRecognitionResult.iDataType.Des8() ) ) - return ETrue; - } - } - } - - // we can't quess -> try with file extension - else - { - TParsePtrC parser(aFileName); - TBuf8 fileExtension; - fileExtension.Copy(parser.Ext()); - for (TInt i = 0 ; i < iVideoControllers.Count() ; i++) - { - RMMFFormatImplInfoArray formats = - iAudioControllers[i]->PlayFormats(); - for (TInt j = 0; j < formats.Count() ; j++) - { - if (formats[j]->SupportsFileExtension(fileExtension)) - return ETrue; - } - } - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::ValidUrl -// ----------------------------------------------------------------------------- -TBool CBavpMediaRecognizer::ValidUrl(const TDesC& aUrl) - { - TBool ret = EFalse; - if (aUrl.Find(KUrlRtsp) == 0) - { - ret = ETrue; - } - return ret; - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::MimeTypeL -// ----------------------------------------------------------------------------- -TBuf CBavpMediaRecognizer::MimeTypeL(RFile& aFile) - { - if( aFile.SubSessionHandle() ) - { - // Preferred - User::LeaveIfError( iFileHandle.Duplicate( aFile ) ); - } - - // If new handle is not valid, old might still be - if ( !FileHandleExists() ) - { - User::Leave( KErrBadHandle ); - } - - TDataRecognitionResult fileRecognitionResult; - RecognizeFileL( KNullDesC(), fileRecognitionResult ); - - if (fileRecognitionResult.iConfidence >= CApaDataRecognizerType::EPossible) - { - return fileRecognitionResult.iDataType.Des(); - } - return KNullDesC(); - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::CreateVideoFormatsArrayL -// ----------------------------------------------------------------------------- -void CBavpMediaRecognizer::CreateVideoFormatsArrayL() - { - CMMFControllerPluginSelectionParameters* cSelect = - CMMFControllerPluginSelectionParameters::NewLC(); - - CMMFFormatSelectionParameters* fSelect = - CMMFFormatSelectionParameters::NewLC(); - - // Set the play and record format selection parameters to be blank. - // - format support is only retrieved if requested. - cSelect->SetRequiredPlayFormatSupportL(*fSelect); - - // Set the media ids - RArray mediaIds; - CleanupClosePushL(mediaIds); - User::LeaveIfError(mediaIds.Append(KUidMediaTypeVideo)); - - // Get plugins that support at least video - cSelect->SetMediaIdsL( mediaIds, - CMMFPluginSelectionParameters::EAllowOtherMediaIds ); - - // iVideoControllers contains now all plugins that support at least video - cSelect->ListImplementationsL(iVideoControllers); - - // Clean up - CleanupStack::PopAndDestroy( 3 ); // fSelect, cSelect, mediaIds - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::CreateAudioFormatsArrayL -// ----------------------------------------------------------------------------- -void CBavpMediaRecognizer::CreateAudioFormatsArrayL() - { - CMMFControllerPluginSelectionParameters* cSelect = - CMMFControllerPluginSelectionParameters::NewLC(); - - CMMFFormatSelectionParameters* fSelect = - CMMFFormatSelectionParameters::NewLC(); - - // Set the play and record format selection parameters to be blank. - // - format support is only retrieved if requested. - cSelect->SetRequiredPlayFormatSupportL( *fSelect ); - - // Set the media ids - RArray mediaIds; - CleanupClosePushL( mediaIds ); - User::LeaveIfError( mediaIds.Append(KUidMediaTypeAudio) ); - - // Get plugins that supports audio only - cSelect->SetMediaIdsL( mediaIds, - CMMFPluginSelectionParameters::EAllowOnlySuppliedMediaIds ); - - // iAudioControllers contains now all audio plugins that - // support at least audio. - cSelect->ListImplementationsL( iAudioControllers ); - - // Clean up - CleanupStack::PopAndDestroy( 3 ); // fSelect, cSelect, mediaIds - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::RecognizeFileL -// ----------------------------------------------------------------------------- -void CBavpMediaRecognizer::RecognizeFileL( const TDesC& aFileName, - TDataRecognitionResult& aResult ) - { - aResult.Reset(); - HBufC8* fBuf = HBufC8::NewLC( iBufSize ); // fBuf in CS - TPtr8 fileBuf = fBuf->Des(); - - // Recognize file - if ( FileHandleExists() ) - { - User::LeaveIfError( iRecognizer.RecognizeData( iFileHandle, aResult ) ); - } - else - { - // Read file - User::LeaveIfError( ReadFile( aFileName, fileBuf ) ); - User::LeaveIfError( iRecognizer.RecognizeData( aFileName, fileBuf, aResult ) ); - } - - CleanupStack::PopAndDestroy(); // fBuf - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::ReadFile -// ----------------------------------------------------------------------------- -TInt CBavpMediaRecognizer::ReadFile( const TDesC& aFileName, TDes8& aBuf ) - { - RFile file; - TInt err; - - if ( FileHandleExists() ) - { - err = file.Duplicate( iFileHandle ); - } - else - { - err = file.Open( CEikonEnv::Static()->FsSession(), aFileName, - EFileRead | EFileShareAny ); - if ( err ) - { - err = file.Open( CEikonEnv::Static()->FsSession(), aFileName, - EFileRead | EFileShareReadersOnly ); - } - } - - if ( err ) - { - // If file does not exist - return err; - } - - // Read the beginning of the file - err = file.Read( 0, aBuf, iBufSize ); - file.Close(); - - return err; - } - -// ----------------------------------------------------------------------------- -// CBavpMediaRecognizer::FileHandleExists -// ----------------------------------------------------------------------------- -TBool CBavpMediaRecognizer::FileHandleExists() - { - TInt size(0); - TInt err(0); - - if ( iFileHandle.SubSessionHandle() ) - { - err = iFileHandle.Size( size ); - } - - return ( !err && size ) ? ETrue : EFalse; - } - -// End of File