Handle zero-byte input correctly. (for CODEC_CAP_DELAY)

---
 libavcodec/framethread.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/libavcodec/framethread.c b/libavcodec/framethread.c
index 31eb7a9..66b1aa8 100644
--- a/libavcodec/framethread.c
+++ b/libavcodec/framethread.c
@@ -48,7 +48,7 @@ typedef struct PerThreadContext {
 
     int frame_number, decoded_frame_number, decode_progress;
 
-    int predecoded; // unneeded?
+    int predecoded, input_ready; // unneeded?
 
     AVFrame released_buffers[MAX_DELAYED_RELEASED_BUFFERS];
     int nb_released_buffers;
@@ -75,7 +75,7 @@ static void *decode_frame_thread(void *arg)
 
     while (1) {
         pthread_mutex_lock(&p->mutex);
-        while (!p->input_size && !fctx->die) {pthread_cond_wait(&p->input_cond, &p->mutex);}
+        while (!p->input_ready && !fctx->die) {pthread_cond_wait(&p->input_cond, &p->mutex);}
         pthread_mutex_unlock(&p->mutex);
 
         if (fctx->die) break;
@@ -90,6 +90,7 @@ static void *decode_frame_thread(void *arg)
         p->output_res = res;
         p->decoded_frame_number = p->frame_number;
         p->input_size = 0;
+        p->input_ready = 0;
 
         pthread_mutex_lock(&p->progress_mutex);
         pthread_cond_signal(&p->progress_cond);
@@ -120,6 +121,7 @@ static void submit_frame(PerThreadContext * volatile p, const uint8_t *buf, int
     p->input_size = buf_size;
     p->decode_progress = -1;
     p->predecoded = 0;
+    p->input_ready = 1;
 
     for (i = 0; i < p->nb_released_buffers; i++)
         ff_release_buffer(&p->released_buffers[i]);
-- 
1.5.5.1


_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc

Reply via email to