From patchwork Sun Aug 22 11:20:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 29719 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp1197519iov; Sun, 22 Aug 2021 04:21:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyzxeX/j7+mVj6y9zMbH0MUm9DcKnSmAgGItC+uxL5ercmC2eq0Ofllzr+LN03mNbcHbp1M X-Received: by 2002:a17:906:fa92:: with SMTP id lt18mr30768903ejb.359.1629631282253; Sun, 22 Aug 2021 04:21:22 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e9si2550174edy.604.2021.08.22.04.21.21; Sun, 22 Aug 2021 04:21:22 -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=@outlook.com header.s=selector1 header.b=LNckcqrB; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5465B6801E6; Sun, 22 Aug 2021 14:21:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-VE1-obe.outbound.protection.outlook.com (unknown [40.92.72.60]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B610C68030F for ; Sun, 22 Aug 2021 14:21:10 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RD3JlcFiS4bu4q+0q+8cDYHdgiDTU+FDetdntrpuHTlimK8X1+ES50DSckMkCPqj7q23sBImxqQX8eZo5N5VCCwGay+Wqa5ouBxZAxBAn4EdZaRNZhx1LBDbTxc+erpGnquuFBytcqLnfMwlygQ/uWAEhylJbWtkVxzm4jH5S+ZUvwlRYn9pTmuq3zb38u5eatVbFoCFJj4EA8N6wp+HFuOtADYJ2n1KPLOnAVXztZGjY5xexUeZSV3SonYED5Z8D9qVoeZmsAA7RrnSS329ND39/klX72P4qJG9lIMx3Gji94cfUXIh/rTF6Px2YDJbjxDVAMVe6le4d/sLjy/20Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZJl7umVOphF4/35vCzZgl5cd7CCOeohQ8YqvSb4Ytzg=; b=Ug48VNeotgqPvWSkc3nbsCtrSPiaGHtLlwoXRr5W20haiYJH/lLD/oBjZlxcFP3vBrhehvG+62nySe2Nf5wWboTHznOL6St5a7n5q7FbKy/+lHBvqb/B0H5G3L/0MLiCS9yEQv4ZuDF63/HWcVXg+ZUy4BJ0LlckNU3BAos3iXEko89EzWV1N2KYkisENEJAn1CpEAuXu0X6j8KNNX2bOcAcH13NXBLPMEuQHuhQW0UfSPt7Mftkxck0waCZadRJbiIZLgJr/oaZLCFLvb87gIEiglcxDt0ox7oTFMbZ53BCbLX6RqG8YBSQcOLhFdsZgFwbLADVAbI8VauxDTJbUA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZJl7umVOphF4/35vCzZgl5cd7CCOeohQ8YqvSb4Ytzg=; b=LNckcqrB+/e+04nAot6KfuiAQogiT6Lw0hF98ihlY1rL6aHpQ9PIpuUrUgn8hO4uxYu5MKJ7yRwuYb51QWrD7hS0JxfqjaG0yth0c3DVvVUUQNG1M1HF3+wpVqiEpANVq3q9of2Rry/qvqxd8QSmy2WdrabYMNn7VjZMw64fAAJ7070tRTQ9oXVKwSPv8qsT/vaQSHs4uHkHwzb7arTYOngfffi9kSFVA7TH8N2wAnYMWApTADg8ex/GroL5fBoe6B0caKUFnDbxCg6mjmNM3cyqz305aXRZZ5KivCEWCzQFzvclTh5rG8c6JOyzIoVyJC9Y+d87wLQcxfMz4RmPRQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM7PR03MB6548.eurprd03.prod.outlook.com (2603:10a6:20b:1c2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19; Sun, 22 Aug 2021 11:21:08 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::5574:1fd:cce2:d590]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::5574:1fd:cce2:d590%5]) with mapi id 15.20.4436.023; Sun, 22 Aug 2021 11:21:08 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 22 Aug 2021 13:20:57 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 X-TMN: [4MZKwDhhLvWirAeRn5XwfZv75Y3eLynl] X-ClientProxiedBy: AM4PR0302CA0010.eurprd03.prod.outlook.com (2603:10a6:205:2::23) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20210822112101.1434378-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.142.38) by AM4PR0302CA0010.eurprd03.prod.outlook.com (2603:10a6:205:2::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Sun, 22 Aug 2021 11:21:08 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aa2404ed-827c-451b-fc51-08d9655ef03f X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTwpFlTyQGqvcPFYyI24dYLlRYR+TqpxpHKZzYP2wMFfOSRL+VHTuMAyr7+tF/6po1raASxCCNKlEx3kxRB0s8UK3rLFMAc8GS8pGr2q65WYge/lB7rb6B3srHE6KHb7VkepKILVSFEGHwyFvEc/wJBLCNQn64vZ5jiiQNqh4RVcY5cjRkdDO0Y388P4NLc8AtiJPQuz15eU+YnrwsFh3BOryX3GAVumQV/TB0aefS9VEp98+pOBZL/862mfYip2EhXMr4lZNdFvlyD+EBQ8+KHHuk3wiyqxPfpYd4DnqhTy565XpF+e2SLJ955ptKOigX5oB2M/193Y288K2GREjd8shRN1gPkhnvpEHi1JlmiL5OHD+IyhF1Q/7PRpJdJS0KpiYrzc49EPeNB153UdLCv2vCUG23jU2682zp9GSsuIveYqjSVpYjccR063zRHWQCZIeqoRu9/wg4pGBBdRRxz973eEPEK9FiTniPVfjTGRahZa3v+In2Q/SF9HTOQRe6Syt/aZtnFwKEsH0xn+FCql+Wz0h4CUGscw1uLviTY3T2dfxU8OPvpt3Hfli6UZ/bD3oqgN/qFL0XNWwZFbUvveFNqmzUuG4qOkcgNf3FAFkTms2rdVcZFiPV+LSEMnJMb54i0rq96JaptBnP1P0Iq2heWdfuuo2kspu6vSNkbDuPUij9t1xSIfAEiYPwerwbffe2q0t79vchGKPayI6ROYQ3vXdelXyL19Yz0I3eOidUVXYBAJoP/C8kdfpIx5Lc= X-MS-TrafficTypeDiagnostic: AM7PR03MB6548: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ze3MRd3GGIhPzzZTgIfWHrb4wgmfINe1PHzHL/FNlZBii4uAAQSIwhY4SG/mcmMbb6xWjCyykJehyjGloWovCb+nzvmQlB9VAXZaQIvQBt8YZdXqiJthm6i/lc2hsVTAdJRRmgHoee9DZbgmyIzBzMDLn89TpAzUSLT/m/pttznqOUzvMjxs3C1ZL8AxMUqqBX6jBVbarkF4BhU/hQIyDO1q6W2hXi1T98DVfs8AKYvkkDYtvoBr+mB8+wYVomzEsMD8+rCZ6ZnF/1crZkwewH7Q9LKZahuIwrxcOWNUhT6l3wBxxnL83TMX5wyJ6GC0NQe6oYMhP92NSTVswr40gnQ1nS5AzSsv4WSjhxsbd6OTatFWkM7KPqOcZT+ebMjJXpTnhjEXTo+VUO7CP0jQPKR/GFSpb1A7Olt2MBFtHFmpViZW2i23Et9c+5Q2HWkP X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: L0LSH8nxpd4ZDERZYQduyraq9XYYziSDBBJDbjR8r6XmAvo6egwv8+88F9h2BwZ4HXnGjv24COO1bVgz9bj+n3bcdGb6pWnoMxDsTHAOnm1rFnxIHiRQdOXkDEjW5MfWo2L9D1+SXN7rhytVQK9sxw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa2404ed-827c-451b-fc51-08d9655ef03f X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2021 11:21:08.5167 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR03MB6548 Subject: [FFmpeg-devel] [PATCH 1/5] avformat/av1dec: Set position of AVPackets given to BSF 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 61XocbheXtB8 Signed-off-by: Andreas Rheinhardt --- libavformat/av1dec.c | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/libavformat/av1dec.c b/libavformat/av1dec.c index f6c575069e..e021615c1f 100644 --- a/libavformat/av1dec.c +++ b/libavformat/av1dec.c @@ -22,7 +22,6 @@ #include "config.h" #include "libavutil/common.h" -#include "libavutil/fifo.h" #include "libavutil/opt.h" #include "libavcodec/av1_parse.h" #include "libavcodec/bsf.h" @@ -299,7 +298,6 @@ typedef struct ObuContext { const AVClass *class; AVBSFContext *bsf; AVRational framerate; - AVFifoBuffer *fifo; } ObuContext; //For low overhead obu, we can't foresee the obu size before we parsed the header. @@ -372,9 +370,6 @@ static int obu_probe(const AVProbeData *p) static int obu_read_header(AVFormatContext *s) { ObuContext *c = s->priv_data; - c->fifo = av_fifo_alloc(MAX_OBU_HEADER_SIZE); - if (!c->fifo) - return AVERROR(ENOMEM); return read_header(s, &c->framerate, &c->bsf, c); } @@ -383,37 +378,26 @@ static int obu_get_packet(AVFormatContext *s, AVPacket *pkt) ObuContext *c = s->priv_data; uint8_t header[MAX_OBU_HEADER_SIZE + AV_INPUT_BUFFER_PADDING_SIZE]; int64_t obu_size; - int size = av_fifo_space(c->fifo); + int size; int ret, len, type; - av_fifo_generic_write(c->fifo, s->pb, size, - (int (*)(void*, void*, int))avio_read); - size = av_fifo_size(c->fifo); - if (!size) - return 0; - - av_fifo_generic_peek(c->fifo, header, size, NULL); + if ((ret = ffio_ensure_seekback(s->pb, MAX_OBU_HEADER_SIZE)) < 0) + return ret; + size = avio_read(s->pb, header, MAX_OBU_HEADER_SIZE); + if (size < 0) + return size; len = read_obu_with_size(header, size, &obu_size, &type); if (len < 0) { av_log(c, AV_LOG_ERROR, "Failed to read obu\n"); return len; } + avio_seek(s->pb, -size, SEEK_CUR); - ret = av_new_packet(pkt, len); - if (ret < 0) { - av_log(c, AV_LOG_ERROR, "Failed to allocate packet for obu\n"); - return ret; - } - size = FFMIN(size, len); - av_fifo_generic_read(c->fifo, pkt->data, size, NULL); - len -= size; - if (len > 0) { - ret = avio_read(s->pb, pkt->data + size, len); - if (ret != len) { - av_log(c, AV_LOG_ERROR, "Failed to read %d frome file\n", len); - return ret < 0 ? ret : AVERROR_INVALIDDATA; - } + ret = av_get_packet(s->pb, pkt, len); + if (ret != len) { + av_log(c, AV_LOG_ERROR, "Failed to get packet for obu\n"); + return ret < 0 ? ret : AVERROR_INVALIDDATA; } return 0; } @@ -425,7 +409,10 @@ static int obu_read_packet(AVFormatContext *s, AVPacket *pkt) while (1) { ret = obu_get_packet(s, pkt); - if (ret < 0) + /* In case of AVERROR_EOF we need to flush the BSF. Conveniently + * obu_get_packet() returns a blank pkt in this case which + * can be used to signal that the BSF should be flushed. */ + if (ret < 0 && ret != AVERROR_EOF) return ret; ret = av_bsf_send_packet(c->bsf, pkt); if (ret < 0) { @@ -448,7 +435,6 @@ static int obu_read_close(AVFormatContext *s) { ObuContext *c = s->priv_data; - av_fifo_freep(&c->fifo); av_bsf_free(&c->bsf); return 0; }