qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60mediarecognizer.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    44 #include <e32cmn.h>
    44 #include <e32cmn.h>
    45 #include <QtCore/qurl.h>
    45 #include <QtCore/qurl.h>
    46 #include <QtCore/qdir.h>
    46 #include <QtCore/qdir.h>
    47 #include <QtCore/qdebug.h>
    47 #include <QtCore/qdebug.h>
    48 
    48 
       
    49 #include <apgcli.h>
       
    50 
       
    51 static const TInt KMimeTypePrefixLength = 6; // "audio/" or "video/"
       
    52 _LIT(KMimeTypePrefixAudio, "audio/");
       
    53 _LIT(KMimeTypePrefixVideo, "video/");
       
    54 
    49 S60MediaRecognizer::S60MediaRecognizer(QObject *parent) : QObject(parent)
    55 S60MediaRecognizer::S60MediaRecognizer(QObject *parent) : QObject(parent)
    50 {
    56 {
    51 	TRAP_IGNORE(m_recognizer = MobilityMediaRecognizer::NewL());
       
    52 }
    57 }
    53 
    58 
    54 S60MediaRecognizer::~S60MediaRecognizer()
    59 S60MediaRecognizer::~S60MediaRecognizer()
    55 {
    60 {
    56 	delete m_recognizer;
    61     m_file.Close();
    57 	m_recognizer = NULL;
    62     m_fileServer.Close();
       
    63     m_recognizer.Close();
    58 }
    64 }
    59 
    65 
    60 S60MediaRecognizer::MediaType S60MediaRecognizer::IdentifyMediaType(const QUrl &url)
    66 S60MediaRecognizer::MediaType S60MediaRecognizer::mediaType(const QUrl &url)
    61 {    
    67 {
    62 	MobilityMediaType type = MobilityMediaRecognizer::EUnidentified;
    68     bool isStream = (url.scheme() == "file")?false:true;
    63 	QString filePath = QDir::toNativeSeparators(url.toLocalFile());
       
    64 	if (filePath.isNull()) {
       
    65 		filePath = url.toString();		
       
    66 	}
       
    67 	TPtrC16 urlPtr(reinterpret_cast<const TUint16*>(filePath.utf16()));
       
    68 
    69 
    69 	TRAP_IGNORE(type = m_recognizer->IdentifyMediaTypeL(urlPtr, ETrue);)
    70     if (isStream)
    70 	m_recognizer->FreeFilehandle();
    71         return Url;
    71 	
    72     else
    72 	switch (type) {
    73         return identifyMediaType(url.toLocalFile());
    73 	   case MobilityMediaRecognizer::ELocalAudioFile:
    74 }
    74 		   return Audio;
       
    75 	   case MobilityMediaRecognizer::ELocalVideoFile:
       
    76 		   return Video;
       
    77 	   case MobilityMediaRecognizer::EUrl:
       
    78 		   return Url;
       
    79 	   case MobilityMediaRecognizer::ELocalAudioPlaylist:
       
    80 	   // TODO: Must be considered when streams will be implemented
       
    81 	   case MobilityMediaRecognizer::ELocalRamFile:
       
    82 	   case MobilityMediaRecognizer::ELocalSdpFile:
       
    83 	   // case CMPMediaRecognizer::EProgressiveDownload:
       
    84 	   case MobilityMediaRecognizer::EUnidentified:
       
    85 	   default:
       
    86 		   break;
       
    87 	}
       
    88 
    75 
    89 	return NotSupported; 
    76 S60MediaRecognizer::MediaType S60MediaRecognizer::identifyMediaType(const QString& fileName)
       
    77 {
       
    78     S60MediaRecognizer::MediaType result = NotSupported;
       
    79     bool recognizerOpened = false;
       
    80 
       
    81     TInt err = m_recognizer.Connect();
       
    82     if (err == KErrNone) {
       
    83         recognizerOpened = true;
       
    84     }
       
    85 
       
    86     err = m_fileServer.Connect();
       
    87     if (err == KErrNone) {
       
    88         recognizerOpened = true;
       
    89     }
       
    90 
       
    91     // This is needed for sharing file handles for the recognizer
       
    92     err = m_fileServer.ShareProtected();
       
    93     if (err == KErrNone) {
       
    94         recognizerOpened = true;
       
    95     }
       
    96 
       
    97     if (recognizerOpened) {
       
    98         m_file.Close();
       
    99         err = m_file.Open(m_fileServer, QString2TPtrC(QDir::toNativeSeparators(fileName)), EFileRead |
       
   100             EFileShareReadersOnly);
       
   101 
       
   102         if (err == KErrNone) {
       
   103             TDataRecognitionResult recognizerResult;
       
   104             err = m_recognizer.RecognizeData(m_file, recognizerResult);
       
   105             if (err == KErrNone) {
       
   106                 const TPtrC mimeType = recognizerResult.iDataType.Des();
       
   107 
       
   108                 if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixAudio) == 0) {
       
   109                     result = Audio;
       
   110                 } else if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixVideo) == 0) {
       
   111                     result = Video;
       
   112                 }
       
   113             }
       
   114         }
       
   115     }
       
   116     return result;
    90 }
   117 }
       
   118 
       
   119 TPtrC S60MediaRecognizer::QString2TPtrC( const QString& string )
       
   120 {
       
   121     // Returned TPtrC is valid as long as the given parameter is valid and unmodified
       
   122     return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length());
       
   123 }