OSDN Git Service

ffplay: fix a crash caused by aborting the video queue
authorMarton Balint <cus@passwd.hu>
Thu, 25 Aug 2011 20:06:40 +0000 (22:06 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 26 Aug 2011 15:08:46 +0000 (17:08 +0200)
If the video queue is aborted, we have to pop the pending ALLOC event or wait
for the allocation to complete, because the current code assumes that
VideoState->pictq_windex does not change until the allocation is complete.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
ffplay.c

index 8d22b48..27dda94 100644 (file)
--- a/ffplay.c
+++ b/ffplay.c
@@ -1356,6 +1356,12 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts1, int64_
         while (!vp->allocated && !is->videoq.abort_request) {
             SDL_CondWait(is->pictq_cond, is->pictq_mutex);
         }
+        /* if the queue is aborted, we have to pop the pending ALLOC event or wait for the allocation to complete */
+        if (is->videoq.abort_request && SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_EVENTMASK(FF_ALLOC_EVENT)) != 1) {
+            while (!vp->allocated) {
+                SDL_CondWait(is->pictq_cond, is->pictq_mutex);
+            }
+        }
         SDL_UnlockMutex(is->pictq_mutex);
 
         if (is->videoq.abort_request)