[FFmpeg-cvslog] avformat/async: move more code into locked area in background thread
Zhang Rui
git at videolan.org
Sat Jul 25 02:42:31 CEST 2015
ffmpeg | branch: master | Zhang Rui <bbcallen at gmail.com> | Wed Jul 22 02:47:25 2015 +0800| [c0a4af408ee56e38aed32dc75749014e21261b13] | committer: Michael Niedermayer
avformat/async: move more code into locked area in background thread
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c0a4af408ee56e38aed32dc75749014e21261b13
---
libavformat/async.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/libavformat/async.c b/libavformat/async.c
index c523b3d..0bcc3ae 100644
--- a/libavformat/async.c
+++ b/libavformat/async.c
@@ -95,15 +95,15 @@ static void *async_buffer_task(void *arg)
while (1) {
int fifo_space, to_copy;
+ pthread_mutex_lock(&c->mutex);
if (async_check_interrupt(h)) {
c->io_eof_reached = 1;
c->io_error = AVERROR_EXIT;
+ pthread_mutex_unlock(&c->mutex);
break;
}
if (c->seek_request) {
- pthread_mutex_lock(&c->mutex);
-
ret = ffurl_seek(c->inner, c->seek_pos, c->seek_whence);
if (ret < 0) {
c->io_eof_reached = 1;
@@ -126,15 +126,17 @@ static void *async_buffer_task(void *arg)
fifo_space = av_fifo_space(fifo);
if (c->io_eof_reached || fifo_space <= 0) {
- pthread_mutex_lock(&c->mutex);
pthread_cond_signal(&c->cond_wakeup_main);
pthread_cond_wait(&c->cond_wakeup_background, &c->mutex);
pthread_mutex_unlock(&c->mutex);
continue;
}
+ pthread_mutex_unlock(&c->mutex);
to_copy = FFMIN(4096, fifo_space);
ret = av_fifo_generic_write(fifo, c->inner, to_copy, (void *)ffurl_read);
+
+ pthread_mutex_lock(&c->mutex);
if (ret <= 0) {
c->io_eof_reached = 1;
if (ret < 0) {
@@ -142,7 +144,6 @@ static void *async_buffer_task(void *arg)
}
}
- pthread_mutex_lock(&c->mutex);
pthread_cond_signal(&c->cond_wakeup_main);
pthread_mutex_unlock(&c->mutex);
}
More information about the ffmpeg-cvslog
mailing list