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