diff options
| -rw-r--r-- | include/media/AudioTrack.h | 6 | ||||
| -rw-r--r-- | media/libmedia/AudioTrack.cpp | 7 | 
2 files changed, 12 insertions, 1 deletions
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h index b897f2a..e02f1b7 100644 --- a/include/media/AudioTrack.h +++ b/include/media/AudioTrack.h @@ -690,6 +690,12 @@ public:       *                     overall hardware latency to physical output. In WOULD_BLOCK cases,       *                     one might poll again, or use getPosition(), or use 0 position and       *                     current time for the timestamp. +     *         DEAD_OBJECT if AudioFlinger dies or the output device changes and +     *                     the track cannot be automatically restored. +     *                     The application needs to recreate the AudioTrack +     *                     because the audio device changed or AudioFlinger died. +     *                     This typically occurs for direct or offload tracks +     *                     or if mDoNotReconnect is true.       *         INVALID_OPERATION  if called on a FastTrack, wrong state, or some other error.       *       * The timestamp parameter is undefined on return, if status is not NO_ERROR. diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 949bc21..b5d7614 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -2207,7 +2207,12 @@ status_t AudioTrack::getTimestamp(AudioTimestamp& timestamp)      }      if (mCblk->mFlags & CBLK_INVALID) { -        restoreTrack_l("getTimestamp"); +        const status_t status = restoreTrack_l("getTimestamp"); +        if (status != OK) { +            // per getTimestamp() API doc in header, we return DEAD_OBJECT here, +            // recommending that the track be recreated. +            return DEAD_OBJECT; +        }      }      // The presented frame count must always lag behind the consumed frame count.  | 
