From patchwork Fri Nov 29 23:52:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Gonzalo_Garramu=C3=B1o?= X-Patchwork-Id: 16491 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id F258744A7C5 for ; Sat, 30 Nov 2019 01:52:38 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D252268B472; Sat, 30 Nov 2019 01:52:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f195.google.com (mail-qk1-f195.google.com [209.85.222.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B03CB68AC46 for ; Sat, 30 Nov 2019 01:52:32 +0200 (EET) Received: by mail-qk1-f195.google.com with SMTP id a137so25203759qkc.7 for ; Fri, 29 Nov 2019 15:52:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DWj6L1rzzDaB7tTo3wvOkGB0RmyNfk50SZixjgAFAsg=; b=bMtb//+/TNcIxE4W3o50U7gqxMEmNA5eK8Jek8fozAV7R/lw7GNDkf+n0kOyZ6raD/ GGfYq8U4fYf7pcMQpcQmnl8Ejx0VC3Nva/F+mNbbSkQOj6lhdpx41IFENv+ScD4UnpOm ILO+NpheGUJa75A6JLOXauWfmgaTe6FiiGZAPqXt6p5Pffw+NicoEmXsNtR4CCtFM75R nbYRsI+vk40FYniz6NY6d2KATR4ZSamIJTcw+OfSc4aqC4luLQM9aITYQKlHihjrgAoi FV4NINTod2sB08o3s2Wfz0NyJTHybNerCsK1xQ0jexsXqsCTORIi8vrDq6c210QYyXfw XpIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DWj6L1rzzDaB7tTo3wvOkGB0RmyNfk50SZixjgAFAsg=; b=dk8IZKTjDRBpe2sJkdd/Ii/w7Q0W9IcNq50IfzyEYBYvY/u39YXuus4t1C/9LM5WbN QEbuOQ5I9OporJHP5J5W4bgv2k9+MINy5oTMxlBiWq6HSz3Ig/WrDgu9GlSURFtYXNaO Danh2CCUFm/j2qrplR83GF70AZkoKai1QwAudZSrXzDnbhIYi5cWpoPPlXf94G4atzGb BZdL39BDoiE8y36nduZBUe2WH7N0R8U+DHHFQfzwPR1zPyvverfdM9/G2Z8CnjeIalC+ exUDkCScT3onULl6IYsOmWGouCSw/eg7Uu65r9TdDq/c8taSYLqDtDumkEVrraBN+3Tp B1sw== X-Gm-Message-State: APjAAAVovQy9zk1WBmD6z+2K7/lXZeNLS92/UQEYK1HVd5nbHG+dT0R9 FR4iLqudUCg4RDEL094GhkpW2JjJvsY= X-Google-Smtp-Source: APXvYqyJuOFK6eE+RFooJtdx/IJ01rj/QNmRu4fv0t5eUtBeDbG6IbXlpde68GE8whYDhTfoaXjuEg== X-Received: by 2002:a05:620a:3dd:: with SMTP id r29mr19690786qkm.370.1575071551256; Fri, 29 Nov 2019 15:52:31 -0800 (PST) Received: from localhost.localdomain ([181.167.72.151]) by smtp.gmail.com with ESMTPSA id k31sm2963154qtd.64.2019.11.29.15.52.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Nov 2019 15:52:30 -0800 (PST) From: ggarra13@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Fri, 29 Nov 2019 20:52:15 -0300 Message-Id: <20191129235215.2289-1-ggarra13@gmail.com> X-Mailer: git-send-email 2.17.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/utils.c: allows av_read_frame to return after a timeout period. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: =?UTF-8?q?Gonzalo=20Garramu=C3=B1o?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Gonzalo Garramuño Moved the check inside and at the end of the if (pktl) as per Michael Niedermayer's suggestion. This patch is based on one from bsenftner at earthlink.net. The hanging in av_read_frame can be reproduced with an rtmp stream that is aborted midway and ffplay (for example) playing that stream. --- libavformat/utils.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index 8196442dd1..653918d5a5 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1836,6 +1836,11 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt) &s->internal->packet_buffer_end, pkt); goto return_packet; } + + if (ff_check_interrupt(&s->interrupt_callback)) { + av_log(s, AV_LOG_DEBUG, "interrupted\n"); + return AVERROR_EXIT; + } } ret = read_frame_internal(s, pkt);