From patchwork Thu Mar 18 00:28:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alok Priyadarshi X-Patchwork-Id: 26440 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 09AB244BA4F for ; Thu, 18 Mar 2021 02:52:25 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D836368818E; Thu, 18 Mar 2021 02:52:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 47091687F21 for ; Thu, 18 Mar 2021 02:52:18 +0200 (EET) Received: by mail-pg1-f179.google.com with SMTP id n11so324604pgm.12 for ; Wed, 17 Mar 2021 17:52:18 -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=7kWMdIXCWOebcYWu5747mNTK6KCxvLYqAwKITNs3gFI=; b=jiJoQUIbeSCvULh4yXJO/QGUv9o+sU4R0Tu3EqZzdB/KISL8RLyHZwxYPWCtn4GkUa Wf19buBtLjmlQ9wHoSyl9Q9zSHqfySmhgGXbG+f1BYnqn4C/IY/1oVpZmnN2JH1wIbzs O/aIbZ2ZoaAMC9kL34sS2jAkEj1fOtD6u6El/ROj+ugasDuTeJ6zGGUMVJ5sfnWaWTGO IIXZpPa5muoy1HQj/+4aMTA9+RVJZMbNicaW5GCq2OPV1aeOVsMLHGS03gsqfZuIBG2H LLCpMEiWm33eXwiuqGa9MCiO6XkioFq/94HXFQRrlUdKHJtbPSo6a1DjNHeT1PsDHD8d nviA== 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=7kWMdIXCWOebcYWu5747mNTK6KCxvLYqAwKITNs3gFI=; b=ngsOd2BFAwTUz8vDzCESjKXY7ZHr67NXZ0kBw+QaONKwqXE6Gn6OLMJ/LYFTNUXcUT 8YTv1AbQ/CyKBhtW6e78H4LawPhVyYKtpXjhpAs+JrWqUOGCQf4snp8dC5eqIBG3x1Zd kV563byB3LDLwfC5cCD8Oln/nLihDX2Rszku14SDj7Ga7XKveoptVPpctQyUu3BePslz k7e+xuY4FP3HNND3qsiDkee45uLaSxW/nCFQ+sigpCVAbuTydEM6MJZITUfUkEiOkcnV oP9hmBhKQfoUyjmLJOYv3MnuqQ4F3zCzWEWdzpQtbT5FhpaGNFyW9VNarrH0TO1AsPG8 HYVg== X-Gm-Message-State: AOAM533xq4yHZOdzuPAJVVp8hJH+3Qzx1PCKCFI7bLZrKNnaDhIww783 1cqDtkemSuycve3RSTUbTyF+YftV91XYPw== X-Google-Smtp-Source: ABdhPJwihbHIikvNylm/kujqeaZxnNEWLKzuEATW2zKfzzKaRiAR5hvdbXDikRoCSQ3FUsPnu3MLhQ== X-Received: by 2002:a63:410:: with SMTP id 16mr4688953pge.220.1616027320110; Wed, 17 Mar 2021 17:28:40 -0700 (PDT) Received: from localhost.localdomain (c-73-223-72-238.hsd1.ca.comcast.net. [73.223.72.238]) by smtp.gmail.com with ESMTPSA id gm10sm234072pjb.4.2021.03.17.17.28.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Mar 2021 17:28:39 -0700 (PDT) From: Alok Priyadarshi To: ffmpeg-devel@ffmpeg.org Date: Wed, 17 Mar 2021 17:28:30 -0700 Message-Id: <20210318002830.469769-1-alokpr@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/rtpdec: attach producer reference time 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: Alok Priyadarshi Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This produces true wallclock time at rtp source instead of the local wallclock time at rtp client. --- libavformat/internal.h | 8 ++++++++ libavformat/rtpdec.c | 10 ++++++++++ libavformat/utils.c | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/libavformat/internal.h b/libavformat/internal.h index 17a6ab07d3..1e10cde00e 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -254,6 +254,14 @@ uint64_t ff_ntp_time(void); */ uint64_t ff_get_formatted_ntp_time(uint64_t ntp_time_us); +/** + * Parse the NTP time in micro seconds (since NTP epoch). + * + * @param ntp_ts NTP time stamp formatted as per the RFC-5905. + * @return the time in micro seconds (since NTP epoch) + */ +uint64_t ff_parse_ntp_time(uint64_t ntp_ts); + /** * Append the media-specific SDP fragment for the media stream c * to the buffer buff. diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index 3d5b200099..3e5f280f2f 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -23,6 +23,7 @@ #include "libavutil/avstring.h" #include "libavutil/intreadwrite.h" #include "libavutil/time.h" +#include "libavcodec/packet_internal.h" #include "avformat.h" #include "network.h" @@ -30,6 +31,7 @@ #include "url.h" #include "rtpdec.h" #include "rtpdec_formats.h" +#include "internal.h" #define MIN_FEEDBACK_INTERVAL 200000 /* 200 ms in us */ @@ -594,6 +596,14 @@ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestam if (timestamp == RTP_NOTS_VALUE) return; + if (s->last_rtcp_ntp_time != AV_NOPTS_VALUE) { + uint64_t prft_us = ff_parse_ntp_time(s->last_rtcp_ntp_time) - NTP_OFFSET_US + + timestamp - s->last_rtcp_timestamp; + if (ff_side_data_set_prft(pkt, prft_us) < 0) { + av_log(s->ic, AV_LOG_WARNING, "rtpdec: failed to set prft"); + } + } + if (s->last_rtcp_ntp_time != AV_NOPTS_VALUE && s->ic->nb_streams > 1) { int64_t addend; int delta_timestamp; diff --git a/libavformat/utils.c b/libavformat/utils.c index 7e5767ec60..569922beaf 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -4734,6 +4734,15 @@ uint64_t ff_get_formatted_ntp_time(uint64_t ntp_time_us) return ntp_ts; } +uint64_t ff_parse_ntp_time(uint64_t ntp_ts) +{ + uint64_t sec = ntp_ts >> 32; + uint64_t frac_part = ntp_ts & 0xFFFFFFFFULL; + uint64_t usec = (frac_part * 1000000) / 0xFFFFFFFFULL; + + return (sec * 1000000) + usec; +} + int av_get_frame_filename2(char *buf, int buf_size, const char *path, int number, int flags) { const char *p;