From patchwork Thu Jan 23 20:25:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 17498 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 5D40A44ABFA for ; Thu, 23 Jan 2020 22:34:30 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 384FF68B1BF; Thu, 23 Jan 2020 22:34:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f195.google.com (mail-qk1-f195.google.com [209.85.222.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D665C68AC4C for ; Thu, 23 Jan 2020 22:34:23 +0200 (EET) Received: by mail-qk1-f195.google.com with SMTP id x1so4810289qkl.12 for ; Thu, 23 Jan 2020 12:34:23 -0800 (PST) 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=nSboxpchzJ8hIPKjkHbrTPEEvDI7z2MYByTYkgEqr98=; b=VNHzsToaRy/HGdd3l5ZF3Zq71rKLJf5DUQ3PKUyFdKaDcEpualp9dK59/IHObLiyjv MTVv4FlZHjWnkGdh6NvvugW0Lj/ju0KwOqDzKeQBax/r0m7ioupmD6eg78uBpywPctZe 0IElNZ5dVuTSvpuRq7o3PCokc1H9QTSMrKstweR2b2pzwuLIpuSOvsh0Au5bOjw2ElYr 0Be2MBLnVeAvjn7FO1R5TKmL8SLtZrKh0L/PFUxAZ26sVi39mqCIIt/GryZfv+AJwiRp vzTp2Wn9l/N3cFeJBipZbVT0nG6URROweoY6zhJ7d/IP4NHurxRPNphtu1ELWEBrgpy0 bN9A== 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=nSboxpchzJ8hIPKjkHbrTPEEvDI7z2MYByTYkgEqr98=; b=g54SCv2C7okVwHgybPqGl3/8+8znjjwum92L+XwUG7l6Cc1szrDO+zMMrA7AuKtTid TKqd7MvTlbpd8SB/7oUzCPebMgoARCs2Zec7JpSl88iDMm90khB1Fo3NIUsKL4/GBB1M Bm8E0nYLSUUM/KVLIe/KvYAyYyZdVdW5XQxD3vr1mDLfuwcQMaju6bmujQy3oEzmOS6h tZe2Nv5deIPTcSpEMqGU296qUXUUNyV//0bw2XE259UjpaTvunBjAc2cIdmU5P8EJpkt UtilRnT/EZdQq0fcbtvekS3tEktOXDeQDsqbdecBwiQSH7nKAHKTyuyPy+MVxdlccWOC Eu5Q== X-Gm-Message-State: APjAAAW27gGoGzlvtz+FuhLiAgLT//kcvvlXJivlL4PXdgA6GsrtjIax UUKrAGv3dboAMzhIu6/sA1G5cgNc X-Google-Smtp-Source: APXvYqwqSW0i+Cv8FK7OZUYM/uCEAbliXYI7DvBHEh4rvnwuj3I+vYm8kAPqUFrqNHDG3OalDrvXtg== X-Received: by 2002:ae9:f819:: with SMTP id x25mr18044494qkh.192.1579811156449; Thu, 23 Jan 2020 12:25:56 -0800 (PST) Received: from localhost.localdomain ([191.83.216.198]) by smtp.gmail.com with ESMTPSA id a200sm1566926qkc.2.2020.01.23.12.25.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jan 2020 12:25:56 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Jan 2020 17:25:34 -0300 Message-Id: <20200123202535.232-1-jamrial@gmail.com> X-Mailer: git-send-email 2.25.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec: add an AVCodecContext flag to export PRFT side data on demand 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" Signed-off-by: James Almer --- doc/APIchanges | 3 +++ doc/codecs.texi | 2 ++ libavcodec/avcodec.h | 8 +++++++- libavcodec/options_table.h | 1 + libavcodec/version.h | 2 +- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 2977b00b60..2433083d55 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2017-10-21 API changes, most recent first: +2020-01-xx - xxxxxxxxxx - lavc 58.66.101 - avcodec.h + Add AV_CODEC_FLAG2_EXPORT_PRFT. + 2020-01-15 - xxxxxxxxxx - lavc 58.66.100 - avcodec.h Add AV_PKT_DATA_PRFT and AVProducerReferenceTime. diff --git a/doc/codecs.texi b/doc/codecs.texi index 15e55cca39..ebf7bab0fb 100644 --- a/doc/codecs.texi +++ b/doc/codecs.texi @@ -779,6 +779,8 @@ Place global headers at every keyframe instead of in extradata. Frame data might be split into multiple chunks. @item showall Show all frames before the first keyframe. +@item export_prft +Export Producer Reference Time into packet side-data (see @code{AV_PKT_DATA_PRFT}) @item export_mvs Export motion vectors into frame side-data (see @code{AV_FRAME_DATA_MOTION_VECTORS}) for codecs that support it. See also @file{doc/examples/export_mvs.c}. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 774ed1e641..aae6e83568 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -955,6 +955,10 @@ typedef struct RcOverride{ * Show all frames before the first keyframe */ #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) +/** + * Export Producer Reference Time through packet side data + */ +#define AV_CODEC_FLAG2_EXPORT_PRFT (1 << 27) /** * Export motion vectors through frame side data */ @@ -1416,7 +1420,9 @@ enum AVPacketSideDataType { AV_PKT_DATA_AFD, /** - * Producer Reference Time data corresponding to the AVProducerReferenceTime struct. + * Producer Reference Time data corresponding to the AVProducerReferenceTime struct + * exported by some encoders (on demand through the export_prft flag set in the + * AVCodecContext flags2 field). */ AV_PKT_DATA_PRFT, diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index d4c0cdeb48..479a85071b 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -75,6 +75,7 @@ static const AVOption avcodec_options[] = { {"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"}, {"chunks", "Frame data might be split into multiple chunks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, "flags2"}, {"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"}, +{"export_prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_PRFT}, INT_MIN, INT_MAX, A|V|E, "flags2"}, {"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, "flags2"}, {"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, A|D, "flags2"}, {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, "flags2"}, diff --git a/libavcodec/version.h b/libavcodec/version.h index 6cf333eeb6..b438a09d6d 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 58 #define LIBAVCODEC_VERSION_MINOR 66 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ From patchwork Thu Jan 23 20:25:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 17497 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 6F16144ABD7 for ; Thu, 23 Jan 2020 22:32:11 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3F02168ADB3; Thu, 23 Jan 2020 22:32:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f193.google.com (mail-qk1-f193.google.com [209.85.222.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B243368AC21 for ; Thu, 23 Jan 2020 22:32:04 +0200 (EET) Received: by mail-qk1-f193.google.com with SMTP id c17so4833122qkg.7 for ; Thu, 23 Jan 2020 12:32:04 -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=wHoU5RnV6S5NXJaMLn7WpuEHBKUcdfhHC0oAutl87T0=; b=suC7wO+PMVjnf5ydLiRSuIyoxzxxF9hTwdiqL7/b60xlAm94hG36TPs2uSGxp8QE0u 9rkTZlbjBmHipeB7mob+juyfvAt0gjfbPIOUdSm9Jjflujc8JHpIalTxJrUavSapLqzv dUiz66VE5i3f41HKSjEMLMkximlWbAziTIcHUBT6DBFWiAFQMzkH2wXGNkH8c+ArHEeL 3Btgt6k2zwi4G24kvX5Q4xisI9xeGom4ryF07V9+9aQ0JonDKLMod2n+rvczc57pOOZ9 dOTorMBBQ/AAjkBdVMR9JNziSjIw0hliUeHX91urGagSdPUJrFnDTyl2E2Y8mKQRirh/ JWVQ== 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=wHoU5RnV6S5NXJaMLn7WpuEHBKUcdfhHC0oAutl87T0=; b=F/EwBRcrQ/5rwvT+deu8LKTDkPRXbo5ncQo7N2flHQ1u7g63lVIUJF9huxCN+lyq0G D30y6ZU2NolDTNo1oa2u4i8Tv63dujb1w/PSROZocUX2yvux/zLzYTq0M64dSiBl2iRY PLsKYdQ389ALsZ39+DDGOexpNCYB760QouvewMSv6pNpLp0dfikvAippcJiw4tauYstT hI6JUzQB5XjFKVCX1H3pClS0t3+EfUuVUFpPpzVdcvDKCUc4x1w+Gh+VwNIsjVLx4Tji Mnc7f6PLFwu8OxuhZ5jE4lpyRQFhVVJDAQh5VCJUMcJtakmpMFHzxHTWLXCGwq2TJGZD Z0KA== X-Gm-Message-State: APjAAAUFA3RuCqJ/YG/FMhpDhH4fkLJquC9w5ZU4rzrrl3Licr0qc5Bk a3E6Qf8P8SwR/B7C3r2VylKqlfhv X-Google-Smtp-Source: APXvYqxWxDlVZiht71S6htU6k+yTY8teZf73K/noXwX9GhH5t2BLJ6D6Yzcu1YkHimOwEK3DUvUiqA== X-Received: by 2002:a05:620a:2041:: with SMTP id d1mr18238100qka.113.1579811157610; Thu, 23 Jan 2020 12:25:57 -0800 (PST) Received: from localhost.localdomain ([191.83.216.198]) by smtp.gmail.com with ESMTPSA id a200sm1566926qkc.2.2020.01.23.12.25.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jan 2020 12:25:57 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Jan 2020 17:25:35 -0300 Message-Id: <20200123202535.232-2-jamrial@gmail.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200123202535.232-1-jamrial@gmail.com> References: <20200123202535.232-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/libx264: add a check for the export_prft AVCodecContext flag 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" Signed-off-by: James Almer --- libavcodec/libx264.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index ca8f6c0873..7cb716e13d 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -322,7 +322,9 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, x4->pic.i_pts = frame->pts; x4->reordered_opaque[x4->next_reordered_opaque].reordered_opaque = frame->reordered_opaque; - x4->reordered_opaque[x4->next_reordered_opaque].wallclock = av_gettime(); + x4->reordered_opaque[x4->next_reordered_opaque].wallclock = wallclock; + if (ctx->flags2 & AV_CODEC_FLAG2_EXPORT_PRFT) + x4->reordered_opaque[x4->next_reordered_opaque].wallclock = av_gettime(); x4->pic.opaque = &x4->reordered_opaque[x4->next_reordered_opaque]; x4->next_reordered_opaque++; x4->next_reordered_opaque %= x4->nb_reordered_opaque;