diff options
author | Lajos Molnar <lajos@google.com> | 2015-06-19 15:23:36 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2015-06-19 16:20:00 -0700 |
commit | 604bb9ea6e9bec763ae231330066ecffa90a2786 (patch) | |
tree | e4ac600f8157bda0aa0b47382b2c275cb84eeffc /media/libstagefright/FrameRenderTracker.cpp | |
parent | 9a92255484adef1ae82f4c77d654ad47997c0439 (diff) | |
download | frameworks_av-604bb9ea6e9bec763ae231330066ecffa90a2786.zip frameworks_av-604bb9ea6e9bec763ae231330066ecffa90a2786.tar.gz frameworks_av-604bb9ea6e9bec763ae231330066ecffa90a2786.tar.bz2 |
stagefright: handle removal of a tracked buffer in ACodec
Bug: 21815057
Change-Id: Idd1c71b4b0b68028020c3e10615936870ffd2dec
Diffstat (limited to 'media/libstagefright/FrameRenderTracker.cpp')
-rw-r--r-- | media/libstagefright/FrameRenderTracker.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/media/libstagefright/FrameRenderTracker.cpp b/media/libstagefright/FrameRenderTracker.cpp index ebd2197..917870f 100644 --- a/media/libstagefright/FrameRenderTracker.cpp +++ b/media/libstagefright/FrameRenderTracker.cpp @@ -149,14 +149,21 @@ std::list<FrameRenderTracker::Info> FrameRenderTracker::checkFencesAndGetRendere return done; } -void FrameRenderTracker::untrackFrame(const FrameRenderTracker::Info *info) { - if (info != NULL) { - for (std::list<Info>::iterator it = mRenderQueue.begin(); - it != mRenderQueue.end(); ++it) { - if (&*it == info) { - mRenderQueue.erase(it); - return; +void FrameRenderTracker::untrackFrame(const FrameRenderTracker::Info *info, ssize_t index) { + if (info == NULL && index == SSIZE_MAX) { + // nothing to do + return; + } + + for (std::list<Info>::iterator it = mRenderQueue.begin(); + it != mRenderQueue.end(); ) { + if (&*it == info) { + mRenderQueue.erase(it++); + } else { + if (it->mIndex > index) { + --(it->mIndex); } + ++it; } } } |