From patchwork Sat Jun 26 20:24:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 28723 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp599863ios; Sat, 26 Jun 2021 13:51:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4K9AQrl5U2qJfePxFsRsz10RDNHwHlUDEYlS1hUnS8PnC/U6rG2qpFpKzRZEfA5Hys/wB X-Received: by 2002:a17:906:c211:: with SMTP id d17mr17463960ejz.247.1624740696365; Sat, 26 Jun 2021 13:51:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624740696; cv=none; d=google.com; s=arc-20160816; b=k6/f/lSPYm7HVpYkE/yBz9FdbAGFfasZdS7yoGVI9yZtlMLeBDcYD8HKTUCGvXeuUh cH8+Zsk6cndSn/sDWsixtLajpS6s2r4zmWJdBYC2P+HV1yGErneU5kFeAYFHidtjlbSz NlA6FPjVBJYLHFC8k2pLduOvIOonrhx8md0wZYowTSLV5z8iXU2JQH6oU9HphnnGkX/c +MtwpRrcgzs8s4vNnoySk9dDHqMtUC+8ZOD96Yx7DVTanMcXzuQFWzdjWncqgnQvSCbr 9yYt4QxZmcp+wYFNmAz9WjnvCsmqj5Yr8k5oCFbBw3Sl6xEu9fCvTlyjAgDKqPTtPQst nDdA== 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=LnXkaKQARXFNj7RiZwJuTk1fuZXo+E9an6O0gjO8ISc=; b=JuJ7SJLibiVGLYgzivS6g18QVJ1efGOymR/T9yJbK2TMt0iQ0TuXt/K2rF8+XAB/zy h82lXsbtqrHXNsMNzLSeIiiBA6OjJpPyyGkCNUS46ibHb0O2WOltpFzjpZxs4sZw1TXI i4wLoLj0bLQHEQVby1FoWcA+quKBU9oFvDjbg5Yv4b1Vm7qHxUI4XPL8jeVI23+ze7dX VVTV95Tcy7AvIpinJgrOpis6hQwmn5KM8S1pT8ufPLtoYXW3yW7Pt6xlvK9x8Z5LdzI0 YmJlP28b2YJknBED626mqz0PdKthQTTZrpA4nkihr/IzPjsf3lG5D8YKUQbp712aPgPK SnQA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=lCX8mErY; 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 p3si9253128ejo.95.2021.06.26.13.51.36; Sat, 26 Jun 2021 13:51:36 -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=lCX8mErY; 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 1AAD568A119; Sat, 26 Jun 2021 23:51:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vs1-f45.google.com (mail-vs1-f45.google.com [209.85.217.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CEA6D689DD1 for ; Sat, 26 Jun 2021 23:51:27 +0300 (EEST) Received: by mail-vs1-f45.google.com with SMTP id v12so7563251vsg.10 for ; Sat, 26 Jun 2021 13:51:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=iS6SIVzWIeeF7fivMXA3MkkrcWtoxrKqbmCUINTptjw=; b=lCX8mErY910QZKJco26ra03aL38dkPcjpfI2SD3xn2ycyJiIzbkjelvMrhpNIAKVle Re3f0lB2efvasZWWTH0DASCugcbUGiHD01MU9jrQ6J04ORaEZ1IfNJ0hz9tdxUkRdbqZ Jh4OQImM03aKW3q0upHDm8yaZZQAKG86QL6gErfCNfmevuAQthvxLEAobu/81b/Oj3nR ni0BTZiAf/zmanxpA36IkxzPiu+vuCCc5GHsX6O/p4WpL3V2vwrANRm/Fe/kGVUhoX5N VedKF7YuxiSpTclzJZ83qCLy7LJhZOf/XZLMQ6SSAAlE8QlZbClahDBxCc9/r69LYxwj CdoQ== 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:mime-version :content-transfer-encoding; bh=iS6SIVzWIeeF7fivMXA3MkkrcWtoxrKqbmCUINTptjw=; b=adTZg8wa/pZeBaMyZfSIUsoSF827fuOEzcG7eXQNG2Mj4CgDNniJRHpH1znwfWq/6n ltiZiB677G9Z8I7f5IpIGyo3lDU+f7CFxivoCzH9i0XPnLMz30JqjmPqCv7hgLD8N2F4 WNDr22qdiHljfEM4SHCzpST90YraaHP9uHJxLsIEe6acHJwuf36B5W2cEoNuZzxu/Cr4 pw4JhyrjEQwhMEkY9Ik1GKKlkZNnsMEUVCY8SLGfu5UmgT1xuJuYxcnSYVy6jSINZuJ3 tRF/o8KFtNFS2rtNKZFmrrLUKqMIcwJUy4WA2rkViUSD5kq2GLbKVzOUXM9zsSaVBbOy Hl9Q== X-Gm-Message-State: AOAM533o4o8sbCRG21qxBgNjFF9K4Yv79fmjmDs6vvZryAK+vlNUE7Pj 0yZjz4/WBfSKrRxmtD6AB6EshMNtmUg= X-Received: by 2002:a17:902:f68e:b029:128:b98a:86a5 with SMTP id l14-20020a170902f68eb0290128b98a86a5mr3367850plg.49.1624739083264; Sat, 26 Jun 2021 13:24:43 -0700 (PDT) Received: from localhost.localdomain ([191.83.222.21]) by smtp.gmail.com with ESMTPSA id y34sm9448516pfa.181.2021.06.26.13.24.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 26 Jun 2021 13:24:42 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 26 Jun 2021 17:24:14 -0300 Message-Id: <20210626202415.4227-1-jamrial@gmail.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/libdav1d: use ff_decode_frame_props() to fill frame 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: fzRjD3F5e0GX The main benefit comes from propagating container level metadata like hdr, which is more commonly used than the relevant Metadata OBUs. Signed-off-by: James Almer --- libavcodec/libdav1d.c | 71 ++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index 50e6200f5d..6370ae1fbf 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -120,6 +120,41 @@ static void libdav1d_picture_release(Dav1dPicture *p, void *cookie) av_buffer_unref(&buf); } +static void libdav1d_init_params(AVCodecContext *c, const Dav1dSequenceHeader *seq) +{ + c->profile = seq->profile; + c->level = ((seq->operating_points[0].major_level - 2) << 2) + | seq->operating_points[0].minor_level; + + switch (seq->chr) { + case DAV1D_CHR_VERTICAL: + c->chroma_sample_location = AVCHROMA_LOC_LEFT; + break; + case DAV1D_CHR_COLOCATED: + c->chroma_sample_location = AVCHROMA_LOC_TOPLEFT; + break; + } + c->colorspace = (enum AVColorSpace) seq->mtrx; + c->color_primaries = (enum AVColorPrimaries) seq->pri; + c->color_trc = (enum AVColorTransferCharacteristic) seq->trc; + c->color_range = seq->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; + + if (seq->layout == DAV1D_PIXEL_LAYOUT_I444 && + seq->mtrx == DAV1D_MC_IDENTITY && + seq->pri == DAV1D_COLOR_PRI_BT709 && + seq->trc == DAV1D_TRC_SRGB) + c->pix_fmt = pix_fmt_rgb[seq->hbd]; + else + c->pix_fmt = pix_fmt[seq->layout][seq->hbd]; + + if (seq->num_units_in_tick && seq->time_scale) { + av_reduce(&c->framerate.den, &c->framerate.num, + seq->num_units_in_tick, seq->time_scale, INT_MAX); + if (seq->equal_picture_interval) + c->ticks_per_frame = seq->num_ticks_per_picture; + } +} + static av_cold int libdav1d_init(AVCodecContext *c) { Libdav1dContext *dav1d = c->priv_data; @@ -261,9 +296,11 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) frame->linesize[1] = p->stride[1]; frame->linesize[2] = p->stride[1]; - c->profile = p->seq_hdr->profile; - c->level = ((p->seq_hdr->operating_points[0].major_level - 2) << 2) - | p->seq_hdr->operating_points[0].minor_level; + libdav1d_init_params(c, p->seq_hdr); + res = ff_decode_frame_props(c, frame); + if (res < 0) + goto fail; + frame->width = p->p.w; frame->height = p->p.h; if (c->width != p->p.w || c->height != p->p.h) { @@ -279,39 +316,11 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) INT_MAX); ff_set_sar(c, frame->sample_aspect_ratio); - switch (p->seq_hdr->chr) { - case DAV1D_CHR_VERTICAL: - frame->chroma_location = c->chroma_sample_location = AVCHROMA_LOC_LEFT; - break; - case DAV1D_CHR_COLOCATED: - frame->chroma_location = c->chroma_sample_location = AVCHROMA_LOC_TOPLEFT; - break; - } - frame->colorspace = c->colorspace = (enum AVColorSpace) p->seq_hdr->mtrx; - frame->color_primaries = c->color_primaries = (enum AVColorPrimaries) p->seq_hdr->pri; - frame->color_trc = c->color_trc = (enum AVColorTransferCharacteristic) p->seq_hdr->trc; - frame->color_range = c->color_range = p->seq_hdr->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; - - if (p->p.layout == DAV1D_PIXEL_LAYOUT_I444 && - p->seq_hdr->mtrx == DAV1D_MC_IDENTITY && - p->seq_hdr->pri == DAV1D_COLOR_PRI_BT709 && - p->seq_hdr->trc == DAV1D_TRC_SRGB) - frame->format = c->pix_fmt = pix_fmt_rgb[p->seq_hdr->hbd]; - else - frame->format = c->pix_fmt = pix_fmt[p->p.layout][p->seq_hdr->hbd]; - if (p->m.user_data.data) memcpy(&frame->reordered_opaque, p->m.user_data.data, sizeof(frame->reordered_opaque)); else frame->reordered_opaque = AV_NOPTS_VALUE; - if (p->seq_hdr->num_units_in_tick && p->seq_hdr->time_scale) { - av_reduce(&c->framerate.den, &c->framerate.num, - p->seq_hdr->num_units_in_tick, p->seq_hdr->time_scale, INT_MAX); - if (p->seq_hdr->equal_picture_interval) - c->ticks_per_frame = p->seq_hdr->num_ticks_per_picture; - } - // match timestamps and packet size frame->pts = p->m.timestamp; frame->pkt_dts = p->m.timestamp;