From patchwork Tue Jun 1 15:48:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 28034 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp3950977iof; Tue, 1 Jun 2021 08:49:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx5aeAMcDVG9erLHnyrtVXO2yptsApR3ctEqT+/nNFni7hncgxW6WGI/TGo9PK+maztXPdf X-Received: by 2002:aa7:d4c2:: with SMTP id t2mr16640162edr.144.1622562540845; Tue, 01 Jun 2021 08:49:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622562540; cv=none; d=google.com; s=arc-20160816; b=P7eFpEzfYaJm51EAVJGbdURz6xN2/nSdHNUuYe20fmd6XJGwKv7oXOTukNl6M+l2uy qsK/+8m5z3qQqsQjfmqRPl4Q5XseKJpD68s9RXZ+b8JLU7KUes+zHPAIcSug2iR5UTeZ awC35UxUpfiJ1kw+mB2YpfgAGDGc/2uEzh1cUeDhEg875JsnLc8P3517xNNPa05qjxwe ktZCG8LxvyBNEsh0jahZ5w9Y5QVhlF6u0g/tVjkOpQdtLFhDtcoCayKV9eYRpQaVUtji TqN+Z3vk0EtDbn00HbfLaw/+3v0Ss3qKNTyG8yv2N5QVB4/m7CqXbhKGuzgq3NiTtw8U moAg== 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=Ou9h/Wt7Xp1oDJo91S+xBksKjqAIzjrpwLtgt6N+NtE=; b=mThuVI0WQWJIM//pzcEOeUBb4AnWlj4QcLe6LXKiF4NiRthPbK7wffsbxxDM5jHokf lyTc4V49wnMEse82TDBtgv5VhCh3ikQJYDuHisCWZPTYVhF5TFmkGBNYnok518WcfkxK 48pW6xCx1kT4YjwM1MVVbrLl4RWFl5QjENZ/XoOeB8VpXHI53JjQAyMIJVk0qFi+D5Z7 S0PHgJbOvPT/EeaxdPdDfgabNvzox6OGAoTsuetSy5TNPVlzbhejVdYTIZUs0m8Uqr4z S7BVIKqYzym5YbRRsLVrCi/25yraMuCtJT6F162D7d6DGKhNjwbW/eLZJbOV2R3A8MK0 I4Vw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=uCe2h0BP; 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 u16si16691164edt.569.2021.06.01.08.48.59; Tue, 01 Jun 2021 08:49:00 -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=uCe2h0BP; 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 5B8A6689DB3; Tue, 1 Jun 2021 18:48:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 89B5C68998C for ; Tue, 1 Jun 2021 18:48:49 +0300 (EEST) Received: by mail-qt1-f178.google.com with SMTP id k19so10462677qta.2 for ; Tue, 01 Jun 2021 08:48:49 -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=kCmLdHDrs+6dLorxgwlWs5SD7nWcyiLZexLMwjNpOv8=; b=uCe2h0BPeRWjNudVB4W2UM9vdfwOUwg+5zwnj3OfISGUN248JQJ8dgYKifh7fpWl3r 4GVvUcIImXyKqlINKvzOC8reSEDlvZ6MLr6TX4AzhQdi6HfGjWGwJ96IuKPjY5vteHQQ 95aKmXBtNk2YO75WbwXqMJmnqMbWt3F2RVQmB7UphZFoXSNcUWrTgges45yDGt5pu+WJ cIAXTdVXEWuOUNEFJ7oxIxZCaU3jeG7rgp+Is2cDME8Olh5ukn4AwQobg84bJVb5R1xs Y/hCqtc+LQD7JtlvPN5YO1wJrdgoGg4OHOSkv3r5aL2KaprJEeAwwy52ClLM3JqDLX6V binQ== 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=kCmLdHDrs+6dLorxgwlWs5SD7nWcyiLZexLMwjNpOv8=; b=ZQjgdiqibSQOC9PwT2GtC1a7H8Y0h9dTX8Yn7it55gf4O8NExQqmbcmrZLl1lWNyyI 0oomJO/STzWwalZWS5Vu6a9tii5sENt7ilNhz/VqcrsDyomp4ThkyYCnfS/H9/pFuJSD wh0RD3lBtLxQfLQGKWySt2IFMglvSpO3bBiVxEvoA5QTzkxwP4lVME6Xppy7/l7FNlaQ 01cNZFFNA7aBGcySKhNiyqmURCRdz7VP4KcYeSVc2YnlWqv4Z5dU9OEOYdbl2AJYEfYT gtpwwEmrYIIjLbraUcXZ7bATiKaNmZ0DeJUFu9ztfwcDrBUfz2765NSi9by66mwIpYAx OOJQ== X-Gm-Message-State: AOAM533s5Ltm45jU/fzUn/yYzTDg+do9b+yTNmo23aR+znitBtmyvEXA B/Md/wDPaXw++0+hDz9fCmdgAOFq5pk= X-Received: by 2002:ac8:5a82:: with SMTP id c2mr19711303qtc.345.1622562526401; Tue, 01 Jun 2021 08:48:46 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.172]) by smtp.gmail.com with ESMTPSA id g9sm11643985qka.38.2021.06.01.08.48.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Jun 2021 08:48:45 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 1 Jun 2021 12:48:21 -0300 Message-Id: <20210601154821.1488-1-jamrial@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] fftools/ffmpeg: remove usage of internal timestamp AVStream fields 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: CHLSi2gAnECP They should not be accessed outside of libavformat. Signed-off-by: James Almer --- fftools/ffmpeg.c | 10 ++++++---- fftools/ffmpeg.h | 1 + fftools/ffmpeg_opt.c | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index b3658d8f65..04ddc9e60b 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1168,7 +1168,7 @@ static void do_video_out(OutputFile *of, if (frame_rate.num > 0 && frame_rate.den > 0) duration = 1/(av_q2d(frame_rate) * av_q2d(enc->time_base)); - if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->st->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num) + if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num) duration = FFMIN(duration, 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base))); if (!ost->filters_script && @@ -2625,9 +2625,11 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo avpkt = ist->pkt; if (!ist->saw_first_ts) { + ist->first_dts = ist->dts = ist->st->avg_frame_rate.num ? - ist->dec_ctx->has_b_frames * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; ist->pts = 0; if (pkt && pkt->pts != AV_NOPTS_VALUE && !ist->decoding_needed) { + ist->first_dts = ist->dts += av_rescale_q(pkt->pts, ist->st->time_base, AV_TIME_BASE_Q); ist->pts = ist->dts; //unused but better to set it to a value thats not totally wrong } @@ -3949,10 +3951,10 @@ static OutputStream *choose_output(void) for (i = 0; i < nb_output_streams; i++) { OutputStream *ost = output_streams[i]; - int64_t opts = ost->st->cur_dts == AV_NOPTS_VALUE ? INT64_MIN : - av_rescale_q(ost->st->cur_dts, ost->st->time_base, + int64_t opts = ost->last_mux_dts == AV_NOPTS_VALUE ? INT64_MIN : + av_rescale_q(ost->last_mux_dts, ost->st->time_base, AV_TIME_BASE_Q); - if (ost->st->cur_dts == AV_NOPTS_VALUE) + if (ost->last_mux_dts == AV_NOPTS_VALUE) av_log(NULL, AV_LOG_DEBUG, "cur_dts is invalid st:%d (%d) [init:%d i_done:%d finish:%d] (this is harmless if it occurs once at the start per stream)\n", ost->st->index, ost->st->id, ost->initialized, ost->inputs_done, ost->finished); diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 606f2afe0c..e9d30fbd67 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -316,6 +316,7 @@ typedef struct InputStream { /* predicted dts of the next packet read for this stream or (when there are * several frames in a packet) of the next frame in current packet (in AV_TIME_BASE units) */ int64_t next_dts; + int64_t first_dts; ///< dts of the first packet read for this stream (in AV_TIME_BASE units) int64_t dts; ///< dts of the last packet read for this stream (in AV_TIME_BASE units) int64_t next_pts; ///< synthetic pts for the next decode frame (in AV_TIME_BASE units) diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 849d24b16d..a63bed54cf 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -809,6 +809,7 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic) ist->discard = 1; st->discard = AVDISCARD_ALL; ist->nb_samples = 0; + ist->first_dts = AV_NOPTS_VALUE; ist->min_pts = INT64_MAX; ist->max_pts = INT64_MIN;