From patchwork Thu Jan 14 13:55:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 24941 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 BD2B744BD11 for ; Thu, 14 Jan 2021 16:04:09 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8FBA4680932; Thu, 14 Jan 2021 16:04:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3C6D7687FD2 for ; Thu, 14 Jan 2021 16:04:03 +0200 (EET) Received: by mail-wr1-f48.google.com with SMTP id y17so5864918wrr.10 for ; Thu, 14 Jan 2021 06:04:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=imEsWHRVRzXzYeBeZ3uAWEnrXScDulZzxrS09EfUGNY=; b=F1wzVNkLWa+6xLAmgiCoAnaMl/cnszgXSgGPAUpl1MyWNP6PVMRA7tfWLD/RjmU0JW w2gB4+2KPh7HwcBT+it9BpxQyK+CP1qwtDu2bXGO6h9wgDTdVQauIrhXx4R6zFUkJ+RM lAhx0idnWquT5Dmxy260nMx1lf/v93BGbKzENh7Yczgx6hvByH0aDk1+3Xf99Q+kHClz Hxa6XVBBS+kPWzLW44sjHWbStVGA0c2hewDBCURhFvMhfWA58iuiQf+RjP+MTZpnDNPG GAIM8aLSuDocIcxmlVX6ZgoamfbwNdLPcydRJ2nthzM2hBo2ge4LYXXZxUsh60mirO2O mDlA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=imEsWHRVRzXzYeBeZ3uAWEnrXScDulZzxrS09EfUGNY=; b=LX4DRvmxV+dh2vEs9UlJnVFtatkL3l3kLhn4/WqPLawSH0hZjh/QpZjyn6Yvwc2MbW 8acaHtWvRgC0eK5J8Ju4JdI5u27MzFtRb27jvDyMFC2wGqX20qLHkKM6kqjCxj2rSAxb VfrajXys0u22rBlCcjS+/ZlLrXeBF38W9rOAJgGgQ/O+TFRvczpObgpPySGLhn2lPHAZ oucANaZA4TxiTZFopdXohjvRpg9hmvpQsx0168lb4zfnwpOWI8EK4m4lk4hwUQbjGZtP 0DXhtWXR6UlJTQLQqWmCwqiB/cneoRe0Wbpj6G7N+zN7KTyM66KwcnBgKTkTgVyUgZwW X6cQ== X-Gm-Message-State: AOAM530ikUZ25YWvGnnWZP8PxP7R1eYAm8JLnSgHQmnPJuLlT6Vevjun bgdlkSjK/T0+9E5OPLmiAobBR5ZrbXc= X-Google-Smtp-Source: ABdhPJyaSLZoQokxvBynX34rYybret/MEKYIemwQU8e4/Tjygm4FvoqikCMu/kbv2hbqWixSWXgIoA== X-Received: by 2002:adf:c6c4:: with SMTP id c4mr8275246wrh.348.1610632574600; Thu, 14 Jan 2021 05:56:14 -0800 (PST) Received: from localhost.localdomain ([82.129.110.36]) by smtp.gmail.com with ESMTPSA id p8sm10490753wru.50.2021.01.14.05.56.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Jan 2021 05:56:14 -0800 (PST) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Thu, 14 Jan 2021 13:55:58 +0000 Message-Id: <20210114135558.58119-2-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210114135558.58119-1-derek.buitenhuis@gmail.com> References: <20210114135558.58119-1-derek.buitenhuis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/librav1e: Pass through timestamps as opaque user data 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" avcodec has no facilities to generate timestamps properly from output frame numbers (and it would be wrong for VFR anyway), so pass through the timestamps using rav1e's opaque user data feature, which was added in v0.4.0. This bumps the minimum librav1e version to 0.4.0. Signed-off-by: Derek Buitenhuis --- configure | 2 +- libavcodec/librav1e.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 900505756b..54fbbd6b5f 100755 --- a/configure +++ b/configure @@ -6408,7 +6408,7 @@ enabled libopus && { } enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new enabled librabbitmq && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection -enabled librav1e && require_pkg_config librav1e "rav1e >= 0.1.0" rav1e.h rav1e_context_new +enabled librav1e && require_pkg_config librav1e "rav1e >= 0.4.0" rav1e.h rav1e_context_new enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++" diff --git a/libavcodec/librav1e.c b/libavcodec/librav1e.c index 46071bcdac..c1c0de45a6 100644 --- a/libavcodec/librav1e.c +++ b/libavcodec/librav1e.c @@ -445,10 +445,18 @@ static int librav1e_receive_packet(AVCodecContext *avctx, AVPacket *pkt) if (frame->buf[0]) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); + int64_t *pts = av_malloc(sizeof(int64_t)); + if (!pts) { + av_log(avctx, AV_LOG_ERROR, "Could not allocate PTS buffer.\n"); + return AVERROR(ENOMEM); + } + *pts = frame->pts; + rframe = rav1e_frame_new(ctx->ctx); if (!rframe) { av_log(avctx, AV_LOG_ERROR, "Could not allocate new rav1e frame.\n"); av_frame_unref(frame); + av_freep(&pts); return AVERROR(ENOMEM); } @@ -461,6 +469,7 @@ static int librav1e_receive_packet(AVCodecContext *avctx, AVPacket *pkt) } av_frame_unref(frame); } + rav1e_frame_set_opaque(rframe, pts, av_free); } ret = rav1e_send_frame(ctx->ctx, rframe); @@ -535,7 +544,8 @@ retry: if (rpkt->frame_type == RA_FRAME_TYPE_KEY) pkt->flags |= AV_PKT_FLAG_KEY; - pkt->pts = pkt->dts = rpkt->input_frameno * avctx->ticks_per_frame; + pkt->pts = pkt->dts = *((int64_t *) rpkt->opaque); + av_free(rpkt->opaque); rav1e_packet_unref(rpkt); if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {