ffplay: more robust mutex, condition variable handling

SDL_CreateMutex and SDL_CreateCond can fail:
https://wiki.libsdl.org/SDL_CreateMutex.
This patch makes handling more robust in one instance.

Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Ganesh Ajjanagadde 2015-10-03 07:34:49 -05:00 committed by Marton Balint
parent 64508b9af2
commit 8dc6e92c3d
1 changed files with 14 additions and 4 deletions

View File

@ -451,12 +451,21 @@ static int packet_queue_put_nullpacket(PacketQueue *q, int stream_index)
} }
/* packet queue handling */ /* packet queue handling */
static void packet_queue_init(PacketQueue *q) static int packet_queue_init(PacketQueue *q)
{ {
memset(q, 0, sizeof(PacketQueue)); memset(q, 0, sizeof(PacketQueue));
q->mutex = SDL_CreateMutex(); q->mutex = SDL_CreateMutex();
if (!q->mutex) {
av_log(q, AV_LOG_FATAL, "SDL_CreateMutex(): %s\n", SDL_GetError());
return AVERROR(ENOMEM);
}
q->cond = SDL_CreateCond(); q->cond = SDL_CreateCond();
if (!q->cond) {
av_log(q, AV_LOG_FATAL, "SDL_CreateCond(): %s\n", SDL_GetError());
return AVERROR(ENOMEM);
}
q->abort_request = 1; q->abort_request = 1;
return 0;
} }
static void packet_queue_flush(PacketQueue *q) static void packet_queue_flush(PacketQueue *q)
@ -3136,9 +3145,10 @@ static VideoState *stream_open(const char *filename, AVInputFormat *iformat)
if (frame_queue_init(&is->sampq, &is->audioq, SAMPLE_QUEUE_SIZE, 1) < 0) if (frame_queue_init(&is->sampq, &is->audioq, SAMPLE_QUEUE_SIZE, 1) < 0)
goto fail; goto fail;
packet_queue_init(&is->videoq); if (packet_queue_init(&is->videoq) < 0 ||
packet_queue_init(&is->audioq); packet_queue_init(&is->audioq) < 0 ||
packet_queue_init(&is->subtitleq); packet_queue_init(&is->subtitleq) < 0)
goto fail;
is->continue_read_thread = SDL_CreateCond(); is->continue_read_thread = SDL_CreateCond();