Skip to content

Commit

Permalink
avformat/async: move more code into locked area in background thread
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Niedermayer <[email protected]>
  • Loading branch information
bbcallen authored and michaelni committed Jul 24, 2015
1 parent dee551b commit c0a4af4
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions libavformat/async.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -126,23 +126,24 @@ 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) {
c->io_error = ret;
}
}

pthread_mutex_lock(&c->mutex);
pthread_cond_signal(&c->cond_wakeup_main);
pthread_mutex_unlock(&c->mutex);
}
Expand Down

0 comments on commit c0a4af4

Please sign in to comment.