browserplugins/browseraudiovideoplugin/src/BavpMediaRecognizer.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
--- 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 <eikenv.h>
-#include <bautils.h>
-#include <mmf/server/mmfdatasourcesink.hrh>
-#include <mmf/common/mmfcontrollerpluginresolver.h>
-
-#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<KMaxDataTypeLength>
-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<KMaxFileName> 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<KMaxDataTypeLength> 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<TUid> 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<TUid> 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