From patchwork Sun Jan 17 12:43:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 24995 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 5EAF144BD31 for ; Sun, 17 Jan 2021 14:43:36 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2DCC8687FC9; Sun, 17 Jan 2021 14:43:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 89C61680831 for ; Sun, 17 Jan 2021 14:43:30 +0200 (EET) Received: by mail-wr1-f51.google.com with SMTP id 7so6592358wrz.0 for ; Sun, 17 Jan 2021 04:43:30 -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=9eMDDCVR/aDJQkHehdWoBhNf8YT/yYkVDVrRS4t/IYE=; b=in+L3aN/b3MXkJNhzeU+e6yyJzQrd7TdXjqAKYC2enQep5Sf2z1WrO+zKY0U8aYQjY hWlu/Udz6kMLn+NcHnDurjTqztklqwpniXJ9QvgdVcIbUNYBwIahSt9HXE/fuHLirUfu yo0+0CyrURisxxLIOKLRY0uy8o7BfCYeWOjD7Gz6JsBl8l8FrLJ6i3TAFjWhy2e7ig3a N3hktrbnPtti0vxiZBCAkvr9vXActUYeEM1BO2cKL8xW+FzPXtZkMjJ9dAr2nKIwcp39 j0K2N7Rhn7BJHeF2up7Qfvoyo6X3Lion99U7PuIyNIXiy5YWOfrzEOEdI4sIg9PTWthV PCMQ== 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=9eMDDCVR/aDJQkHehdWoBhNf8YT/yYkVDVrRS4t/IYE=; b=Z+My3tWI5zCb37+rUQF3i4HEfvSHValQTcan8YTMIWbFeIF9gmGDZbpaqrzapp+xRk agy9R54hDlaa8w195aqJsZdSY2wDd04dRubI971Q/IgV+6OO03qOXet3dXGGTW4vCsqR M7EwBm3y+xpJ2Ogx1rDTIh6HYj2I6q//+VrwOEOYR6wwrWL+lGDDKCf2BmqTdQ/jkVNe kNq5Pqy1MtVs1YU0uOvn88R7bhMwwbh+xxVdWm/7gdxd4wCH5Xy8tamKWqcmmOvDqS/9 NwJvvAsOzKpzW3Euttkb7jt6xwfxZl/h+UdD1K8mlLuPV+bIUXuxsgi5AjJbGAA137p+ ub5g== X-Gm-Message-State: AOAM531qozE+377lsCYIoal0WrajiPZIxrwnSE+b4ST0FO4aPOpd4iyL l9mzxIr39DZht3pvla3Gck/oOFvc0Zs= X-Google-Smtp-Source: ABdhPJy6JcCp/0qw786yDhm/8rwsej+mEjXs7TXiQYJn5vq4KYwZqQ76McYEXEBtnZSoPB5+ZoDdPA== X-Received: by 2002:adf:9525:: with SMTP id 34mr22122969wrs.389.1610887409856; Sun, 17 Jan 2021 04:43:29 -0800 (PST) Received: from localhost.localdomain ([82.129.110.36]) by smtp.gmail.com with ESMTPSA id r13sm22984219wrt.10.2021.01.17.04.43.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Jan 2021 04:43:28 -0800 (PST) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Sun, 17 Jan 2021 12:43:20 +0000 Message-Id: <20210117124320.265894-1-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 v3] 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..2d5acc7d8e 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); } @@ -460,6 +468,7 @@ static int librav1e_receive_packet(AVCodecContext *avctx, AVPacket *pkt) frame->linesize[i], bytes); } av_frame_unref(frame); + rav1e_frame_set_opaque(rframe, pts, av_free); } } @@ -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) {