qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60audioplayersession.cpp
changeset 5 453da2cfceef
parent 4 90517678cc4f
child 11 06b8e2af4411
equal deleted inserted replaced
4:90517678cc4f 5:453da2cfceef
    48 
    48 
    49 S60AudioPlayerSession::S60AudioPlayerSession(QObject *parent)
    49 S60AudioPlayerSession::S60AudioPlayerSession(QObject *parent)
    50     : S60MediaPlayerSession(parent)
    50     : S60MediaPlayerSession(parent)
    51     , m_player(0)
    51     , m_player(0)
    52     , m_audioOutput(0)
    52     , m_audioOutput(0)
       
    53     , m_audioEndpoint("Default")
    53 {
    54 {
    54     QT_TRAP_THROWING(m_player = CAudioPlayer::NewL(*this, 0, EMdaPriorityPreferenceNone));
    55     QT_TRAP_THROWING(m_player = CAudioPlayer::NewL(*this, 0, EMdaPriorityPreferenceNone));
    55     //QT_TRAP_THROWING(m_audioOutput = CAudioOutput::NewL(*m_player));
       
    56     //QT_TRAP_THROWING(m_audioOutput->RegisterObserverL(*this));
       
    57 
       
    58     m_player->RegisterForAudioLoadingNotification(*this);
    56     m_player->RegisterForAudioLoadingNotification(*this);
    59 }
    57 }
    60 
    58 
    61 S60AudioPlayerSession::~S60AudioPlayerSession()
    59 S60AudioPlayerSession::~S60AudioPlayerSession()
    62 {
    60 {
    63 #ifndef HAS_NO_AUDIOROUTING
    61 #if !defined(HAS_NO_AUDIOROUTING)
    64     if (m_audioOutput)
    62     if (m_audioOutput)
    65         m_audioOutput->UnregisterObserver(*this);
    63         m_audioOutput->UnregisterObserver(*this);
    66     delete m_audioOutput;
    64     delete m_audioOutput;
    67 #endif
    65 #endif
    68     m_player->Close();
    66     m_player->Close();
    69     delete m_player;
    67     delete m_player;
    70 }
    68 }
    71 
    69 
    72 void S60AudioPlayerSession::doLoadL(const TDesC &path)
    70 void S60AudioPlayerSession::doLoadL(const TDesC &path)
    73 {
    71 {
       
    72     // m_audioOutput needs to be reinitialized after MapcInitComplete
       
    73     if (m_audioOutput)
       
    74         m_audioOutput->UnregisterObserver(*this);
       
    75     delete m_audioOutput;
       
    76     m_audioOutput = NULL;
       
    77 
    74     m_player->OpenFileL(path);
    78     m_player->OpenFileL(path);
    75 }
    79 }
    76 
    80 
    77 qint64 S60AudioPlayerSession::doGetDurationL() const
    81 qint64 S60AudioPlayerSession::doGetDurationL() const
    78 {
    82 {
   167 void S60AudioPlayerSession::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration)
   171 void S60AudioPlayerSession::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration)
   168 #endif
   172 #endif
   169 {
   173 {
   170     Q_UNUSED(aDuration);
   174     Q_UNUSED(aDuration);
   171     setError(aError);
   175     setError(aError);
       
   176     TRAPD(err, 
       
   177         m_audioOutput = CAudioOutput::NewL(*m_player);
       
   178         m_audioOutput->RegisterObserverL(*this);
       
   179     );
       
   180     setActiveEndpoint(m_audioEndpoint);
       
   181     setError(err);
   172     loaded();
   182     loaded();
   173 }
   183 }
   174 
   184 
   175 #ifdef S60_DRM_SUPPORTED
   185 #ifdef S60_DRM_SUPPORTED
   176 void S60AudioPlayerSession::MdapcPlayComplete(TInt aError)
   186 void S60AudioPlayerSession::MdapcPlayComplete(TInt aError)
   180 {
   190 {
   181     setError(aError);
   191     setError(aError);
   182     endOfMedia();
   192     endOfMedia();
   183 }
   193 }
   184 
   194 
       
   195 void S60AudioPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
       
   196 {
       
   197     m_audioEndpoint = audioEndpoint;
       
   198 }
       
   199 
   185 QString S60AudioPlayerSession::activeEndpoint() const
   200 QString S60AudioPlayerSession::activeEndpoint() const
   186 {
   201 {
   187 #ifndef HAS_NO_AUDIOROUTING
   202     QString outputName = QString("Default");
   188     QString outputName;
   203 #if !defined(HAS_NO_AUDIOROUTING)
   189     if (m_audioOutput) {
   204     if (m_audioOutput) {
   190         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
   205         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
   191         outputName = qStringFromTAudioOutputPreference(output);
   206         outputName = qStringFromTAudioOutputPreference(output);
   192     }
   207     }
       
   208 #endif
   193     return outputName;
   209     return outputName;
   194 #endif
       
   195     return QString("Default");
       
   196 }
   210 }
   197 
   211 
   198 QString S60AudioPlayerSession::defaultEndpoint() const
   212 QString S60AudioPlayerSession::defaultEndpoint() const
   199 {
   213 {
   200 #ifndef HAS_NO_AUDIOROUTING
   214     QString outputName = QString("Default");
   201     QString outputName;
   215 #if !defined(HAS_NO_AUDIOROUTING)
   202     if (m_audioOutput) {
   216     if (m_audioOutput) {
   203         CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
   217         CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
   204         outputName = qStringFromTAudioOutputPreference(output);
   218         outputName = qStringFromTAudioOutputPreference(output);
   205     }
   219     }
       
   220 #endif
   206     return outputName;
   221     return outputName;
   207 #endif
       
   208     return QString("Default");
       
   209 }
   222 }
   210 
   223 
   211 void S60AudioPlayerSession::setActiveEndpoint(const QString& name)
   224 void S60AudioPlayerSession::setActiveEndpoint(const QString& name)
   212 {
   225 {
   213     CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
   226     CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
   220         output = CAudioOutput::ENoOutput;
   233         output = CAudioOutput::ENoOutput;
   221     else if (name == QString("Earphone"))
   234     else if (name == QString("Earphone"))
   222         output = CAudioOutput::EPrivate;
   235         output = CAudioOutput::EPrivate;
   223     else if (name == QString("Speaker"))
   236     else if (name == QString("Speaker"))
   224         output = CAudioOutput::EPublic;
   237         output = CAudioOutput::EPublic;
   225 #ifndef HAS_NO_AUDIOROUTING
   238 #if !defined(HAS_NO_AUDIOROUTING)
   226     if (m_audioOutput) {
   239     if (m_audioOutput) {
   227         TRAPD(err, m_audioOutput->SetAudioOutputL(output));
   240         TRAPD(err, m_audioOutput->SetAudioOutputL(output));
   228         setError(err);
   241         setError(err);
   229     }
   242 
   230 #endif
   243         if (m_audioEndpoint != name) {
   231 
   244             m_audioEndpoint = name;
       
   245             emit activeEndpointChanged(name);
       
   246         }
       
   247     }
       
   248 #endif
   232 }
   249 }
   233 
   250 
   234 void S60AudioPlayerSession::DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
   251 void S60AudioPlayerSession::DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
   235                                         CAudioOutput::TAudioOutputPreference aNewDefault)
   252                                         CAudioOutput::TAudioOutputPreference aNewDefault)
   236 {
   253 {
   237 #ifndef HAS_NO_AUDIOROUTING
   254     // Emit already implemented in setActiveEndpoint function
   238     if (m_audioOutput) {
       
   239         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
       
   240         if (output == CAudioOutput::ENoPreference) {
       
   241             QString name;
       
   242             if (output == CAudioOutput::EAll)
       
   243                 name = QString("All");
       
   244             else if (output == CAudioOutput::ENoOutput)
       
   245                 name = QString("None");
       
   246             else if (output == CAudioOutput::EPrivate)
       
   247                 name = QString("Earphone");
       
   248             else if (output == CAudioOutput::EPublic)
       
   249                 name = QString("Speaker");
       
   250             if (!name.isEmpty())
       
   251                 emit activeEndpointChanged(name);
       
   252         }
       
   253     }
       
   254 #else
       
   255     Q_UNUSED(aAudioOutput)
   255     Q_UNUSED(aAudioOutput)
   256     Q_UNUSED(aNewDefault)
   256     Q_UNUSED(aNewDefault)
   257 #endif
       
   258 }
   257 }
   259 
   258 
   260 QString S60AudioPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
   259 QString S60AudioPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
   261 {
   260 {
   262     if (output == CAudioOutput::ENoPreference)
   261     if (output == CAudioOutput::ENoPreference)
   263         return QString("Default");
   262         return QString("Default");
   264     else if (output == CAudioOutput::EAll)
   263     else if (output == CAudioOutput::EAll)
   265         return QString("All");
   264         return QString("All");
   266     else if (output == CAudioOutput::ENoOutput)
   265     else if (output == CAudioOutput::ENoOutput)
   267             return QString("None");
   266         return QString("None");
   268     else if (output == CAudioOutput::EPrivate)
   267     else if (output == CAudioOutput::EPrivate)
   269             return QString("Earphone");
   268         return QString("Earphone");
   270     else if (output == CAudioOutput::EPublic)
   269     else if (output == CAudioOutput::EPublic)
   271             return QString("Speaker");
   270         return QString("Speaker");
   272     return QString();
   271     return QString("Default");
   273 }
   272 }