From patchwork Sat Sep 12 14:39:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andriy Gelman X-Patchwork-Id: 22305 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 B10BA44A8C3 for ; Sat, 12 Sep 2020 18:45:35 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8D02368BB67; Sat, 12 Sep 2020 18:45:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f68.google.com (mail-io1-f68.google.com [209.85.166.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7A9D868BB21 for ; Sat, 12 Sep 2020 18:45:29 +0300 (EEST) Received: by mail-io1-f68.google.com with SMTP id h4so14254098ioe.5 for ; Sat, 12 Sep 2020 08:45:29 -0700 (PDT) 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=UmHyPIWZE8Vs6kRVgV+2wweXKXsROcO00mCdleWP9/Q=; b=Xt6XtoZEGylAaejaCBqbegT59uGUn2oKhtvFhuzTVLh5CjVlyH/SsZnc1Yf/fRXbLy nZbTyweSthXJwgTID1C6oQqGjOHd1Y+DBrlsA4IXgNij8X1EuA4klfsUVT5of25WKLlB hR+pXRx68DPs3QySMINa51R80xj+6URjN9dVRApRQa3ni+3RxxUZ5+vOuaLz0O1ACP5B e6OE64+I82UPcvTWECfQckbjOkf8zR81/QdHjRNKv331aU7jfkzWw6cxSavAflNh7UwS z9hH6rquTiHvTUqKWwL4+M09wkoZs/oRAq7++M7pq8xcu4uuxu/Raq+qfwXVnee4YGJv FTWQ== 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=UmHyPIWZE8Vs6kRVgV+2wweXKXsROcO00mCdleWP9/Q=; b=Up3rJ6dZSx4opvzs12XbmwQhpWessxGP50xl6XJwv4SLT+vskEklr4CbuwPnEkAk0v CmIaphbWyp0ud+MQAJXDdzzHU2DLdGnqZ1JcMw/e0TJDm+htap2reJ+dWo/FW623lAnE FKDnOAoP9Pg0p3IQVUI1U3jBAOh+1uYhqe0B44bh2k7LjfxB8a7ltQSS8pMJli4PV8hT u9qoCZoy248wMuZPfu3lglBqvMQzK1uYzFIAU9lOlo8NAgh9k3+jR39e/vnceeHz7Vrz w5CiOo8JrEmaOjoiGraEvlMfnVO/D8QM5CSa0KbS9BNWXlmlDiHdWQtFqf8AzF+lTeE2 2hYg== X-Gm-Message-State: AOAM532rKHffbpnUTP1snDB48x0pZHKCdXjtk33WEd4Id2paKNvr5frH KLIbe+oz8/9KNOub/f7kKvdp614GVr4= X-Google-Smtp-Source: ABdhPJw9IzWP+XElZkpTRNMeh5IWOMQFGLP3jdpNz5ii6mCsmh/GtjS6kGvMoUKdHRNy7Ybyds/HdQ== X-Received: by 2002:ac8:d01:: with SMTP id q1mr6572449qti.276.1599921592876; Sat, 12 Sep 2020 07:39:52 -0700 (PDT) Received: from localhost.localdomain (c-71-232-27-28.hsd1.ma.comcast.net. [71.232.27.28]) by smtp.gmail.com with ESMTPSA id n144sm7567923qkn.69.2020.09.12.07.39.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Sep 2020 07:39:52 -0700 (PDT) From: Andriy Gelman X-Google-Original-From: Andriy Gelman To: ffmpeg-devel@ffmpeg.org Date: Sat, 12 Sep 2020 10:39:36 -0400 Message-Id: <20200912143936.200522-1-andriy.gelman@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/libaomenc: Extract extradata directly if available 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: Andriy Gelman Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Andriy Gelman Currently a bsf is inserted to extract OBU headers which are propagated as packet side data. The side data is used in matroska to insert out of band extradata. Support to fetch extradata directly from av1 was added in commit f8d6a1653476662a7b00a1564afe37516adeba1a in libaom. So there is no need to insert a bsf if extradata can be fetched. Signed-off-by: Andriy Gelman --- libavcodec/libaomenc.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index 2b0581b15a..27ee630382 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -879,6 +879,18 @@ static av_cold int aom_init(AVCodecContext *avctx, return AVERROR(ENOMEM); if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { + aom_fixed_buf_t *aom_buf; + aom_buf = aom_codec_get_global_headers(&ctx->encoder); + if (aom_buf) { + avctx->extradata = av_mallocz(aom_buf->sz + AV_INPUT_BUFFER_PADDING_SIZE); + memcpy(avctx->extradata, aom_buf->buf, aom_buf->sz); + avctx->extradata_size = aom_buf->sz; + av_free(aom_buf->buf); + av_freep(&aom_buf); + } + } + + if (!avctx->extradata && avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { const AVBitStreamFilter *filter = av_bsf_get_by_name("extract_extradata"); int ret; @@ -976,7 +988,7 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame, #endif } - if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { + if (ctx->bsf) { ret = av_bsf_send_packet(ctx->bsf, pkt); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "extract_extradata filter "