[FFmpeg-devel] [PATCH] ffplay: more robust mutex, condition variable handling

Ganesh Ajjanagadde gajjanagadde at gmail.com
Sat Oct 3 14:35:30 CEST 2015


On Thu, Oct 1, 2015 at 7:16 AM, Ganesh Ajjanagadde
<gajjanagadde at gmail.com> wrote:
> On Sep 30, 2015 7:50 PM, "Marton Balint" <cus at passwd.hu> wrote:
>>
>>
>> On Tue, 29 Sep 2015, Ganesh Ajjanagadde wrote:
>>
>>> 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 at gmail.com>
>>> ---
>>> ffplay.c | 17 +++++++++++++----
>>> 1 file changed, 13 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/ffplay.c b/ffplay.c
>>> index 3c2407f..9466996 100644
>>> --- a/ffplay.c
>>> +++ b/ffplay.c
>>> @@ -451,12 +451,21 @@ static int packet_queue_put_nullpacket(PacketQueue
>>> *q, int stream_index)
>>> }
>>>
>>> /* packet queue handling */
>>> -static void packet_queue_init(PacketQueue *q)
>>> +static int packet_queue_init(PacketQueue *q)
>>> {
>>>     memset(q, 0, sizeof(PacketQueue));
>>>     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();
>>> +    if (!q->cond) {
>>> +        av_log(q, AV_LOG_FATAL, "SDL_CreateCond(): %s\n",
>>> SDL_GetError());
>>> +        return AVERROR(ENOMEM);
>>> +    }
>>>     q->abort_request = 1;
>>> +    return 0;
>>> }
>>>
>>> static void packet_queue_flush(PacketQueue *q)
>>> @@ -3136,9 +3145,9 @@ static VideoState *stream_open(const char
>>> *filename, AVInputFormat *iformat)
>>>     if (frame_queue_init(&is->sampq, &is->audioq, SAMPLE_QUEUE_SIZE, 1) <
>>> 0)
>>>         goto fail;
>>>
>>> -    packet_queue_init(&is->videoq);
>>> -    packet_queue_init(&is->audioq);
>>> -    packet_queue_init(&is->subtitleq);
>>> +    if (packet_queue_init(&is->videoq) || packet_queue_init(&is->audioq)
>>> +        || packet_queue_init(&is->subtitleq))
>>> +        goto fail;
>>
>>
>> Only cosmetics, but maybe you could use ffmpeg-api-like less-than-zero
>> error checking with common indentation:
>>
>> if (packet_queue_init() < 0 ||
>>     packet_queue_init() < 0 ||
>>     packet_queue_init() < 0)
>
> Thanks for the style tip. I am currently away from a machine, will get to it
> in a few days.

Changed style and updated patch.

>
>>
>> Regards,
>> Marton
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list