From patchwork Fri Mar 23 21:38:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 8129 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp900597jad; Fri, 23 Mar 2018 14:38:49 -0700 (PDT) X-Google-Smtp-Source: AG47ELuP/5wHqdrXwlCSHx15KDHC+pPxDAYABOGyUKSPtKL4dkDW4bvYJ9pX5CUK2MuDqeBixZi4 X-Received: by 10.223.166.102 with SMTP id k93mr25682639wrc.231.1521841129181; Fri, 23 Mar 2018 14:38:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521841129; cv=none; d=google.com; s=arc-20160816; b=pFcOSjrawsFzktiOdfCMZfS0CTnQwyzLGexpwp5lIKusY/nHhhB8zvTo/rce9WV0b5 j/JOc41XrgFGPPH3hXUR4yPfebpi64UTzg1LbgSss6DHigtQFdPpvFAgKAIWKdBzs2Fw SUlIXG3DwW95wXY9wQCm9SRR+XcHzPrI5INXl4GDeR163+hcAOoPNVrRExbC1BkXGk9F grArSsP43THDkpnoQP+lJub7soEMEQd6t4SSfT8fmpQTkQmh/AqsnyxGhfc9Gz7E2gZ9 F1rn+u6rPXFIptdlUStmMiwd4P8GTuI5boYx6piTyWHHBpnD7t9ISl+F8BagAMj16p2O SVRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=3XFpl67FEgD1DgF09fhv4hpykmutNB88vQcVVJbJQL4=; b=Aobb9L5dVs2mol7eFhpel1/uvJTvLKMGosow/Woe+GmE4jXJlOEy9XuPPd1J8arFDI xbHCbNOfYtGJWdYxaSxGQilhhKXk93JQhwwzUu/zxL09bWCNZUVfMbuP3MqitFWoc0R/ tO6/zWkkqZqjevFYj3Po/VtxplK7x5NSEr5DX7+WO0ES7Tu0aJF+X7KA25pdq64McCyf MJlcwHEd80Gg8/S2VbSuGkKhwG/SB8dFSrlu3oxqIjoyLNYw1NlguNEyX3iR/tKdv2LF 4LEJ/JUktRW+qB526IR7jshOvPt5DBvSCQ9sCOnvD67DYjp5y2xH02t4Vfetpl92Sb8Q UylQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=rxXmM+sw; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 7si7170095wrs.387.2018.03.23.14.38.48; Fri, 23 Mar 2018 14:38:49 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=rxXmM+sw; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C7CAB687EF1; Fri, 23 Mar 2018 23:38:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f195.google.com (mail-qk0-f195.google.com [209.85.220.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ADE8A680413 for ; Fri, 23 Mar 2018 23:38:23 +0200 (EET) Received: by mail-qk0-f195.google.com with SMTP id b198so14459049qkg.9 for ; Fri, 23 Mar 2018 14:38:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=fxGBbD4qCRKsQgx1EhZDv6zSi2g/MQHUszHsmKp0Y2E=; b=rxXmM+swmerFMI5M0B0oD1b5PHLsdHzt3aIK0JmSz1b2Faeu+pb2/c8xBpSFKTTlrC 37Q56VB6RftkmpvtBCAMOKpqU5/Q4RtVEmJw/IYuqbjeXtDPA6ETwH/FNZoyOZsHo6m2 tgmm+Zk8mrrSwgctXQ0hhqV6Xrj59JOysn2yqhFHwNvXurJVJer/GK1XbcAkkt5tbQC/ //+qXXQUzEaBYtLzd112xuqirWnSGDarZiAYYPIWvQ6rZwC7a3vI/XivEaorB7Ef7WHU p+CocCvd7rkdBc3Wkiy9V0TG9ZxGwbabMth2kUfRVh73R1J23b3E8BMY9KMpvC+GQMZU /PnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=fxGBbD4qCRKsQgx1EhZDv6zSi2g/MQHUszHsmKp0Y2E=; b=taF3g6sDzIUgVfW3P0gqOL6YDZyKGNzAAqAswFGUtQ6tYEJpYWCdr+eFe92o52NihU /cyUKx2LeLqH/AJWC13K/B6BtfiLUCLcaQ3zKuVH/vmR2DhU/VPkRS7Wpe+BqwQzfUl+ BMWJmVbwiGjYLPIK2KK8zYbCMVYhSPfFY5GdrabSrxKNg7jMrmUBTxg24a6H42uHBWu5 soD/sJzoaHFV5BZRxaNgfln9FshWMNkt02MTUIM0rIPs84vcKO+wd0Q9pk5ZDP10/2fy uR1kdHX6Z0tz7WU+mSPsXhU8pAWqeNSv0nkD8yhoIBmVOmTbyPg1hEahij1RDhjVzn0i XQaw== X-Gm-Message-State: AElRT7GVoOxX98WencYA2EL1WTh0/CYXsKJdSyTf8n7hf1yeeIS0+sL6 uZ/x2xrDuzDO9BxnVGhZwndVQQ== X-Received: by 10.55.17.105 with SMTP id b102mr27011156qkh.136.1521841118275; Fri, 23 Mar 2018 14:38:38 -0700 (PDT) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id w20sm371757qkb.39.2018.03.23.14.38.36 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Mar 2018 14:38:37 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Fri, 23 Mar 2018 18:38:22 -0300 Message-Id: <20180323213822.10060-1-jamrial@gmail.com> X-Mailer: git-send-email 2.16.2 Subject: [FFmpeg-devel] [PATCH] avcodec/bsf: make sure the AVBSFInternal stored packet is reference counted 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Some bitstream filters may buffer said packet in their own contexts for latter use. The documentation for av_bsf_send_packet() doesn't forbid feeding it non-reference counted packets, which depending on the way said packets were internally buffered by the bsf it may result in the data described in them to become invalid or unavailable at any time. This was the case with vp9_superframe after commit e1bc3f4396, which was then promptly fixed in 37f4a093f7 and 7a02b364b6. It is still the case even today with vp9_reorder_raw. With this change the bitstream filters will not have to worry how to store or consume the packets fed to them. Signed-off-by: James Almer --- Regarding vp9_raw_reorder, see "[PATCH] avcodec/vp9_raw_reorder: cache input packets using new references" for a local fix similar to what vp9_superframe got with 37f4a093f7 and 7a02b364b6. A simple reproducer if you're curious is: ffmpeg -i INPUT -c:v copy -bsf:v vp9_raw_reorder -f null - Which segfauls with current git master. "[PATCH 2/2] ffmpeg: pass reference counted packets on codec copy when possible" also works around this in most cases by doing what its subject describes, but only affects the ffmpeg CLI only and not the API itself, of course. libavcodec/bsf.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libavcodec/bsf.c b/libavcodec/bsf.c index 38b423101c..25f7a20ad6 100644 --- a/libavcodec/bsf.c +++ b/libavcodec/bsf.c @@ -188,7 +188,15 @@ int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt) ctx->internal->buffer_pkt->side_data_elems) return AVERROR(EAGAIN); - av_packet_move_ref(ctx->internal->buffer_pkt, pkt); + if (pkt->buf) + av_packet_move_ref(ctx->internal->buffer_pkt, pkt); + else { + int ret = av_packet_ref(ctx->internal->buffer_pkt, pkt); + + if (ret < 0) + return ret; + av_packet_unref(pkt); + } return 0; }