summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/mmf/mediaobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/phonon/mmf/mediaobject.cpp')
-rw-r--r--src/3rdparty/phonon/mmf/mediaobject.cpp80
1 files changed, 50 insertions, 30 deletions
diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp
index 62dc903..5b0ac36 100644
--- a/src/3rdparty/phonon/mmf/mediaobject.cpp
+++ b/src/3rdparty/phonon/mmf/mediaobject.cpp
@@ -29,25 +29,14 @@ using namespace Phonon::MMF;
// Constructor / destructor
//-----------------------------------------------------------------------------
-MMF::MediaObject::MediaObject(QObject *parent) : QObject::QObject(parent)
+MMF::MediaObject::MediaObject(QObject *parent) : QObject::QObject(parent)
+ , m_recognizerOpened(false)
{
TRACE_CONTEXT(MediaObject::MediaObject, EAudioApi);
TRACE_ENTRY_0();
Q_UNUSED(parent);
- TInt err = m_recognizer.Connect();
- err = m_fileServer.Connect();
- // TODO: handle this error
-
- // This must be called in order to be able to share file handles with
- // the recognizer server (see fileMediaType function).
- err = m_fileServer.ShareProtected();
- // TODO: handle this error
-
- m_tickTimer = new QTimer(this);
- connect(m_tickTimer, SIGNAL(timeout()), this, SLOT(tick()));
-
TRACE_EXIT_0();
}
@@ -56,8 +45,6 @@ MMF::MediaObject::~MediaObject()
TRACE_CONTEXT(MediaObject::~MediaObject, EAudioApi);
TRACE_ENTRY_0();
- delete m_tickTimer;
-
m_file.Close();
m_fileServer.Close();
m_recognizer.Close();
@@ -70,6 +57,36 @@ MMF::MediaObject::~MediaObject()
// Recognizer
//-----------------------------------------------------------------------------
+bool MMF::MediaObject::openRecognizer()
+{
+ if(!m_recognizerOpened)
+ {
+ TInt err = m_recognizer.Connect();
+ if(KErrNone != err)
+ {
+ return false;
+ }
+
+ err = m_fileServer.Connect();
+ if(KErrNone != err)
+ {
+ return false;
+ }
+
+ // This must be called in order to be able to share file handles with
+ // the recognizer server (see fileMediaType function).
+ err = m_fileServer.ShareProtected();
+ if(KErrNone != err)
+ {
+ return false;
+ }
+
+ m_recognizerOpened = true;
+ }
+
+ return true;
+}
+
const TInt KMimePrefixLength = 6; // either "audio/" or "video/"
_LIT(KMimePrefixAudio, "audio/");
_LIT(KMimePrefixVideo, "video/");
@@ -96,21 +113,25 @@ MMF::MediaObject::MediaType MMF::MediaObject::fileMediaType
{
MediaType result = MediaTypeUnknown;
- QHBufC fileNameSymbian = Utils::symbianFilename(fileName);
+ if(openRecognizer())
+ {
+ QHBufC fileNameSymbian = Utils::symbianFilename(fileName);
+
+ m_file.Close();
+ TInt err = m_file.Open(m_fileServer, *fileNameSymbian, EFileRead|EFileShareReadersOnly);
- m_file.Close();
- TInt err = m_file.Open(m_fileServer, *fileNameSymbian, EFileRead|EFileShareReadersOnly);
-
- if(KErrNone == err)
- {
- TDataRecognitionResult recognizerResult;
- err = m_recognizer.RecognizeData(m_file, recognizerResult);
if(KErrNone == err)
{
- const TPtrC mimeType = recognizerResult.iDataType.Des();
- result = mimeTypeToMediaType(mimeType);
+ TDataRecognitionResult recognizerResult;
+ err = m_recognizer.RecognizeData(m_file, recognizerResult);
+ if(KErrNone == err)
+ {
+ const TPtrC mimeType = recognizerResult.iDataType.Des();
+ result = mimeTypeToMediaType(mimeType);
+ }
}
}
+
return result;
}
@@ -251,7 +272,7 @@ MediaSource MMF::MediaObject::source() const
void MMF::MediaObject::setSource(const MediaSource &source)
{
- loadPlayer(source);
+ createPlayer(source);
if(!m_player.isNull())
{
//m_player->setSource(source);
@@ -262,11 +283,10 @@ void MMF::MediaObject::setSource(const MediaSource &source)
}
}
-void MMF::MediaObject::loadPlayer(const MediaSource &source)
+void MMF::MediaObject::createPlayer(const MediaSource &source)
{
- TRACE_CONTEXT(AudioPlayer::loadPlayer, EAudioApi);
- //TRACE_ENTRY("state %d source.type %d", m_state, source.type());
- // TODO: log state
+ TRACE_CONTEXT(AudioPlayer::createPlayer, EAudioApi);
+ TRACE_ENTRY("state %d source.type %d", state(), source.type());
TRACE_ENTRY("source.type %d", source.type());
// Destroy old player object