diff options
author | Andreas Huber <andih@google.com> | 2009-11-10 11:51:43 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2009-11-10 12:26:26 -0800 |
commit | da440f137fbae90d4c1709e499198d6cd4effdf6 (patch) | |
tree | 11122072e24eb311e0c0d01c762f9bca720f356e /media | |
parent | bf964e6a0488c25bfe18d2c041aafe42cf493b9e (diff) | |
download | frameworks_base-da440f137fbae90d4c1709e499198d6cd4effdf6.zip frameworks_base-da440f137fbae90d4c1709e499198d6cd4effdf6.tar.gz frameworks_base-da440f137fbae90d4c1709e499198d6cd4effdf6.tar.bz2 |
Fix for random audio output failures, properly dup() the file descriptor in IMediaPlayer::setDataSource to assume ownership as the caller will otherwise close it.
Diffstat (limited to 'media')
-rw-r--r-- | media/libmediaplayerservice/StagefrightPlayer.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp index 9a06d13..dbee451 100644 --- a/media/libmediaplayerservice/StagefrightPlayer.cpp +++ b/media/libmediaplayerservice/StagefrightPlayer.cpp @@ -40,11 +40,13 @@ status_t StagefrightPlayer::setDataSource(const char *url) { return err; } +// Warning: The filedescriptor passed into this method will only be valid until +// the method returns, if you want to keep it, dup it! status_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) { LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length); reset(); - mPlayer = new MediaPlayerImpl(fd, offset, length); + mPlayer = new MediaPlayerImpl(dup(fd), offset, length); status_t err = mPlayer->initCheck(); if (err != OK) { |