On 14/09/17 23:35, Marton Balint wrote:
> 
> On Thu, 14 Sep 2017, Mark Thompson wrote:
> 
>> On 14/09/17 22:54, Marton Balint wrote:
>>>
>>> On Thu, 14 Sep 2017, Mark Thompson wrote:
>>>
>>>> ---
>>>> There are more around, but this marks all of the obvious ones in avcodec.h.
>>>>
>>>
>>> [...]
>>>
>>>> +av_warn_unused_result
>>>> int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);
>>>
>>>>  */
>>>> +av_warn_unused_result
>>>> int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);
>>>
>>> I am not sure about these, these can only fail with ENOMEM if the user 
>>> always gets all available frames/packets, but even if there is no memory, 
>>> no state will be changed, the ownership of the packet/frame will remain 
>>> with the caller, no null pointer will be returned, so if ignoring these is 
>>> what the user wants, then so be it, no "undefined" behaviour will occur and 
>>> we are not breaking the API contract by continuing like nothing happened.
>>
>> I was primarily thinking of the EAGAIN case, where the input data will just 
>> have been silently discarded if the user ignores the return value. I admit 
>> that isn't quite the same as the failed-allocation ones which result in 
>> undefined behaviour, but I don't think ignoring the return value of any of 
>> the send/receive functions is sane on the part of the user.
>>
>> What do you think?  (I could also split the patch into ENOMEM and other 
>> cases if that helps.)
> 
> If the send/receive API is used in a way that receive is called in a loop 
> until EAGAIN is returned after each send, that ensures that no EAGAIN can 
> occur in send.
> 
> ffplay does exactly that and the only reason it does not ignore the return 
> value of send_packet is to be able to warn the user about API violations, 
> which - in theory - should not happen.
> 
> So I'd rather not tag these functions as warn_unused_result, but if others 
> disagree, I don't mind too much if the patch goes in as is.

Ok, that's fair.  I've removed the annotation from the the send functions - 
these two and also av_bsf_send_packet().

Thanks,

- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to