AVFoundation: Emit error when media fails to load

This also makes sure that if you attempt to load an invalid media file
while another file is playing that the old session is stopped.

Task-number: QTBUG-30411

Change-Id: Ied4dbaffeac50465112c1e94e7c69d1600a6de51
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
Reviewed-by: Dan Winkler <dantwinkler@gmail.com>
This commit is contained in:
Andy Nichols
2013-04-12 14:10:26 +02:00
committed by The Qt Project
parent ae042feed3
commit e728a61eb6
2 changed files with 9 additions and 8 deletions

View File

@@ -103,6 +103,7 @@ public Q_SLOTS:
void processEOS(); void processEOS();
void processLoadStateChange(); void processLoadStateChange();
void processPositionChange(); void processPositionChange();
void processMediaLoadError();
void processCurrentItemChanged(); void processCurrentItemChanged();

View File

@@ -283,7 +283,7 @@ static void *AVFMediaPlayerSessionObserverCurrentItemObservationContext = &AVFMe
-(void) assetFailedToPrepareForPlayback:(NSError *)error -(void) assetFailedToPrepareForPlayback:(NSError *)error
{ {
Q_UNUSED(error) Q_UNUSED(error)
//TODO: Let the session know that the assest failed to prepare for playback QMetaObject::invokeMethod(m_session, "processMediaLoadError", Qt::AutoConnection);
#ifdef QT_DEBUG_AVF #ifdef QT_DEBUG_AVF
qDebug() << Q_FUNC_INFO; qDebug() << Q_FUNC_INFO;
qDebug() << [[error localizedDescription] UTF8String]; qDebug() << [[error localizedDescription] UTF8String];
@@ -799,13 +799,6 @@ void AVFMediaPlayerSession::processLoadStateChange()
[[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate]; [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate];
[[(AVFMediaPlayerSessionObserver*)m_observer player] play]; [[(AVFMediaPlayerSessionObserver*)m_observer player] play];
} }
} else {
Q_EMIT error(QMediaPlayer::FormatError, tr("Failed to load media"));
Q_EMIT mediaStatusChanged(m_mediaStatus = QMediaPlayer::InvalidMedia);
Q_EMIT stateChanged(m_state = QMediaPlayer::StoppedState);
return;
} }
if (newStatus != m_mediaStatus) if (newStatus != m_mediaStatus)
@@ -817,6 +810,13 @@ void AVFMediaPlayerSession::processPositionChange()
Q_EMIT positionChanged(position()); Q_EMIT positionChanged(position());
} }
void AVFMediaPlayerSession::processMediaLoadError()
{
Q_EMIT error(QMediaPlayer::FormatError, tr("Failed to load media"));
Q_EMIT mediaStatusChanged(m_mediaStatus = QMediaPlayer::InvalidMedia);
Q_EMIT stateChanged(m_state = QMediaPlayer::StoppedState);
}
void AVFMediaPlayerSession::processCurrentItemChanged() void AVFMediaPlayerSession::processCurrentItemChanged()
{ {
#ifdef QT_DEBUG_AVF #ifdef QT_DEBUG_AVF