Merge "Handle setDataSource failures properly. #5261671"

This commit is contained in:
Dave Burke
2011-09-06 13:06:20 -07:00
committed by Android (Google) Code Review

View File

@@ -148,10 +148,10 @@ status_t MediaPlayer::setDataSource(
const sp<IMediaPlayerService>& service(getMediaPlayerService()); const sp<IMediaPlayerService>& service(getMediaPlayerService());
if (service != 0) { if (service != 0) {
sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId)); sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId));
err = attachNewPlayer(player); if (NO_ERROR != player->setDataSource(url, headers)) {
if (err == NO_ERROR) { player.clear();
err = mPlayer->setDataSource(url, headers);
} }
err = attachNewPlayer(player);
} }
} }
return err; return err;
@@ -164,10 +164,10 @@ status_t MediaPlayer::setDataSource(int fd, int64_t offset, int64_t length)
const sp<IMediaPlayerService>& service(getMediaPlayerService()); const sp<IMediaPlayerService>& service(getMediaPlayerService());
if (service != 0) { if (service != 0) {
sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId)); sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId));
err = attachNewPlayer(player); if (NO_ERROR != player->setDataSource(fd, offset, length)) {
if (err == NO_ERROR) { player.clear();
err = mPlayer->setDataSource(fd, offset, length);
} }
err = attachNewPlayer(player);
} }
return err; return err;
} }
@@ -179,10 +179,10 @@ status_t MediaPlayer::setDataSource(const sp<IStreamSource> &source)
const sp<IMediaPlayerService>& service(getMediaPlayerService()); const sp<IMediaPlayerService>& service(getMediaPlayerService());
if (service != 0) { if (service != 0) {
sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId)); sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId));
err = attachNewPlayer(player); if (NO_ERROR != player->setDataSource(source)) {
if (err == NO_ERROR) { player.clear();
err = mPlayer->setDataSource(source);
} }
err = attachNewPlayer(player);
} }
return err; return err;
} }