From patchwork Wed Jan 24 08:16:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 45763 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:120f:b0:199:de12:6fa6 with SMTP id v15csp1129535pzf; Wed, 24 Jan 2024 00:18:32 -0800 (PST) X-Google-Smtp-Source: AGHT+IEcp0byEg10oJeMmH907yCHclvNC1H4AE1EQkue70uaTWyELTWlaV0+f6xAYuDRmeSZ3AaX X-Received: by 2002:aa7:cb50:0:b0:559:87b5:9692 with SMTP id w16-20020aa7cb50000000b0055987b59692mr861046edt.2.1706084312380; Wed, 24 Jan 2024 00:18:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1706084312; cv=none; d=google.com; s=arc-20160816; b=mToBnd4Ag5bQ7nQ02ZSVVOqwKPe01kkXe2LfeMhNurttfv0bUHn0+fUM4GRCNZhD5V vo9tl3Vb/XNA2fCFfwCayHK9SIe8qRzhAZjua6ZgFOMDZaV7QIldD2KHKyDKkhYkQdhv /P3HQCkRN6eobGt2N1jht5xwJhg5s/UFRTWapVuCjEz/O8vqrdPHdjADva8FchTScOtC JO6JnEnjLkwXDBKG26wFUvHwWy0Aj+v/G4RP5DEu3LHINJrgYR0v/aiKK+H65HpQHa8c bbnlS5bFLNvG+0fOrIzV1+Hrh6/C0ETCy6UbP1bui/O3yifIwki1YRaJ6HTEk60tXICD 2krA== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=y/KRO8UZcseQCb+c6yB/JTjYFrJk3miZRi2NGuaGs58=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=jfeODCPO+5N02e9wJPiBA9M744AywB7xxFNEBtzlowI/5gZ8FPz8f8GhSk1UZasjKz 9YYgyEoDLzFk1VAgFZ0VKPeXZcSeYe/EZnSgQH1rUOVKaDCSVbogzUuDO/+wB/00tgyJ qBuFw0sV2SfS0BwDEYoT+6PYfVKkrVoR3A5feROauNJks09qZe/n62FhP5XaKUegsnH7 xsQk5J14hR1Nw69k9kWZ1NcDyP+6CPdbPmap8bzo0AAwJuinTlBxFDn9UEBTK857NvZk MES97kekj5QqRgtDc93Mc87NhbAXy7MJkIl3LWN+h2LoVRrIqMNDsIHtdK9c+R8Ru2vE vTkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=muM5T6Qy; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ds11-20020a0564021ccb00b00559d998e13dsi7959246edb.209.2024.01.24.00.18.32; Wed, 24 Jan 2024 00:18:32 -0800 (PST) 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=@khirnov.net header.s=mail header.b=muM5T6Qy; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 474B768D0EB; Wed, 24 Jan 2024 10:17:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F0D5668C99B for ; Wed, 24 Jan 2024 10:17:26 +0200 (EET) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=muM5T6Qy; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id BA5FB1A22 for ; Wed, 24 Jan 2024 09:17:22 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id KCuRXFhwmpcy for ; Wed, 24 Jan 2024 09:17:22 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1706084239; bh=Rj+IBz0+/N+fXQ4uyJh32HEOPBGgWgEZAG2PrCSt+fo=; h=From:To:Subject:Date:In-Reply-To:References:From; b=muM5T6QyDuBOZruDFLwPJ17lY6H26ZscXf5NopYdkGKvfOW276xgxz4d5vti5C/RQ HY94+4UETRlcHZVBDekCqv31apGisQ0V+5p4EBSEsaMbJPY3nZlikmHTz7CTThuPLe 7Fw6TYFZ2v8S7sxivDcgaIqrAHpq/vKr08BlnrhxV/EkhZcpeXtiEFptSIgZLKCwy+ AjuFPvd48mcnAQ7cz7JompR8h+v7HnwUSEOofgy5c8GXuApoNqkon/B5sQM606frmu vu7olL747Hj3p7WRZZHxIf5/poF/LHhRUV3kSLFY5qwVWYYyDoZNaPoKU6Ba0F7tkV THdTn9KHRU2hQ== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id C75FD1A3D for ; Wed, 24 Jan 2024 09:17:19 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id BBCEF3A061F for ; Wed, 24 Jan 2024 09:17:19 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jan 2024 09:16:44 +0100 Message-ID: <20240124081702.4759-14-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240124081702.4759-1-anton@khirnov.net> References: <20240124081702.4759-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/31] fftools/ffmpeg_dec: replace InputFile.format_nots with a decoder flag 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: Mr8jdwBhKdXS Reduces the need to access InputFile from decoding. This is a step towards decoupling Decoder and InputStream. --- fftools/ffmpeg.h | 5 ++--- fftools/ffmpeg_dec.c | 8 ++++---- fftools/ffmpeg_demux.c | 5 ++--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 8b7560b359..e87af70698 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -282,6 +282,8 @@ typedef struct FilterGraph { enum DecoderFlags { DECODER_FLAG_FIX_SUB_DURATION = (1 << 0), + // input timestamps are unreliable (guessed by demuxer) + DECODER_FLAG_TS_UNRELIABLE = (1 << 1), }; typedef struct Decoder { @@ -362,9 +364,6 @@ typedef struct InputFile { int index; - // input format has no timestamps - int format_nots; - AVFormatContext *ctx; int64_t input_ts_offset; int input_sync_ref; diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c index e0d8e27098..f647db3611 100644 --- a/fftools/ffmpeg_dec.c +++ b/fftools/ffmpeg_dec.c @@ -216,7 +216,7 @@ static void audio_ts_process(DecoderPriv *dp, AVFrame *frame) static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *frame) { const DecoderPriv *dp = dp_from_dec(ist->decoder); - const InputFile *ifile = ist->file; + const int ts_unreliable = dp->flags & DECODER_FLAG_TS_UNRELIABLE; int64_t codec_duration = 0; // XXX lavf currently makes up frame durations when they are not provided by @@ -226,7 +226,7 @@ static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *fr // durations, then this should be simplified. // prefer frame duration for containers with timestamps - if (frame->duration > 0 && (!ifile->format_nots || ist->framerate.num)) + if (frame->duration > 0 && (!ts_unreliable || ist->framerate.num)) return frame->duration; if (dp->dec_ctx->framerate.den && dp->dec_ctx->framerate.num) { @@ -238,7 +238,7 @@ static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *fr } // prefer codec-layer duration for containers without timestamps - if (codec_duration > 0 && ifile->format_nots) + if (codec_duration > 0 && ts_unreliable) return codec_duration; // when timestamps are available, repeat last frame's actual duration @@ -466,7 +466,7 @@ static int packet_decode(InputStream *ist, AVPacket *pkt, AVFrame *frame) if (pkt && pkt->size == 0) return 0; - if (pkt && ifile->format_nots) { + if (pkt && (dp->flags & DECODER_FLAG_TS_UNRELIABLE)) { pkt->pts = AV_NOPTS_VALUE; pkt->dts = AV_NOPTS_VALUE; } diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index d804358d55..729d7e476b 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -891,7 +891,8 @@ static int ist_use(InputStream *ist, int decoding_needed) if (decoding_needed && ds->sch_idx_dec < 0) { int is_audio = ist->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO; - int dec_flags = !!ist->fix_sub_duration * DECODER_FLAG_FIX_SUB_DURATION; + int dec_flags = (!!ist->fix_sub_duration * DECODER_FLAG_FIX_SUB_DURATION) | + (!!(d->f.ctx->iformat->flags & AVFMT_NOTIMESTAMPS) * DECODER_FLAG_TS_UNRELIABLE); ret = sch_add_dec(d->sch, decoder_thread, ist, d->loop && is_audio); if (ret < 0) @@ -1698,8 +1699,6 @@ int ifile_open(const OptionsContext *o, const char *filename, Scheduler *sch) d->min_pts = (Timestamp){ .ts = AV_NOPTS_VALUE, .tb = (AVRational){ 1, 1 } }; d->max_pts = (Timestamp){ .ts = AV_NOPTS_VALUE, .tb = (AVRational){ 1, 1 } }; - f->format_nots = !!(ic->iformat->flags & AVFMT_NOTIMESTAMPS); - d->readrate = o->readrate ? o->readrate : 0.0; if (d->readrate < 0.0f) { av_log(d, AV_LOG_ERROR, "Option -readrate is %0.3f; it must be non-negative.\n", d->readrate);