[FFmpeg-devel] [PATCH] avformat/utils.c: allows av_read_frame to return after a timeout period.

Michael Niedermayer michael at niedermayer.cc
Fri Nov 29 20:35:48 EET 2019


On Thu, Nov 28, 2019 at 08:58:54PM -0300, ggarra13 at gmail.com wrote:
> From: Gonzalo Garramuño <ggarra13 at gmail.com>
> 
> Moved the check inside if (pktl) as per Michael Niedermayer's suggestion.
> This patch is based on one from bsenftner at earthlink.net.
> ---
>  libavformat/utils.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 8196442dd1..1f5754d7d3 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -1795,6 +1795,11 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt)
>          AVPacketList *pktl = s->internal->packet_buffer;
>  
>          if (pktl) {
> +            if (ff_check_interrupt(&s->interrupt_callback)) {
> +                av_log(s, AV_LOG_DEBUG, "interrupted\n");
> +                return AVERROR_EXIT;
> +            }
> +
>              AVPacket *next_pkt = &pktl->pkt;
>  
>              if (next_pkt->dts != AV_NOPTS_VALUE) {

I would put it at the end of the "if (pktl) {" body
because if a packet gets processed and returned no interrupt check is needed

also, do we have a testcase where this loop hangs ?
if not please provide a testcase

Thanks

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Awnsering whenever a program halts or runs forever is
On a turing machine, in general impossible (turings halting problem).
On any real computer, always possible as a real computer has a finite number
of states N, and will either halt in less than N cycles or never halt.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20191129/7fbb7c99/attachment.sig>


More information about the ffmpeg-devel mailing list