[FFmpeg-cvslog] libstagefright: limit the output queue size

Mohamed Naufal git at videolan.org
Fri Oct 7 15:38:33 CEST 2011


ffmpeg | branch: master | Mohamed Naufal <naufal22 at gmail.com> | Fri Oct  7 17:39:09 2011 +0530| [295f13953dc57be8c2ad7e41f6254d0a036582a8] | committer: Mohamed Naufal

libstagefright: limit the output queue size

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=295f13953dc57be8c2ad7e41f6254d0a036582a8
---

 libavcodec/libstagefright.cpp |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/libavcodec/libstagefright.cpp b/libavcodec/libstagefright.cpp
index 7f3b785..1f8bdc4 100644
--- a/libavcodec/libstagefright.cpp
+++ b/libavcodec/libstagefright.cpp
@@ -174,7 +174,15 @@ void* decode_thread(void *arg)
                 decode_done = 1;
             }
         }
-        pthread_mutex_lock(&s->out_mutex);
+        while (true) {
+            pthread_mutex_lock(&s->out_mutex);
+            if (s->out_queue->size() >= 10) {
+                pthread_mutex_unlock(&s->out_mutex);
+                usleep(10000);
+                continue;
+            }
+            break;
+        }
         s->out_queue->push_back(frame);
         pthread_mutex_unlock(&s->out_mutex);
     } while (!decode_done && !s->stop_decode);
@@ -435,6 +443,17 @@ static av_cold int Stagefright_close(AVCodecContext *avctx)
     if (!s->thread_exited) {
         s->stop_decode = 1;
 
+        // Make sure decode_thread() doesn't get stuck
+        pthread_mutex_lock(&s->out_mutex);
+        while (!s->out_queue->empty()) {
+            frame = *s->out_queue->begin();
+            s->out_queue->erase(s->out_queue->begin());
+            if (frame->size)
+                frame->mbuffer->release();
+            av_freep(&frame);
+        }
+        pthread_mutex_unlock(&s->out_mutex);
+
         // Feed a dummy frame prior to signalling EOF.
         // This is required to terminate the decoder(OMX.SEC)
         // when only one frame is read during stream info detection.



More information about the ffmpeg-cvslog mailing list