From patchwork Sun Dec 4 21:52:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39588 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2818269pzb; Sun, 4 Dec 2022 13:53:16 -0800 (PST) X-Google-Smtp-Source: AA0mqf60Sg2PwwvtwQRcUoKrCN0jm5vi3baaiaRPqLcHAb1/wRdcXnMvP+k8JmGyNUm4q92B9dTP X-Received: by 2002:a17:906:b012:b0:7c0:9060:1580 with SMTP id v18-20020a170906b01200b007c090601580mr21528949ejy.655.1670190796755; Sun, 04 Dec 2022 13:53:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670190796; cv=none; d=google.com; s=arc-20160816; b=vLLvBBQaPgJDgPhdV42FeYMIu3FGoOYc39YT5QeBcWU3ux6/A9xHhbJuiweIefPGkR Qco9Ev+NT71IDhXwRTSEa3SaTpOobhEt8AYrLdVrcLDLDxQVPsO3UR71CDM5zvAS2RpZ yGRp61k5PD7FZ+2+Ql4b4oGCQqCY9oWxIVs8N6/SwY2U3JzlYDikBJHZswMy9kJfDrOn fu8k7McEtKGv3zvlr7p8SMvm7OGDVz85Jn7JhtmWhQ5tszKjgssDxjrR3xeEhls2XvQe DQ5dx8CzEamaKQ3dVHt0ChQ5FCEdvT7lWoPbMwj1+/mqGp+Bk5OBm5K1LFgNWEGm0dTV AYRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=okqS2px6qfFbez7xoVnXOqQxusSGyeaH9IJnGpvnvY4=; b=QUo4GzimX+cj6vy4UeTfqvJRtM9QIjXgH6gbOxq+1InhWzIzxYhwHsDlzQ1qU1+Rj1 bVlbskb3I/E0JM063QWJRKUKhZT6LTexS68zWRrbjYMroRJny5hRqHkpVfSMFBbXcfV6 /VypzIy3LAzzgcVFpWWv02k4A9Qxk3soXIEoyICUyRLK3hNlMR18WSN+IuA4APGOl2be smZ3w390FXo/UxiAUQLHGVVq/qd79qZxF6pZygXyH8avI9QAQNLO8a6bGutCAHf0XCqY Hdai457WmMYY4ICyX4IqAS3asXRYlkOoUdCkS6DFnznS4squQQkgheEQFl7DNGxVxp38 El0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=jelXgzpV; 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 cr13-20020a170906d54d00b0078d4962a32asi10759022ejc.961.2022.12.04.13.53.15; Sun, 04 Dec 2022 13:53:16 -0800 (PST) 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=20210112 header.b=jelXgzpV; 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 21FAD68BBA3; Sun, 4 Dec 2022 23:53:13 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oo1-f50.google.com (mail-oo1-f50.google.com [209.85.161.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9449168B315 for ; Sun, 4 Dec 2022 23:53:06 +0200 (EET) Received: by mail-oo1-f50.google.com with SMTP id j1-20020a4ad181000000b0049e6e8c13b4so1472045oor.1 for ; Sun, 04 Dec 2022 13:53:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=LJqYQ5q13SAEenbSGRJj1vSWvSJ/XbPzS5gaEIIfpb0=; b=jelXgzpVHMUwba5M0KynzbfZEQjwOYzmSETT3YrXyzFD5ApMSKWS9A/DKGXVtlT2ch odzkzR9UNQScNs65Rvr1kak8pYA4Zkg+WOBVfs6N1BoZnzEsY9yjKP/F4VjBXzGW8UnE bWW6LaOpcVbvrQxbWhznkA36GWkWG5MacZsdLkiyXIeq6Vxpi3U+xuoQ4nC7AD/Sx1GE AJB9Oxdd1yRVUIIQPFmkygYEPznBvJqoJG6W8+qyZejBqRhGPmarxjrNCm871mSVt5Uy m/fsnWGODpa5pEmvmdRRG9HPxjQiMyNg86B/Oa5c00CozVaO5ycc4bzCCaxZujouVTrb InBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LJqYQ5q13SAEenbSGRJj1vSWvSJ/XbPzS5gaEIIfpb0=; b=1Tt0deDBttn6EuPAqdGRS49/OXIfrpxKHvp1zaPitHO1cVU5tVk3sn0ig3tUn0qQ4X ONJeTqB3WT98O/L/NADGpuwh9r2y+Ve0hTJs8Pbhyz4ZBRxKrxLpnEg1YvsvluuDaom0 NvEDX20x4LmL8/ni1xViSU+8CsOw32TSELm1Y87sjkdC8LLM4hO0PzgkSrmtCRd6ravx tbckGRA2Z6PR4NkDtgiDgL7WKwY2sHJremGI7kKCrBV3Gk5tMrPbooZa2SmuUbmvAFU1 Sg7X4kzAgWqf5Jjz9P3ljOkep91+co6i3LxvOo1cKBiokwnE6dY84fngzPYp8phEp4D/ M/Tw== X-Gm-Message-State: ANoB5plZ3DydlyLLRGdNlgw0E6n64eAvetAKjqhCI+XTps3/GvAbVGYr /BsGtmLsa+pfZNNlZA4Kuv/yerK4dWI= X-Received: by 2002:a4a:378d:0:b0:4a0:9010:87a8 with SMTP id r135-20020a4a378d000000b004a0901087a8mr5430881oor.88.1670190784507; Sun, 04 Dec 2022 13:53:04 -0800 (PST) Received: from localhost.localdomain ([181.85.72.69]) by smtp.gmail.com with ESMTPSA id s16-20020a056830439000b0066c7733be43sm6823100otv.30.2022.12.04.13.53.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Dec 2022 13:53:04 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 4 Dec 2022 18:52:23 -0300 Message-Id: <20221204215227.4186-1-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avcodec/binkaudio: clear pts when returning more than one frame per input packet X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kWSjnV7FPZVa This will be needed for the following commit, after which ff_get_buffer() will stop setting frame->pts to AV_NOPTS_VALUE. Signed-off-by: James Almer --- libavcodec/binkaudio.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libavcodec/binkaudio.c b/libavcodec/binkaudio.c index 046bf93207..f28ecba760 100644 --- a/libavcodec/binkaudio.c +++ b/libavcodec/binkaudio.c @@ -296,9 +296,10 @@ static int binkaudio_receive_frame(AVCodecContext *avctx, AVFrame *frame) { BinkAudioContext *s = avctx->priv_data; GetBitContext *gb = &s->gb; - int ret; + int new_pkt, ret; again: + new_pkt = !s->pkt->data; if (!s->pkt->data) { ret = ff_decode_get_packet(avctx, s->pkt); if (ret < 0) { @@ -325,6 +326,8 @@ again: frame->nb_samples = s->frame_len; if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; + if (!new_pkt) + frame->pts = AV_NOPTS_VALUE; } if (decode_block(s, (float **)frame->extended_data, From patchwork Sun Dec 4 21:52:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39589 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2818313pzb; Sun, 4 Dec 2022 13:53:24 -0800 (PST) X-Google-Smtp-Source: AA0mqf614iqf1WRQcKtbxBc+YfkHAkRlTZB0auaRe2L47h6SR+4DlyGY4pb4nDERuYaVW0anu3MH X-Received: by 2002:aa7:c98e:0:b0:46c:2cf2:e89f with SMTP id c14-20020aa7c98e000000b0046c2cf2e89fmr10410491edt.267.1670190804035; Sun, 04 Dec 2022 13:53:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670190804; cv=none; d=google.com; s=arc-20160816; b=zx3VxuoEnkXy74TzfvDWm2pz2d6pdf7bsruHUL5k15Hh347k8h/gSwD3DQa6vxdWv1 IOADUPf9IF9/azazwa61qLWTSN3UwgdmFVkUrVEFn7vUfKRDezbMuQpGrppu85I2LIW6 /eBngf7KIgHEgTAI7AvgHpHitkvAYloP0CKoX8U90HOuNSNeETsyMbX52zvg+Q4rIUeF 16HUqhKQpxDunllz3JtTX6lJU0pvDJVVoEmvV6cErZm2uiIdXqfPcu/UcaJwYXPFcZZy yAcqV+bIMytP9wWOqSHOpG2kxRI6QsuMgEH/qcF3pdjjNP/f2fbF8bcWSJAxkjO+aAtp /rXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=PS6GsPordIi38iWpSQqw0TfIcj2lUL7LUSII3jxJK9Q=; b=lwhJP0W02IL2ppInvi8cR8J56KyJmWqOrda3woIsY2oaKdOJHQW1AwvdXQTG6TZieP k4vTXCa/FADvSpH0dIRbMnPpJHwZEF2jHguFnfWDUWRC1RRMrSiDkTYeosEBDmNbDgiE 6aBT1+SWDOqZTlE0t2T+8Y/TKFsSTZ8R3qWE4z4LG99qp4HNh2LTGa7AReBf4ylmZOZS pDgkhcN/6Bs2haAxxziDOYM/GXjTtu8q1I3E90I7pTY10le/H3ExUcDVo1vCk7feF03t q8sVY1lKU49m9yuC9EhO4phVJkB+/PF7GnJEBBKqZhIjk+govBUZ1OzWza2zcwWcGQnX fKyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=mDZrss0p; 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 cw20-20020a056402229400b0046b7d1b9d79si4232352edb.328.2022.12.04.13.53.23; Sun, 04 Dec 2022 13:53:24 -0800 (PST) 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=20210112 header.b=mDZrss0p; 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 2FB2668BBE5; Sun, 4 Dec 2022 23:53:14 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f48.google.com (mail-oa1-f48.google.com [209.85.160.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5525368B315 for ; Sun, 4 Dec 2022 23:53:07 +0200 (EET) Received: by mail-oa1-f48.google.com with SMTP id 586e51a60fabf-1432a5f6468so11421510fac.12 for ; Sun, 04 Dec 2022 13:53:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=0xu9gRIHT3NZVhZccNOKm3yDutuEKHoE6HpB042QLdU=; b=mDZrss0pcqrtio9d5XD3pFdQxoRmC5wJQjab9az7yli6Plt/vKy5h687L26bI4jnuK f/SJJKyUeVBoIQv6a/rr2RIs+G7JjUIxdhS4E7rCnNoPAJ+F29MI/X6Ew6WdkCKqASzj HQnf+9wS/OyLy0o5nTEq7AeLxvAp9XgkLhKmz+uaIhdVWGmYwDJqTH/cqgngbvqTChwT nd/RZy8VzLIpqD6yJpTViWfoZhIL8c0zp3SYahQQ1ZInmjEJ0v8uglzbkOgHOmyyZ79V VygehzlLXftFwB3N7Hua9GLbVIvr9QrrjWUriGyM7MLiO98yygIGwvjHRu8q4MmmIscd y7jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0xu9gRIHT3NZVhZccNOKm3yDutuEKHoE6HpB042QLdU=; b=zt5u+4EqTGytRRLw2o8zSoIdeN2JOF9OYrE9JcIxm7yvW82qIliQTIahopqy8tCkII AYUYimtB8NCBNjrCNxIfdgZjze3jOkw7W3lriLVZjEt44TDqM20EDRhjvDpQebCXJ7yh VJ5UolTtM6w18p+Hw/X8H2ZgsSdl8cVNLk5gObF1IPT6bD+2uR5z84aLkJaeRLcI/yAO E+Rn3pl82RpA/yf6aUxsbAFIycmVgjxjtp/Whyh2YQbQJUNpBY9wCzQDWdH+Qa7EFtTl sQeM/O4C8lBYSuvjXGzb2MPLKWo6C6QhmOFLqA+X0Wx5/VCohyJsRhfuc/HwKGy3gqnV eNsQ== X-Gm-Message-State: ANoB5plSz4Wf6oOHO3NTLoVtCr+MtmTRmRAsZEZsf7eGPiw11DZ1VRGh H58p2cbSTOpjgEa181N2Zoi3Kw+mlTs= X-Received: by 2002:a05:6870:2e06:b0:142:e523:91c1 with SMTP id oi6-20020a0568702e0600b00142e52391c1mr36772555oab.167.1670190785617; Sun, 04 Dec 2022 13:53:05 -0800 (PST) Received: from localhost.localdomain ([181.85.72.69]) by smtp.gmail.com with ESMTPSA id s16-20020a056830439000b0066c7733be43sm6823100otv.30.2022.12.04.13.53.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Dec 2022 13:53:05 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 4 Dec 2022 18:52:24 -0300 Message-Id: <20221204215227.4186-2-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221204215227.4186-1-jamrial@gmail.com> References: <20221204215227.4186-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] Revert "avcodec/decode: use a packet list to store packet properties" X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: V5sbKsv8mtf0 The idea behind last_pkt_props was to store the properties of the last packet fed to the decoder. Any sort of queueing required by decoders that consume several packets before they start outputting frames should be done by the decoders in question. An example of this is in the libdav1d wrapper. This is required to maintain its contents during flush, and for the following commits that will fix last_pkt_props in frame threading scenarios. This revers commit 022a12b306ab2096e6ac9fc9b149828a849d65b2. Signed-off-by: James Almer --- libavcodec/avcodec.c | 10 --------- libavcodec/decode.c | 47 ++++++----------------------------------- libavcodec/internal.h | 1 - tests/ref/fate/flcl1905 | 2 +- 4 files changed, 8 insertions(+), 52 deletions(-) diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index a85d3c2309..efa76d2740 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -386,9 +386,6 @@ void avcodec_flush_buffers(AVCodecContext *avctx) av_frame_unref(avci->recon_frame); } else { av_packet_unref(avci->last_pkt_props); - while (av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1) >= 0) - av_packet_unref(avci->last_pkt_props); - av_packet_unref(avci->in_pkt); avctx->pts_correction_last_pts = @@ -453,13 +450,6 @@ av_cold int avcodec_close(AVCodecContext *avctx) av_freep(&avci->byte_buffer); av_frame_free(&avci->buffer_frame); av_packet_free(&avci->buffer_pkt); - if (avci->pkt_props) { - while (av_fifo_can_read(avci->pkt_props)) { - av_packet_unref(avci->last_pkt_props); - av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1); - } - av_fifo_freep2(&avci->pkt_props); - } av_packet_free(&avci->last_pkt_props); av_packet_free(&avci->in_pkt); diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 6be2d3d6ed..c94d9aa33c 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -132,38 +132,16 @@ fail2: return 0; } -#define IS_EMPTY(pkt) (!(pkt)->data) - -static int copy_packet_props(AVPacket *dst, const AVPacket *src) -{ - int ret = av_packet_copy_props(dst, src); - if (ret < 0) - return ret; - - dst->size = src->size; // HACK: Needed for ff_decode_frame_props(). - dst->data = (void*)1; // HACK: Needed for IS_EMPTY(). - - return 0; -} - static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt) { - AVPacket tmp = { 0 }; int ret = 0; - if (IS_EMPTY(avci->last_pkt_props)) { - if (av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1) < 0) - return copy_packet_props(avci->last_pkt_props, pkt); + av_packet_unref(avci->last_pkt_props); + if (pkt) { + ret = av_packet_copy_props(avci->last_pkt_props, pkt); + if (!ret) + avci->last_pkt_props->size = pkt->size; // HACK: Needed for ff_decode_frame_props(). } - - ret = copy_packet_props(&tmp, pkt); - if (ret < 0) - return ret; - - ret = av_fifo_write(avci->pkt_props, &tmp, 1); - if (ret < 0) - av_packet_unref(&tmp); - return ret; } @@ -483,7 +461,6 @@ FF_ENABLE_DEPRECATION_WARNINGS if (ret >= pkt->size || ret < 0) { av_packet_unref(pkt); - av_packet_unref(avci->last_pkt_props); } else { int consumed = ret; @@ -578,8 +555,6 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) if (codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME) { ret = codec->cb.receive_frame(avctx, frame); - if (ret != AVERROR(EAGAIN)) - av_packet_unref(avci->last_pkt_props); } else ret = decode_simple_receive_frame(avctx, frame); @@ -593,12 +568,6 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) return ok; } - if (!(codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS) && - IS_EMPTY(avci->last_pkt_props)) { - // May fail if the FIFO is empty. - av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1); - } - if (!ret) { frame->best_effort_timestamp = guess_correct_pts(avctx, frame->pts, @@ -1293,7 +1262,7 @@ static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame) int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) { - AVPacket *pkt = avctx->internal->last_pkt_props; + const AVPacket *pkt = avctx->internal->last_pkt_props; static const struct { enum AVPacketSideDataType packet; enum AVFrameSideDataType frame; @@ -1651,9 +1620,7 @@ FF_ENABLE_DEPRECATION_WARNINGS avci->in_pkt = av_packet_alloc(); avci->last_pkt_props = av_packet_alloc(); - avci->pkt_props = av_fifo_alloc2(1, sizeof(*avci->last_pkt_props), - AV_FIFO_FLAG_AUTO_GROW); - if (!avci->in_pkt || !avci->last_pkt_props || !avci->pkt_props) + if (!avci->in_pkt || !avci->last_pkt_props) return AVERROR(ENOMEM); ret = decode_bsfs_init(avctx); diff --git a/libavcodec/internal.h b/libavcodec/internal.h index 76a6ea6bc6..a283c52e01 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -88,7 +88,6 @@ typedef struct AVCodecInternal { * for decoding. */ AVPacket *last_pkt_props; - struct AVFifo *pkt_props; /** * temporary buffer used for encoders to store their bitstream diff --git a/tests/ref/fate/flcl1905 b/tests/ref/fate/flcl1905 index 59cee95459..4500117993 100644 --- a/tests/ref/fate/flcl1905 +++ b/tests/ref/fate/flcl1905 @@ -189,4 +189,4 @@ frame|media_type=audio|stream_index=0|key_frame=1|pts=N/A|pts_time=N/A|pkt_dts=N frame|media_type=audio|stream_index=0|key_frame=1|pts=N/A|pts_time=N/A|pkt_dts=N/A|pkt_dts_time=N/A|best_effort_timestamp=N/A|best_effort_timestamp_time=N/A|pkt_duration=22528|pkt_duration_time=0.510839|duration=22528|duration_time=0.510839|pkt_pos=61436|pkt_size=744|sample_fmt=fltp|nb_samples=2048|channels=2|channel_layout=unknown frame|media_type=audio|stream_index=0|key_frame=1|pts=N/A|pts_time=N/A|pkt_dts=N/A|pkt_dts_time=N/A|best_effort_timestamp=N/A|best_effort_timestamp_time=N/A|pkt_duration=22528|pkt_duration_time=0.510839|duration=22528|duration_time=0.510839|pkt_pos=61436|pkt_size=372|sample_fmt=fltp|nb_samples=2048|channels=2|channel_layout=unknown packet|codec_type=audio|stream_index=0|pts=360448|pts_time=8.173424|dts=360448|dts_time=8.173424|duration=44|duration_time=0.000998|size=8|pos=65528|flags=K_ -frame|media_type=audio|stream_index=0|key_frame=1|pts=N/A|pts_time=N/A|pkt_dts=N/A|pkt_dts_time=N/A|best_effort_timestamp=N/A|best_effort_timestamp_time=N/A|pkt_duration=N/A|pkt_duration_time=N/A|duration=N/A|duration_time=N/A|pkt_pos=N/A|pkt_size=0|sample_fmt=fltp|nb_samples=2048|channels=2|channel_layout=unknown +frame|media_type=audio|stream_index=0|key_frame=1|pts=360448|pts_time=8.173424|pkt_dts=N/A|pkt_dts_time=N/A|best_effort_timestamp=360448|best_effort_timestamp_time=8.173424|pkt_duration=44|pkt_duration_time=0.000998|duration=44|duration_time=0.000998|pkt_pos=65528|pkt_size=8|sample_fmt=fltp|nb_samples=2048|channels=2|channel_layout=unknown From patchwork Sun Dec 4 21:52:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39590 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2818362pzb; Sun, 4 Dec 2022 13:53:32 -0800 (PST) X-Google-Smtp-Source: AA0mqf4/NSQkObXBKA0Nu5XNyjoGydHUqJk1vZssLwff2DvdkpyDmvyNsCRNEZdSKf5QTehcnGLo X-Received: by 2002:a05:6402:691:b0:46b:c11:9f59 with SMTP id f17-20020a056402069100b0046b0c119f59mr31217834edy.407.1670190811853; Sun, 04 Dec 2022 13:53:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670190811; cv=none; d=google.com; s=arc-20160816; b=iLf1P1pz5EgAL1EYNNWVAVEcJdZG2oJjiYB1vFDoQUTBo+SLpM6Np6869mJxaeMrbQ 2LcqrACh+GvusbawftJt5QjX84i8s0O45tLdbbxx7kf++1fo2X7ZzBhUMdYAvhBggkMM tqoxej6mZDHFP3gOygDRVtMON9ZVlnF4rJYbQ/Cn1KRbPUP6jk8qt2n9PKxNaVYzGgI7 ntxLIrqaePLy41/UUkBsToLnDZCTv3rhClMJliPx4X7DtPg7ysYVjMlFWvQXyBzKC4sQ MZn52wSd0op6CLHz7gwao4gKfHkUnD61o8Nw25rt4SXxqKpNbpwJmAVSH51IDWK6JDdD tDnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=o3AeisowXZHwkcqOmKcbxW/KY5V9vRllXCc7vfnzVUo=; b=crUFQqlJW2a7RYEHwzv+7cQJHinqGYHrhdM1BdJfYx7/CtyFfkqndyw7ETnfUwQQK9 G9NwVL/qtkQaR5MiXu6BVkAjkfGL1Cb4g5c0CO3GZXQU7Gvk5WSpwsJBI0y2ggwpKqcB ES8LF1Ulsoql1edIcUmFxuNqDe3eD8KFkZyOT12SrMVlh7MfL2/tPbOIk236CfXQUSgS /tXzFQRGGSt5QizEH0tDOSTY8/iIUBFh4eZfYkqxCsnhSGsocUFaKaJCkif1RhBIFx5k fZDK9a/eWR0/F3bBEVFZAikFF4qXcfCml0W4N7XwIA4YcX1MGf9LY1VrG1YcgjrrPjIk vdEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=VpHYoB2v; 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 l4-20020a50cbc4000000b0046af62544a0si9327502edi.401.2022.12.04.13.53.31; Sun, 04 Dec 2022 13:53:31 -0800 (PST) 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=20210112 header.b=VpHYoB2v; 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 3595868BBEE; Sun, 4 Dec 2022 23:53:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oo1-f43.google.com (mail-oo1-f43.google.com [209.85.161.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6AF0F68B315 for ; Sun, 4 Dec 2022 23:53:08 +0200 (EET) Received: by mail-oo1-f43.google.com with SMTP id t15-20020a4a96cf000000b0049f7e18db0dso1466043ooi.10 for ; Sun, 04 Dec 2022 13:53:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Fpg2eVsxJRCXHsYZkJI1pKysUUSY+Uh9dvV64DE9RQQ=; b=VpHYoB2vk3PZnXaQfXY8fByR5jXT1a7aliH9Nxn5YxNSsUE+mH87XNs7iZfcxa5jmx 3nsFoOWEZH3U5e6U4PH9WJJr+z2Jx25oH67sltdiMlyWYzbmD5fDn8l5aDeaYXwYg+Z8 FCa/YbMiOqTFI8PNunfRCLx8KOhOILYL0i09rCTOYy2nf1GfBhfkGu6LJRITl346oL/I XKWMEbRnlMwvYijvjNVvecKR7HZcRi7WFV7ncREoRBpoOznciFjVpdTn+scTjxHtuT/x wDO6HvymFaLMrVWV2GUcmu4BQNReFkacb0qmzF3BZ6DQkwS2sNNeqnW2fWCzKCNEWMGG vNbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Fpg2eVsxJRCXHsYZkJI1pKysUUSY+Uh9dvV64DE9RQQ=; b=jweEazfvWy/kL4l6s69WtFgp1eTzrnbMyx426WUusT1xABS9aGu790Wx3swKO78fxj HceWqhZXUgXYo72deKrMjUIB82pxgOKctDhQTV8jBeGLYN6rbd6aEZQCTrqboNCJ1KQN w7yrsThRzvNDaFUGoBZQMzqqAPhfIJPfRWXAzer2FAzWAJGTCHa99DoNp2Uzcng3tARz Kn8dHe9vt8QRJA+a93j9LEUtFwXf13AmGNc65FjCUe96bXxWnxm+If8tbiCG+nrUONSg +dUeNv7pIkgE1anQBehXnzVtn6KXsOSHclEsiToz/W7nfHSlszTcU5bjvvoqT0t+qgXr Ii6g== X-Gm-Message-State: ANoB5plteyKrJKWedRFkll1hvZqYnnxyT2UmrFk8zTNYCp8xSlOt8AU/ Sm/JdpYWgvAdzT0oatuA3JIXf2BWdvQ= X-Received: by 2002:a4a:dc9a:0:b0:4a0:5b89:cacd with SMTP id g26-20020a4adc9a000000b004a05b89cacdmr13440381oou.40.1670190786703; Sun, 04 Dec 2022 13:53:06 -0800 (PST) Received: from localhost.localdomain ([181.85.72.69]) by smtp.gmail.com with ESMTPSA id s16-20020a056830439000b0066c7733be43sm6823100otv.30.2022.12.04.13.53.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Dec 2022 13:53:06 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 4 Dec 2022 18:52:25 -0300 Message-Id: <20221204215227.4186-3-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221204215227.4186-1-jamrial@gmail.com> References: <20221204215227.4186-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/decode: don't set last_pkt_props->size X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: r/bziftyKPwd Use the opaque field instead to store this value. No functional change, but removes the hack that made the packet technically invalid, allowing the safe usage of functions like av_packet_ref() on it if required. Signed-off-by: James Almer --- libavcodec/decode.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index c94d9aa33c..b184c3f55b 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -140,7 +140,7 @@ static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt) if (pkt) { ret = av_packet_copy_props(avci->last_pkt_props, pkt); if (!ret) - avci->last_pkt_props->size = pkt->size; // HACK: Needed for ff_decode_frame_props(). + avci->last_pkt_props->opaque = (void *)(intptr_t)pkt->size; // Needed for ff_decode_frame_props(). } return ret; } @@ -469,7 +469,8 @@ FF_ENABLE_DEPRECATION_WARNINGS pkt->pts = AV_NOPTS_VALUE; pkt->dts = AV_NOPTS_VALUE; if (!(codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { - avci->last_pkt_props->size -= consumed; // See extract_packet_props() comment. + // See extract_packet_props() comment. + avci->last_pkt_props->opaque = (void *)((intptr_t)avci->last_pkt_props->opaque - consumed); avci->last_pkt_props->pts = AV_NOPTS_VALUE; avci->last_pkt_props->dts = AV_NOPTS_VALUE; } @@ -1284,7 +1285,7 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) frame->pts = pkt->pts; frame->pkt_pos = pkt->pos; frame->duration = pkt->duration; - frame->pkt_size = pkt->size; + frame->pkt_size = (int)(intptr_t)pkt->opaque; for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) { size_t size; From patchwork Sun Dec 4 21:52:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39591 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2818400pzb; Sun, 4 Dec 2022 13:53:40 -0800 (PST) X-Google-Smtp-Source: AA0mqf7Zi+iU4jxOEOcsnocClYcGB/Jfus7J1rKi7oI3JSJE6QKba7pCRGbvptY8vlsBLz6PbYvc X-Received: by 2002:a05:6402:1107:b0:463:9b53:cbf6 with SMTP id u7-20020a056402110700b004639b53cbf6mr64396952edv.173.1670190819954; Sun, 04 Dec 2022 13:53:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670190819; cv=none; d=google.com; s=arc-20160816; b=pEIIjWKESKMMDd1sKfemXm08pQsOjMR6xTGAIdi6L2fmMQL7FikXmXPoe0ugYPV/yw CBjN2benK33JW/g+3paFzl/v2UaqZq+Gm3qOJ1ELXOJvlBbk0HpX9KS5IAff32Vhb0VD nbHu8L3dJ2SaaQHKq29F1wVtpC+GsjDb1+FyqDZkBGZkziooQW+Xuhm1N4+kfMhKiwRf CZQbvSIwDvZ+s80gSBhuvpayYhayWvebD6+NCnwMME71KWbOsS2WpBZDPqegHc4ftQBk rdYMM34n+VZjDuEcnrkhKl23SkYs4ablD7U5ySUlU5lmLA3I5FqMqy21jo/mGD/EZBMW oWCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=8yLF2bNOY4Q1A1wzbcE8soHUF8JjGDrhudtNSePSInk=; b=rpjG0h4lZz11f/KuHgLB+vdkGuohIWjnDkU7UcSyYVFxymCEqfOr7KWmaFiOvw/JZg maJWhnmlwBtfMfqgF5Lsc2d6K/bC8B4ZCGkv83xUA8Tiz/1wqXkuxRCTPcFKCC4AP6D3 tSSfiitjlKTCwNUS+0LdqvNKJGAOm2XgbWWCt6PnyI0rPsNX22aorfgRsfpPiKC0emNp ahziGkk5Z0Bb2f5KqZPMO3bwY9w8Yq+98du6yn27+mZpnu9NZgUVgiDEbB+gDwr+rnAu s7MBVrwLTtQaNXzcJ2s+aQP7sPBd3iJJR8Da72y0CPDgQ9qy2ZobyoQ0/3QKTs3S3qMe fVBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=q0wvh74O; 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 e18-20020a17090658d200b007c0b44ec243si8942031ejs.781.2022.12.04.13.53.39; Sun, 04 Dec 2022 13:53:39 -0800 (PST) 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=20210112 header.b=q0wvh74O; 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 3310568BBF1; Sun, 4 Dec 2022 23:53:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 55AD668BBE6 for ; Sun, 4 Dec 2022 23:53:09 +0200 (EET) Received: by mail-oi1-f177.google.com with SMTP id n186so11042554oih.7 for ; Sun, 04 Dec 2022 13:53:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=4Vdejytl3fJlr1UFL0Ym6hZ9nkrFyzQIJSpJDIwNQao=; b=q0wvh74OhQUhEw3Q77LruSWqA8DLQcAWjpXU9PBU9wALqrY655iIIRw84Z8WUeD2Zc 4Hfwl45RldkznosvZWB1q9TsL88/PnAo/Got2Is1le2O/rrqLdajsDvQ+ErG4LIbHAXF bdoL/oscOAS4/ULl4pEQ+d92/RETke7tBCuyfX9aoSJYFNqJgG6DM/jw4KWq16P+d/iT T5xXhhq7loFWMN5E2jUuo5Sl52An4qmgkA7AReE0IDUhxNo673xbsD2X+GM7vfVpK7tD tkfl11SSJfBmEZ0kwusdWuDa3Uz+4oeA8YA4/FDwTwFw+GDA2k4jVSeNwxS2AD/PCJbl s7sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4Vdejytl3fJlr1UFL0Ym6hZ9nkrFyzQIJSpJDIwNQao=; b=Al0oliBgGavOr+z7VpYyH9Z+9oqp5Y+liJm5tjzEcRC0a9xkTzY0PPU5HBKrHy9kNG GKflZoZJq2w3WBKzkO8J+w3XWygDw0jhfXzeliFJrwN4QhFZdiceQAaOeaNYQVup1eop gyuakDx1o8Rpw9rpz/zdllZbvpoaYf8NF1X70zaIc+6Ofl9jtx3fHF5nqDuykitJB+g0 Xe0jb8oYIQnp3xVr8YtOWs92pJJFYJZsoPdlEBdJKUN/BtlxsKmdZcVfV2QukGsOX1bO N3H39IL+FAeM0LdTW8fq886JS7ozapaZVboUKHoqtUCH9P97745rx6LzpC60xAKpuGpH dUwg== X-Gm-Message-State: ANoB5pmCFZ2gNt8C65RIFZ4ucFe3C87aG8sCWLe7grZolNnR/Isv5Fb4 T9tfTG1sg5Td8LsfEha4EQBSlRZEsD4= X-Received: by 2002:a05:6808:2028:b0:35b:e648:5280 with SMTP id q40-20020a056808202800b0035be6485280mr7726833oiw.254.1670190787785; Sun, 04 Dec 2022 13:53:07 -0800 (PST) Received: from localhost.localdomain ([181.85.72.69]) by smtp.gmail.com with ESMTPSA id s16-20020a056830439000b0066c7733be43sm6823100otv.30.2022.12.04.13.53.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Dec 2022 13:53:07 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 4 Dec 2022 18:52:26 -0300 Message-Id: <20221204215227.4186-4-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221204215227.4186-1-jamrial@gmail.com> References: <20221204215227.4186-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avcodec/pthread_frame.c: keep the last_pkt_props from worker threads in sync with the user context X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: f/VspvTZDID7 Making it point to the input packet results in different behavior during flush, where its contents will be that of an empty packet instead of containing the props from the last input packet fed to the decoder. After this change, decoding with more than one thread will shield the same results as using a single thread. Signed-off-by: James Almer --- libavcodec/pthread_frame.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c index df82a4125f..3397e0cc66 100644 --- a/libavcodec/pthread_frame.c +++ b/libavcodec/pthread_frame.c @@ -371,6 +371,8 @@ FF_ENABLE_DEPRECATION_WARNINGS */ static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src) { + int err; + dst->flags = src->flags; dst->draw_horiz_band= src->draw_horiz_band; @@ -406,6 +408,12 @@ FF_ENABLE_DEPRECATION_WARNINGS src->slice_count * sizeof(*dst->slice_offset)); } dst->slice_count = src->slice_count; + + av_packet_unref(dst->internal->last_pkt_props); + err = av_packet_copy_props(dst->internal->last_pkt_props, src->internal->last_pkt_props); + if (err < 0) + return err; + return 0; } @@ -775,6 +783,7 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) av_freep(&ctx->slice_offset); av_buffer_unref(&ctx->internal->pool); + av_packet_free(&ctx->internal->last_pkt_props); av_freep(&ctx->internal); av_buffer_unref(&ctx->hw_frames_ctx); } @@ -846,9 +855,9 @@ static av_cold int init_thread(PerThreadContext *p, int *threads_to_free, return err; if (!(p->frame = av_frame_alloc()) || - !(p->avpkt = av_packet_alloc())) + !(p->avpkt = av_packet_alloc()) || + !(copy->internal->last_pkt_props = av_packet_alloc())) return AVERROR(ENOMEM); - copy->internal->last_pkt_props = p->avpkt; if (!first) copy->internal->is_copy = 1; From patchwork Sun Dec 4 21:52:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39592 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2818445pzb; Sun, 4 Dec 2022 13:53:48 -0800 (PST) X-Google-Smtp-Source: AA0mqf6CR06MkDQndeZOeppxqZT+n0l8W//Si/2QdD+s9yikr64bAIUP8N8JdgI0cmfI5QuHGLGr X-Received: by 2002:a17:906:60d0:b0:78d:3f87:1725 with SMTP id f16-20020a17090660d000b0078d3f871725mr16630082ejk.492.1670190828353; Sun, 04 Dec 2022 13:53:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670190828; cv=none; d=google.com; s=arc-20160816; b=Dcnxp72LCjvYMcEwLG3263s/Drq0LtjE2rqd4FfV3gDYquwZ4IPzC+oS5WRBgVPFxY hLpO5FyTqha3p4OgN2efAc/sd6tNauev7pMkjLG//BWCAEyw9nupkJJniZ7lbC59uwz+ Nca2neo3+Crf2vN6Yvh3xX0dvGGN/it4qSykjHMec7MP9g7GkVTDfP/EGeQ045xszGL+ HeA46QgteOo+YXSjSc+xP9Eii7TzahMa/p+82qQwSA6lm0K3q7f9XJ5uhCppPjoh/K2R eYweDxTMjfMN6r5e3LREqpOgTDrzO50EpnoLyvmPwNnJYw6/t1qysyJAsc5gp5OgG3WR 5bsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=3kRXThYPmIdOLF2fStommQboKkwRdUWdmULj8tBGwdM=; b=uFrUl7/yp4KM/Ca9cqS/00lOA4tz6oASpy41nz74YHB1Wes2tIqgHHdiZrY0AmPLU5 tyhLihpYsTIWZLm4JquF556fkfU4hI/V2sdmxeIVtxeicpmbiC7pONMCZSuYLrLgaUSw 0lSlgZSWaCb0oItO/KRMakuQwk4vnqDwMycdC6jYnlXlbmVucwWj/dFz8ycO5gT4oxB3 6lTKbiETBDMODcgDbVwlxr2R/NOskvkG2N5VUb7E7/S4j50bVD6wsCas1w0v5EloiFoL uimzK9BPdhHpzIBQxLc8X1UxeHBX0rCmqRI0KwlSJLtKO5LHZQLWI4ORK7AqJLMNnYxh HCeA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Jw5SXL+U; 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 i14-20020a1709064fce00b007c0889e324esi10816141ejw.366.2022.12.04.13.53.47; Sun, 04 Dec 2022 13:53:48 -0800 (PST) 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=20210112 header.b=Jw5SXL+U; 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 2722F68BC05; Sun, 4 Dec 2022 23:53:17 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f51.google.com (mail-ot1-f51.google.com [209.85.210.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F41AE68BBF1 for ; Sun, 4 Dec 2022 23:53:10 +0200 (EET) Received: by mail-ot1-f51.google.com with SMTP id a7-20020a056830008700b0066c82848060so6219878oto.4 for ; Sun, 04 Dec 2022 13:53:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=DZ0LjEDInEf2SIWEnbbM+ue20c9eQM9Fn/FeWWN1g74=; b=Jw5SXL+UjAzVQqaX4vHN4G5kmOlqVsiiKtouck2xCJ7EYacNickexqArQjRVZcIdiq maR1IMT+tq8TXdzIiA+31qC0501fQsj7kyj3i0lc2qAuX5OvqSRBTrl9LoBM7OE5a+u4 gmzcN8WL+3Epwdg1ex9QL4Nt2633N+bIzEplciL6NOtk0XlcaQnfWyxZQmNFHEPEyGiA asO2sDxI+cx8OaloQ54NRCBbqi4/K+hy9Y0HCKuE67704FYnO9TWMhXHU2wT/du3QBuI sofxdy8onZ57EQzuMxuxm+mJj9gKoLZ1NBoE1bI0gSPxUqtlr+7ob6A/EV4fo5drf4b4 9lhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DZ0LjEDInEf2SIWEnbbM+ue20c9eQM9Fn/FeWWN1g74=; b=qnDMu4tZpmLVs9rSNC3VQW88G4jw//LjZ+gko0Ssp/MfSyWBf2yQJTWorXEwWud7s2 QiPrgNRMN619Hwg5wa5DkiBqZVxo0fN0VS6kzhuECkHQ4sfOHNltqDml66Uac2zNM9zd w7Ew+dUUg2KxPlU1GeTU6cTmhtpglmSbeLxtF6qCANkcSptmF+0nUM5FtHaNy84UXI5l 0Yej96cH6aopumauJKWZZwEw1O5JX/sj0BQVWmfqhQChbpL4IxicOPd+b4KsDbG4KId9 apS6PpyEry7PS1A8MjAywfEe+Pl5Q/3rTWBen1T0gbDs0abz/mQ+i20G34gPIdIYyCAb KrhA== X-Gm-Message-State: ANoB5pk7ciTgfgjeS43uMFVBVKEH90Rm5qe09lTz7eHnzOCq2HbnKghw EouaTHpZhN1P122t0+RPYwI+sFjPYyA= X-Received: by 2002:a05:6830:799:b0:66e:7535:a120 with SMTP id w25-20020a056830079900b0066e7535a120mr8722663ots.249.1670190788857; Sun, 04 Dec 2022 13:53:08 -0800 (PST) Received: from localhost.localdomain ([181.85.72.69]) by smtp.gmail.com with ESMTPSA id s16-20020a056830439000b0066c7733be43sm6823100otv.30.2022.12.04.13.53.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Dec 2022 13:53:08 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 4 Dec 2022 18:52:27 -0300 Message-Id: <20221204215227.4186-5-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221204215227.4186-1-jamrial@gmail.com> References: <20221204215227.4186-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avcodec/mpeg4videodec: duplicate the last decoded frame when the last coded frame was skipped X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ZLHRmHL0031P This ensures the video stream duration is not lost after decoding. Signed-off-by: James Almer --- libavcodec/h263dec.c | 13 +++++++++++++ libavcodec/mpegvideo.h | 1 + 2 files changed, 14 insertions(+) diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index ac7a8521e5..0a2d7487a8 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -430,6 +430,18 @@ int ff_h263_decode_frame(AVCodecContext *avctx, AVFrame *pict, return ret; s->next_picture_ptr = NULL; + *got_frame = 1; + } else if (s->skipped_last_frame && s->current_picture_ptr) { + /* Output the last picture we decoded again if the stream ended with + * an NVOP */ + if ((ret = av_frame_ref(pict, s->current_picture_ptr->f)) < 0) + return ret; + /* Copy props from the last input packet. Otherwise, props from the last + * returned picture would be reused */ + if ((ret = ff_decode_frame_props(avctx, pict)) < 0) + return ret; + s->current_picture_ptr = NULL; + *got_frame = 1; } @@ -500,6 +512,7 @@ retry: s->extradata_parsed = 1; } ret = ff_mpeg4_decode_picture_header(avctx->priv_data, &s->gb, 0, 0); + s->skipped_last_frame = (ret == FRAME_SKIPPED); } else if (CONFIG_H263I_DECODER && s->codec_id == AV_CODEC_ID_H263I) { ret = ff_intel_h263_decode_picture_header(s); } else if (CONFIG_FLV_DECODER && s->h263_flv) { diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 6440b906b1..42275953b9 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -175,6 +175,7 @@ typedef struct MpegEncContext { Picture *last_picture_ptr; ///< pointer to the previous picture. Picture *next_picture_ptr; ///< pointer to the next picture (for bidir pred) Picture *current_picture_ptr; ///< pointer to the current picture + int skipped_last_frame; int last_dc[3]; ///< last DC values for MPEG-1 int16_t *dc_val_base; int16_t *dc_val[3]; ///< used for MPEG-4 DC prediction, all 3 arrays must be continuous