From patchwork Mon May 8 09:17:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41530 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180191pzb; Mon, 8 May 2023 02:18:21 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7ZdnAzijgxtC9k9sd371fwps9tTM4C1zkXleSLzdHzQrr0EEiSO8UqBH02vk8V54S4vN9g X-Received: by 2002:a17:906:99c4:b0:94e:cf98:32f2 with SMTP id s4-20020a17090699c400b0094ecf9832f2mr9526053ejn.33.1683537501409; Mon, 08 May 2023 02:18:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537501; cv=none; d=google.com; s=arc-20160816; b=XRlOsoPM518ezL8AElOBHo6adr3yJDA5ZoXllQWcIVlV9Rgq6oyNEqN7cMNjQXBMVp ri10az29LxeS+nOheH9Ueg5rUjNmZHIzuho1OAbh4v0FF1iNyapb30J6iv41mHgSu9Jx tX8+SJO4gDN5TkWW7DRLxeRX+tBxXtBF+EFbclOdN3IrAMqpQ8CDlgkAyBaJAT2V8SE7 VIEgs2eLRi3OlplNyPL4rt4jajPfUBmyjyTDQwZ9LOXzYZ1XpWTxuHOuQVpLFdnp9KaT U1hMrjdE+px7Mt62aLuKieVOkwxQP0iFOYOgS9SZbjXK7FiNS4ntY1K4vHAnrjY+D2bC H1rA== 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 :delivered-to; bh=BEd3tYSsLxZsglgPxe0bL1+qSLpjFud1w9EeFnmuGQM=; b=k2tfwpPzGTK4CpdjbsfcRSw5DAgJ4KDLmown58EFBGs4IE7ui4kl3WzcBLYoT6haB6 UmHffLoyFpwqEyUx+ULCOvQeR6Z40I2Qbdii3WCvkwntLL4pDrSq/y7MwVnrgShLhqW0 QOC/kWUESDpabgrJcK1AEpA1PZ/rvKlSbg6T+skgn68mh2ymqHbucv08Wr8StbBrVTtC vmweWeMMsltmG6fDzb5waUWlGNKsiJ6R2ObxbCdNdZ1LkWjhe5skoGUjZSzHZcxk3vDI 42PxGjHU2QR4L3FgRNnd8SNJh/8xnzU66G0p6JxTaGop1t8O2ucD2dA4pnxnMFYzk4XO Pp+w== ARC-Authentication-Results: i=1; mx.google.com; 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 lu2-20020a170906fac200b009584dfeebbcsi5606507ejb.471.2023.05.08.02.18.21; Mon, 08 May 2023 02:18:21 -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; 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 32DAF68C13D; Mon, 8 May 2023 12:18:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 854A168C0ED for ; Mon, 8 May 2023 12:17:58 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 4FD502404EC for ; Mon, 8 May 2023 11:17:58 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id rM44_BZp4SRV for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 2C4AD240177 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id C005B3A01C0 for ; Mon, 8 May 2023 11:17:56 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:17 +0200 Message-Id: <20230508091738.20813-1-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/22] fftools/ffmpeg: consolidate InputStream.[next_]dts updates 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: 3kKeXINhswCP Move them to a separate function called right after timestamp discontinuity processing. This is now possible, since these values have no interaction with decoding anymore. --- This set goes on top of the repeat_pict/ticks_per_frame set, and can also be obtained from branch 'ffmpeg_ist_dts' at https://git.khirnov.net/libav --- fftools/ffmpeg.c | 105 +++++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index e2ada7a352..2bd3ce3f13 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1375,19 +1375,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo AVPacket *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; - if (pkt && pkt->pts != AV_NOPTS_VALUE) { - ist->first_dts = - ist->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); - } - ist->saw_first_ts = 1; - } - - if (ist->next_dts == AV_NOPTS_VALUE) - ist->next_dts = ist->dts; - if (pkt) { av_packet_unref(avpkt); ret = av_packet_ref(avpkt, pkt); @@ -1395,10 +1382,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo return ret; } - if (pkt && pkt->dts != AV_NOPTS_VALUE) { - ist->next_dts = ist->dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); - } - // while we have more to decode or while the decoder did output something on EOF while (ist->decoding_needed) { int64_t duration_pts = 0; @@ -1477,39 +1460,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo } } - if (pkt) { - ist->dts = ist->next_dts; - switch (par->codec_type) { - case AVMEDIA_TYPE_AUDIO: - av_assert1(pkt->duration >= 0); - if (par->sample_rate) { - ist->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / - par->sample_rate; - } else { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); - } - break; - case AVMEDIA_TYPE_VIDEO: - if (ist->framerate.num) { - // TODO: Remove work-around for c99-to-c89 issue 7 - AVRational time_base_q = AV_TIME_BASE_Q; - int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate)); - ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); - } else if (pkt->duration) { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); - } else if(ist->dec_ctx->framerate.num != 0) { - int fields = (ist->codec_desc && - (ist->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? - ist->last_pkt_repeat_pict + 1 : 2; - AVRational field_rate = av_mul_q(ist->dec_ctx->framerate, - (AVRational){ 2, 1 }); - - ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); - } - break; - } - } - if (!pkt && !ist->decoding_needed) eof_reached = 1; @@ -1900,6 +1850,58 @@ static void ts_discontinuity_process(InputFile *ifile, InputStream *ist, ts_discontinuity_detect(ifile, ist, pkt); } +static void ist_dts_update(InputStream *ist, AVPacket *pkt) +{ + const AVCodecParameters *par = ist->par; + + 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; + if (pkt->pts != AV_NOPTS_VALUE) { + ist->first_dts = + ist->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); + } + ist->saw_first_ts = 1; + } + + if (ist->next_dts == AV_NOPTS_VALUE) + ist->next_dts = ist->dts; + + if (pkt->dts != AV_NOPTS_VALUE) + ist->next_dts = ist->dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); + + ist->dts = ist->next_dts; + switch (par->codec_type) { + case AVMEDIA_TYPE_AUDIO: + av_assert1(pkt->duration >= 0); + if (par->sample_rate) { + ist->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / + par->sample_rate; + } else { + ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); + } + break; + case AVMEDIA_TYPE_VIDEO: + if (ist->framerate.num) { + // TODO: Remove work-around for c99-to-c89 issue 7 + AVRational time_base_q = AV_TIME_BASE_Q; + int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate)); + ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); + } else if (pkt->duration) { + ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); + } else if(ist->dec_ctx->framerate.num != 0) { + int fields = (ist->codec_desc && + (ist->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? + ist->last_pkt_repeat_pict + 1 : 2; + AVRational field_rate = av_mul_q(ist->dec_ctx->framerate, + (AVRational){ 2, 1 }); + + ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); + } + break; + } +} + /* * Return * - 0 -- one packet was read and processed @@ -1985,6 +1987,9 @@ static int process_input(int file_index) // detect and try to correct for timestamp discontinuities ts_discontinuity_process(ifile, ist, pkt); + // update estimated/predicted dts + ist_dts_update(ist, pkt); + if (debug_ts) { av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", ifile->index, pkt->stream_index, From patchwork Mon May 8 09:17:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41543 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181161pzb; Mon, 8 May 2023 02:20:16 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5Sseg10FY3O3HaQ5Etsa/Qk8JWBCD/uzojd5e7dspXcUupoCz5vNYm8XejLlwcFsX/RQYK X-Received: by 2002:a05:6402:10d8:b0:50b:c160:8b7c with SMTP id p24-20020a05640210d800b0050bc1608b7cmr6758791edu.39.1683537616058; Mon, 08 May 2023 02:20:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537616; cv=none; d=google.com; s=arc-20160816; b=MCzsL78E1GI6Ekl0mlJLOGgsoMA/1qZdBHrOtDxJ+9PqAZxf9cayQJqBeWmHi4CvGf tT9iTYHKtq6aHIY3Cd7NOH005uJcMKm3riG+YT9zc8jakvyyTLiCG2NltedggrfgGJ8c 2yH7f9y5UJxtKb18jFzjuTqyKOQvSJONzniuCkZMLuK3IDPdMeohk/2SHNUY2r/YA9Cf 7oh6is1ehncq9UzTPAfektkwOmWdUvGTtPfzwgK6Shdpwmptrzazi9WuBR7AFY80XntN 9rAieGhyBLJMVKH6PmsEalJptGCG6myIcvzIea0kzwEbUy0D2wPxhVr86iKFRyB7dOdP 3aFQ== 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:delivered-to; bh=nkxuDP9ntPggeCJZgsj27utkOH0u4JJ43V29y5rsVJA=; b=eurqjeVVEKp2ZTkYWg+Dt5W2SoqXjWADwtPwLETnFk0HZIu4isvkO0VaRJKPhwbU/C JuPCl8kUQ2H2hXFZuijfTgnBsO5Do/a2CoQtGf09afCbdAgfZj8hBQnYXDAj+Mhcqafu aF8b8r3LDQCPWHaHNLbLeZ/3+tXt043BFqyjsA/HWNRUlT8afxgOv2n9R1+6ei5Sxfn3 O2dGQyMOXF7RLcwbuO238d0uV7oLBurrVIHSb9pxZQKjOlHDzC9lLXasRDfXr640dOFj pDDwjsOmLq5Wb5peu+T/hRAsJbQhlrxFPi2Ftzd3CFklCg1+3hZrd6u1e4gqnSF+Djvt /EqQ== ARC-Authentication-Results: i=1; mx.google.com; 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 y18-20020a50e612000000b00508492563c5si9323703edm.556.2023.05.08.02.20.15; Mon, 08 May 2023 02:20:16 -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; 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 3378A68C1BE; Mon, 8 May 2023 12:18:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5400868C16C for ; Mon, 8 May 2023 12:18:03 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 74027240591 for ; Mon, 8 May 2023 11:18:00 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 9EK7Y905RrCc for ; Mon, 8 May 2023 11:17:59 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 303ED2404EE for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id CD8293A048F for ; Mon, 8 May 2023 11:17:56 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:18 +0200 Message-Id: <20230508091738.20813-2-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/22] fftools/ffmpeg: reindent after previous commit 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: nzWwlTb6W+1h --- fftools/ffmpeg.c | 58 ++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 2bd3ce3f13..817b643c48 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1870,36 +1870,36 @@ static void ist_dts_update(InputStream *ist, AVPacket *pkt) if (pkt->dts != AV_NOPTS_VALUE) ist->next_dts = ist->dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); - ist->dts = ist->next_dts; - switch (par->codec_type) { - case AVMEDIA_TYPE_AUDIO: - av_assert1(pkt->duration >= 0); - if (par->sample_rate) { - ist->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / - par->sample_rate; - } else { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); - } - break; - case AVMEDIA_TYPE_VIDEO: - if (ist->framerate.num) { - // TODO: Remove work-around for c99-to-c89 issue 7 - AVRational time_base_q = AV_TIME_BASE_Q; - int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate)); - ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); - } else if (pkt->duration) { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); - } else if(ist->dec_ctx->framerate.num != 0) { - int fields = (ist->codec_desc && - (ist->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? - ist->last_pkt_repeat_pict + 1 : 2; - AVRational field_rate = av_mul_q(ist->dec_ctx->framerate, - (AVRational){ 2, 1 }); - - ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); - } - break; + ist->dts = ist->next_dts; + switch (par->codec_type) { + case AVMEDIA_TYPE_AUDIO: + av_assert1(pkt->duration >= 0); + if (par->sample_rate) { + ist->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / + par->sample_rate; + } else { + ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); } + break; + case AVMEDIA_TYPE_VIDEO: + if (ist->framerate.num) { + // TODO: Remove work-around for c99-to-c89 issue 7 + AVRational time_base_q = AV_TIME_BASE_Q; + int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate)); + ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); + } else if (pkt->duration) { + ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); + } else if(ist->dec_ctx->framerate.num != 0) { + int fields = (ist->codec_desc && + (ist->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? + ist->last_pkt_repeat_pict + 1 : 2; + AVRational field_rate = av_mul_q(ist->dec_ctx->framerate, + (AVRational){ 2, 1 }); + + ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); + } + break; + } } /* From patchwork Mon May 8 09:17:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41529 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180113pzb; Mon, 8 May 2023 02:18:10 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4ZETHTisE528N0H1cga4zkRaphbBUNexFNJL7SL/fwyvfEroL5wJ2bxznadr2xPf8DvLgx X-Received: by 2002:a05:6402:4405:b0:50b:2088:3533 with SMTP id y5-20020a056402440500b0050b20883533mr9946863eda.1.1683537490383; Mon, 08 May 2023 02:18:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537490; cv=none; d=google.com; s=arc-20160816; b=VkRnltcS3U+er218b9cp17NVHiQgCmxJyTqMMjacIG+6yLqNKakUxcXDHkKoZMFHrp OJkvtbo8zOGvfSuZrpG6Wep8q0NL4MgJvEwqiSOUljW1YXIrubArInZ/orH6Heh5Yv0a BD4704FqtgwSq4D+5NAIWA2ZmlbOi/W6eJwlLGhuMhrZw7A0Q4enRF3g16zgCB7INfnN OSI79Rnhu3I13+uR9Pu9jdZFTEJC3zRfKZx5Qpi0ZEVPYLFWkISsBYrC8vajS9YfE2jE UHqmGhC/Amn25mYA2vYcEBzkZtk0Uahxt77YvQzbp3BZ9BWwTd0kUvLtHHsno+v2w2fy 2j7Q== 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:delivered-to; bh=LcgZmt3zF11nnagmfM+GFhvlaGA1nNiC0BGl9iYWaG8=; b=d3peM33VCrS4w/8L0ypb+Q+99mob3J9e+x4AMM2AXo3qWM+BA7OhVR0GUHIsveLjsd O+9x4b2OxrF8ZSs8aJ77zDCRnt9KeX4yIZqTvXCX6sdVuxei2ZdM0W2SDZ3kxLM037yu FIxFB6D4NcRNxVrd9FS9ARUe1xy7w85vlPk759vH5STFcbXRqd7VugnzQDzg1ZR5edL/ j4rErNV75z5XGROYZ8DSILkVKE1XuNgQl7kNiPNdvnCsZMdxmzycClBu5L+KVW5waDB8 i4ls6FjBzJVqlFJWNRpfB+dHrOltHTXGfsjsh9dpe7mSgtlgzq42yA2/ds/q2QxTqIo5 d7mA== ARC-Authentication-Results: i=1; mx.google.com; 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 c16-20020aa7c990000000b0050ce388a8aesi488352edt.50.2023.05.08.02.18.09; Mon, 08 May 2023 02:18:10 -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; 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 10A2068C11D; Mon, 8 May 2023 12:18:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1831668C0ED for ; Mon, 8 May 2023 12:17:58 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id CDC9F240D1C for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id GkpQlRf3cIpf for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 2E4652404EC for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id D91E23A11B4 for ; Mon, 8 May 2023 11:17:56 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:19 +0200 Message-Id: <20230508091738.20813-3-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/22] fftools/ffmpeg: stop using decoder properties in ist_dts_update() 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: GZjpkzhLl0Gg This code runs post-demuxing and is not synchronized with the decoder output (which may be delayed with respect to its input by arbitrary and unknowable amounts), so accessing any decoder properties is incorrect. --- fftools/ffmpeg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 817b643c48..ca6ff780c3 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1856,7 +1856,7 @@ static void ist_dts_update(InputStream *ist, AVPacket *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->dts = ist->st->avg_frame_rate.num ? - ist->par->video_delay * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; if (pkt->pts != AV_NOPTS_VALUE) { ist->first_dts = ist->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); @@ -1889,11 +1889,11 @@ static void ist_dts_update(InputStream *ist, AVPacket *pkt) ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); } else if (pkt->duration) { ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); - } else if(ist->dec_ctx->framerate.num != 0) { + } else if (ist->par->framerate.num != 0) { int fields = (ist->codec_desc && (ist->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? ist->last_pkt_repeat_pict + 1 : 2; - AVRational field_rate = av_mul_q(ist->dec_ctx->framerate, + AVRational field_rate = av_mul_q(ist->par->framerate, (AVRational){ 2, 1 }); ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); From patchwork Mon May 8 09:17:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41532 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180345pzb; Mon, 8 May 2023 02:18:39 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6FgIEXI11q41xmL8A/AtkKR5Uxvz2gNiZTU+rJmX0bNBqVzuP0ZzOFL5NLlerVgCzZA5Wl X-Received: by 2002:a05:6402:31f6:b0:50c:358:1eba with SMTP id dy22-20020a05640231f600b0050c03581ebamr7085249edb.35.1683537519674; Mon, 08 May 2023 02:18:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537519; cv=none; d=google.com; s=arc-20160816; b=YC5mTeR0Sr/EuERCgFTiYe8pWtYO9/zhJkHKaZV4jLXkST0KXYt8bEt1qqlgURD4QQ uLKnJX6NKRDmm8WW0eYV6thyXpztTUPcqPSUjQRKcjpwx3AkFuQeS8vsssBafbhgiBnU 5a8WcTPbBVCbYNJbDLppqJ/riUln0v7Kf9LgeGFDmc+pVh0Lea4Wu5r1fqvpa3Jsi/9q fqocae1gCofTTlQmqlCc3XZPh6H9bzKuiOVT3dfVeYKzcuhcnYVcMatHsls1xnoHuUHM CV5D6b1eQzI9RDCOU2llMygt9eIriO+4YXPO3qQSl8qsbc49zOKpIQzZVXmmvdHFumF3 ep2A== 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:delivered-to; bh=rgla6Gt0oC9a+euV+YhyFHVtAkdSGrJ7qBCzkiMs79s=; b=c3IaOWkYM4FwMg5CkxLVyVOWz4fsGNDT/XSF/dlCKL1blM2MoZoyuaBhgsm5ugfVoW 7Imm9vdsffPYSnir8xM/nWXf/Q1vaws1ramYJAebgEEDX6uBTzY7bbAbn29Eh1Bisns8 9rSHgURev3GzdfEF+s4VdWojtJ98V7EvGEWzgKRTNuozvZt2nhxvrLXrbC22mbgZqebg MKqXCN8XePj+8RH1an7Ui7DJpoe2YnwW7Z2gYHILgUOB3NLDEMZslzXv2eOCc/jqvSgc Fz+xWoHWQa9REUICDF2M0DEYGR+AQIz4eOFarA8yKbzkvhAv4cUmnKNVI5xOu5DRCjVC YhsA== ARC-Authentication-Results: i=1; mx.google.com; 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 b19-20020aa7cd13000000b0050c060960fbsi7246193edw.6.2023.05.08.02.18.39; Mon, 08 May 2023 02:18:39 -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; 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 6AE0868C16F; Mon, 8 May 2023 12:18:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 27E5B68C0C2 for ; Mon, 8 May 2023 12:18:00 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id E2BD72405B5 for ; Mon, 8 May 2023 11:17:59 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id O878byoX5y_w for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 32B222404F5 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id E4C113A11DB for ; Mon, 8 May 2023 11:17:56 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:20 +0200 Message-Id: <20230508091738.20813-4-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/22] fftools/ffmpeg_demux: move preparing DemuxMsg to separate function 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: vGLei2nsI7Wp Will be useful in following commits, which will move more code into this function. --- fftools/ffmpeg_demux.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 1872e87d57..b16a20a87b 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -257,6 +257,26 @@ static void ts_fixup(Demuxer *d, AVPacket *pkt, int *repeat_pict) SHOW_TS_DEBUG("demuxer+tsfixup"); } +// process an input packet into a message to send to the consumer thread +// src is always cleared by this function +static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src) +{ + AVPacket *pkt; + + pkt = av_packet_alloc(); + if (!pkt) { + av_packet_unref(src); + return AVERROR(ENOMEM); + } + av_packet_move_ref(pkt, src); + + ts_fixup(d, pkt, &msg->repeat_pict); + + msg->pkt = pkt; + + return 0; +} + static void thread_set_name(InputFile *f) { char name[16]; @@ -336,15 +356,10 @@ static void *input_thread(void *arg) } } - ts_fixup(d, pkt, &msg.repeat_pict); - - msg.pkt = av_packet_alloc(); - if (!msg.pkt) { - av_packet_unref(pkt); - ret = AVERROR(ENOMEM); + ret = input_packet_process(d, &msg, pkt); + if (ret < 0) break; - } - av_packet_move_ref(msg.pkt, pkt); + ret = av_thread_message_queue_send(d->in_thread_queue, &msg, flags); if (flags && ret == AVERROR(EAGAIN)) { flags = 0; From patchwork Mon May 8 09:17:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41546 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181362pzb; Mon, 8 May 2023 02:20:41 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6R3IawlPCwV3reb7eYdeD9sjRNcEKvyyH7e1tJB1FJlWa0n596RC3HpHBnk2A/GjrakrQi X-Received: by 2002:a17:907:6eaa:b0:94a:9ae2:1642 with SMTP id sh42-20020a1709076eaa00b0094a9ae21642mr8988530ejc.46.1683537641620; Mon, 08 May 2023 02:20:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537641; cv=none; d=google.com; s=arc-20160816; b=ByJybmGTt8Ax89VGAZX6EDlEPq66oZ/47ZkfWUA4Np5F96T33uF3DhEwz63Q0nZ2/1 EV1Ro3ZWeQtk3XDyX1crmO0XWbcfeyVAojBqnjuP955sNgXw+ZujeTM0r5F8EzfICc+M bL5hfWngO1bEyQswWPQxOsfM5dlIURTH4nNoYDfIXPf2JM8HV/ScjDe6ADfyXv64TdLH 0GvHd2m5j5F8/7oZItULbh/uoSM1DR6hu3pi6lKIbHXfzg1Prh779qKvz++vGfOg1USX Zt9x/+0DfUOaCpUbVYkg8XiUom1iFi1BT361eeakOJTAvFHOYo1l1j0fBKgP+p6zMhf+ ySbg== 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:delivered-to; bh=99uMhhcwLEe2On0ITaxF5jkUE2euJBp4Wa/2vVQCjas=; b=po4N5o2qpYcspnIb4tvEBqt3C/tGDCArQ7kOVgtU6qi1RkxgsO0P0Cmkj89OHHp7QA NRgRKI+oiugoqInSepQ8MUQ2LJRbQZFBdi8IGY+eXf10MdZB97Xd0mKNKmIBmR+SvjbR sHEk6RcVQ/svQ9ZQYpmOMBlruSZ6F1h3Va796WEK2N1xTP+4IYOjZjh+z7/GQmzwAP2a n7xqQlgSfTr24m2rZvBm49Q7ox8qZ5tghmHgTC33yOPGn18SgsZ9nhPGidC07PAD0av+ pP6V+fKFGEzbVg9Amgb2pVLoZT2db8qf2siXD7ipCsInIEPQYclL+TJ2PSBwLPLems0v +dCw== ARC-Authentication-Results: i=1; mx.google.com; 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 kl9-20020a170907994900b0094ae88a6e68si5351915ejc.743.2023.05.08.02.20.41; Mon, 08 May 2023 02:20:41 -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; 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 344F968C1E5; Mon, 8 May 2023 12:18:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C2FCB68C144 for ; Mon, 8 May 2023 12:18:03 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 155952405EC for ; Mon, 8 May 2023 11:18:01 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id rRrYHKfc5cDp for ; Mon, 8 May 2023 11:18:00 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 32E9C2404F8 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id F08FB3A1251 for ; Mon, 8 May 2023 11:17:56 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:21 +0200 Message-Id: <20230508091738.20813-5-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/22] fftools/ffmpeg: attach InputStream.dts to demuxed packets when needed 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: NBwF+Oh+tsjC This way computing it and using it for streamcopy does not need to happen in sync. Will be useful in following commits, where updating InputStream.dts will be moved to the demuxing thread. --- fftools/ffmpeg.c | 22 ++++++++++++++++++++-- fftools/ffmpeg.h | 7 +++++++ fftools/ffmpeg_demux.c | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index ca6ff780c3..2a39d767cd 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1368,6 +1368,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo { InputFile *f = input_files[ist->file_index]; const AVCodecParameters *par = ist->par; + int64_t dts_est = AV_NOPTS_VALUE; int ret = 0; int repeating = 0; int eof_reached = 0; @@ -1463,6 +1464,11 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo if (!pkt && !ist->decoding_needed) eof_reached = 1; + if (pkt && pkt->opaque_ref) { + DemuxPktData *pd = (DemuxPktData*)pkt->opaque_ref->data; + dts_est = pd->dts_est; + } + duration_exceeded = 0; if (f->recording_time != INT64_MAX) { int64_t start_time = 0; @@ -1470,7 +1476,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo start_time += f->start_time != AV_NOPTS_VALUE ? f->start_time : 0; start_time += start_at_zero ? 0 : f->start_time_effective; } - if (ist->dts >= f->recording_time + start_time) + if (dts_est >= f->recording_time + start_time) duration_exceeded = 1; } @@ -1484,7 +1490,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo continue; } - of_streamcopy(ost, pkt, ist->dts); + of_streamcopy(ost, pkt, dts_est); } return !eof_reached; @@ -1900,6 +1906,18 @@ static void ist_dts_update(InputStream *ist, AVPacket *pkt) } break; } + + av_assert0(!pkt->opaque_ref); + if (ist->streamcopy_needed) { + DemuxPktData *pd; + + pkt->opaque_ref = av_buffer_allocz(sizeof(*pd)); + if (!pkt->opaque_ref) + report_and_exit(AVERROR(ENOMEM)); + pd = (DemuxPktData*)pkt->opaque_ref->data; + + pd->dts_est = ist->dts; + } } /* diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index b0319f0ed0..8a5d5b13c8 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -95,6 +95,12 @@ typedef struct { } AudioChannelMap; #endif +typedef struct DemuxPktData { + // estimated dts in AV_TIME_BASE_Q, + // to be used when real dts is missing + int64_t dts_est; +} DemuxPktData; + typedef struct OptionsContext { OptionGroup *g; @@ -337,6 +343,7 @@ typedef struct InputStream { int discard; /* true if stream data should be discarded */ int user_set_discard; int decoding_needed; /* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */ + int streamcopy_needed; #define DECODING_FOR_OST 1 #define DECODING_FOR_FILTER 2 // should attach FrameData as opaque_ref after decoding diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index b16a20a87b..eda838f84c 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -584,6 +584,7 @@ static void ist_use(InputStream *ist, int decoding_needed) ist->discard = 0; ist->st->discard = ist->user_set_discard; ist->decoding_needed |= decoding_needed; + ist->streamcopy_needed |= !decoding_needed; if (decoding_needed && !avcodec_is_open(ist->dec_ctx)) { int ret = dec_open(ist); From patchwork Mon May 8 09:17:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41535 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180436pzb; Mon, 8 May 2023 02:18:48 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6HZUmgXuAS4hGxYTCQX0/uiiA1wTdDcOofW5AsCyxlMIV3+xBPDLPrcrSZllC8Od/FArJq X-Received: by 2002:a05:6402:507:b0:50b:cc52:3fd3 with SMTP id m7-20020a056402050700b0050bcc523fd3mr7436583edv.41.1683537528642; Mon, 08 May 2023 02:18:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537528; cv=none; d=google.com; s=arc-20160816; b=MxAadtWBP7MP//obguIYRnwNMGy8vwB2sDcnxyLswEUXKRn3DYlEoe2gHMoRcbxwDp U3g8qtNtfL3bgJ/4w/O3HkktcX05bLtEmcbYIJKSI9cjV9gi/QRm6DFqzxxkKX4BlJxh RB0OlKWpN6/CTRXbZZEwKYVaKRXs2gdxCCFuBcKolhM+L6pYR/MYDsfkxG3zH6kzoEqm V45vQnplk239sGede3B++NDaMkLOw5z8KibIdZS2zIFngVmVFpOeYuW9S9XO+l1SJ6fV yfdiD/UqrB8vuTHvJLhjh+84psr32MQaDIOcA0qY2L3okCvM+gcBFEE4P89mmYmryqog +csA== 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:delivered-to; bh=Yc/e0qLXKyCdczIANQM8GJ6Ny1npsY+VHhlEXGRSZJA=; b=fulrFjtrneLyrQ+y3+20pXjMtT4itkJX1yDdgVGz87oO6NSV8e1vCmcDDOeVq7xUI1 nd6BSJXamzPcNghWYzbvrqhC61+PCjH6Ctiz5uhNR6PxgwpBk9UTvuGSQodfkaG7awnw S5vP8eaxNNhcLUhxQRUVZaUdeuZ1Nqa2SEf/njTDWvPpIWCZauAAJxXRBHrUzcQnSlBd h08YJaMPhNhCWp27dAyVLZsJ3DH41q6X7gJCNUaQAPka5dn0Z60Hwx2pvo5ptU+f3iW7 dRuWGxaZB9VZJgKTHLo9pls++cBkkV9g96Q3U0+bvRLnMxkdYsEV3fGe60eMZ99FLbE2 SYuA== ARC-Authentication-Results: i=1; mx.google.com; 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 i9-20020aa7c709000000b0050bf6548840si9013893edq.590.2023.05.08.02.18.48; Mon, 08 May 2023 02:18:48 -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; 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 817DD68C119; Mon, 8 May 2023 12:18:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 64D2868C11E for ; Mon, 8 May 2023 12:18:00 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 2EE9B2404F5 for ; Mon, 8 May 2023 11:18:00 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id feJ6SY0PQqWz for ; Mon, 8 May 2023 11:17:58 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 3806E240591 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 0822D3A1267 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:22 +0200 Message-Id: <20230508091738.20813-6-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/22] fftools/ffmpeg: move post-demux packet processing to ffmpeg_demux 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: ywSzHwmIXIbq That is a more appropriate place for this code and will allow hiding more of InputStream. The value of repeat_pict extracted from libavformat internal parser no longer needs to be trasmitted outside of the demuxing thread. Move readrate handling to the demuxer thread. This has to be done in the same commit, since it reads InputStream.dts,nb_packets, which are now set in the demuxer thread. --- fftools/ffmpeg.c | 188 ----------------------------- fftools/ffmpeg.h | 6 - fftools/ffmpeg_demux.c | 266 ++++++++++++++++++++++++++++++++++++----- 3 files changed, 233 insertions(+), 227 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 2a39d767cd..ee92587798 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1772,154 +1772,6 @@ static void decode_flush(InputFile *ifile) } } -static void ts_discontinuity_detect(InputFile *ifile, InputStream *ist, - AVPacket *pkt) -{ - const int fmt_is_discont = ifile->ctx->iformat->flags & AVFMT_TS_DISCONT; - int disable_discontinuity_correction = copy_ts; - int64_t pkt_dts = av_rescale_q_rnd(pkt->dts, pkt->time_base, AV_TIME_BASE_Q, - AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX); - - if (copy_ts && ist->next_dts != AV_NOPTS_VALUE && - fmt_is_discont && ist->st->pts_wrap_bits < 60) { - int64_t wrap_dts = av_rescale_q_rnd(pkt->dts + (1LL<st->pts_wrap_bits), - pkt->time_base, AV_TIME_BASE_Q, - AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); - if (FFABS(wrap_dts - ist->next_dts) < FFABS(pkt_dts - ist->next_dts)/10) - disable_discontinuity_correction = 0; - } - - if (ist->next_dts != AV_NOPTS_VALUE && !disable_discontinuity_correction) { - int64_t delta = pkt_dts - ist->next_dts; - if (fmt_is_discont) { - if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE || - pkt_dts + AV_TIME_BASE/10 < ist->dts) { - ifile->ts_offset_discont -= delta; - av_log(NULL, AV_LOG_WARNING, - "timestamp discontinuity for stream #%d:%d " - "(id=%d, type=%s): %"PRId64", new offset= %"PRId64"\n", - ist->file_index, ist->st->index, ist->st->id, - av_get_media_type_string(ist->par->codec_type), - delta, ifile->ts_offset_discont); - pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); - if (pkt->pts != AV_NOPTS_VALUE) - pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); - } - } else { - if (FFABS(delta) > 1LL * dts_error_threshold * AV_TIME_BASE) { - av_log(NULL, AV_LOG_WARNING, "DTS %"PRId64", next:%"PRId64" st:%d invalid dropping\n", pkt->dts, ist->next_dts, pkt->stream_index); - pkt->dts = AV_NOPTS_VALUE; - } - if (pkt->pts != AV_NOPTS_VALUE){ - int64_t pkt_pts = av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); - delta = pkt_pts - ist->next_dts; - if (FFABS(delta) > 1LL * dts_error_threshold * AV_TIME_BASE) { - av_log(NULL, AV_LOG_WARNING, "PTS %"PRId64", next:%"PRId64" invalid dropping st:%d\n", pkt->pts, ist->next_dts, pkt->stream_index); - pkt->pts = AV_NOPTS_VALUE; - } - } - } - } else if (ist->next_dts == AV_NOPTS_VALUE && !copy_ts && - fmt_is_discont && ifile->last_ts != AV_NOPTS_VALUE) { - int64_t delta = pkt_dts - ifile->last_ts; - if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE) { - ifile->ts_offset_discont -= delta; - av_log(NULL, AV_LOG_DEBUG, - "Inter stream timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", - delta, ifile->ts_offset_discont); - pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); - if (pkt->pts != AV_NOPTS_VALUE) - pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); - } - } - - ifile->last_ts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); -} - -static void ts_discontinuity_process(InputFile *ifile, InputStream *ist, - AVPacket *pkt) -{ - int64_t offset = av_rescale_q(ifile->ts_offset_discont, AV_TIME_BASE_Q, - pkt->time_base); - - // apply previously-detected timestamp-discontinuity offset - // (to all streams, not just audio/video) - if (pkt->dts != AV_NOPTS_VALUE) - pkt->dts += offset; - if (pkt->pts != AV_NOPTS_VALUE) - pkt->pts += offset; - - // detect timestamp discontinuities for audio/video - if ((ist->par->codec_type == AVMEDIA_TYPE_VIDEO || - ist->par->codec_type == AVMEDIA_TYPE_AUDIO) && - pkt->dts != AV_NOPTS_VALUE) - ts_discontinuity_detect(ifile, ist, pkt); -} - -static void ist_dts_update(InputStream *ist, AVPacket *pkt) -{ - const AVCodecParameters *par = ist->par; - - if (!ist->saw_first_ts) { - ist->first_dts = - ist->dts = ist->st->avg_frame_rate.num ? - ist->par->video_delay * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; - if (pkt->pts != AV_NOPTS_VALUE) { - ist->first_dts = - ist->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); - } - ist->saw_first_ts = 1; - } - - if (ist->next_dts == AV_NOPTS_VALUE) - ist->next_dts = ist->dts; - - if (pkt->dts != AV_NOPTS_VALUE) - ist->next_dts = ist->dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); - - ist->dts = ist->next_dts; - switch (par->codec_type) { - case AVMEDIA_TYPE_AUDIO: - av_assert1(pkt->duration >= 0); - if (par->sample_rate) { - ist->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / - par->sample_rate; - } else { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); - } - break; - case AVMEDIA_TYPE_VIDEO: - if (ist->framerate.num) { - // TODO: Remove work-around for c99-to-c89 issue 7 - AVRational time_base_q = AV_TIME_BASE_Q; - int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate)); - ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); - } else if (pkt->duration) { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); - } else if (ist->par->framerate.num != 0) { - int fields = (ist->codec_desc && - (ist->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? - ist->last_pkt_repeat_pict + 1 : 2; - AVRational field_rate = av_mul_q(ist->par->framerate, - (AVRational){ 2, 1 }); - - ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); - } - break; - } - - av_assert0(!pkt->opaque_ref); - if (ist->streamcopy_needed) { - DemuxPktData *pd; - - pkt->opaque_ref = av_buffer_allocz(sizeof(*pd)); - if (!pkt->opaque_ref) - report_and_exit(AVERROR(ENOMEM)); - pd = (DemuxPktData*)pkt->opaque_ref->data; - - pd->dts_est = ist->dts; - } -} - /* * Return * - 0 -- one packet was read and processed @@ -1979,46 +1831,6 @@ static int process_input(int file_index) ist = ifile->streams[pkt->stream_index]; - ist->data_size += pkt->size; - ist->nb_packets++; - - /* add the stream-global side data to the first packet */ - if (ist->nb_packets == 1) { - for (i = 0; i < ist->st->nb_side_data; i++) { - AVPacketSideData *src_sd = &ist->st->side_data[i]; - uint8_t *dst_data; - - if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX) - continue; - - if (av_packet_get_side_data(pkt, src_sd->type, NULL)) - continue; - - dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size); - if (!dst_data) - report_and_exit(AVERROR(ENOMEM)); - - memcpy(dst_data, src_sd->data, src_sd->size); - } - } - - // detect and try to correct for timestamp discontinuities - ts_discontinuity_process(ifile, ist, pkt); - - // update estimated/predicted dts - ist_dts_update(ist, pkt); - - if (debug_ts) { - av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", - ifile->index, pkt->stream_index, - av_get_media_type_string(ist->par->codec_type), - av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &pkt->time_base), - av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &pkt->time_base), - av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, &pkt->time_base), - av_ts2str(input_files[ist->file_index]->ts_offset), - av_ts2timestr(input_files[ist->file_index]->ts_offset, &AV_TIME_BASE_Q)); - } - sub2video_heartbeat(ist, pkt->pts); process_input_packet(ist, pkt, 0); diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 8a5d5b13c8..1900f3deb6 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -380,12 +380,6 @@ typedef struct InputStream { int wrap_correction_done; - // the value of AVCodecParserContext.repeat_pict from the AVStream parser - // for the last packet returned from ifile_get_packet() - // -1 if unknown - // FIXME: this is a hack, the avstream parser should not be used - int last_pkt_repeat_pict; - int64_t filter_in_rescale_delta_last; // when forcing constant input framerate through -r, diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index eda838f84c..9082de6a80 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -92,9 +92,6 @@ typedef struct Demuxer { typedef struct DemuxMsg { AVPacket *pkt; int looping; - - // repeat_pict from the demuxer-internal parser - int repeat_pict; } DemuxMsg; static DemuxStream *ds_from_ist(InputStream *ist) @@ -188,13 +185,167 @@ static int seek_to_start(Demuxer *d) return ret; } -static void ts_fixup(Demuxer *d, AVPacket *pkt, int *repeat_pict) +static void ts_discontinuity_detect(InputFile *ifile, InputStream *ist, + AVPacket *pkt) +{ + const int fmt_is_discont = ifile->ctx->iformat->flags & AVFMT_TS_DISCONT; + int disable_discontinuity_correction = copy_ts; + int64_t pkt_dts = av_rescale_q_rnd(pkt->dts, pkt->time_base, AV_TIME_BASE_Q, + AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX); + + if (copy_ts && ist->next_dts != AV_NOPTS_VALUE && + fmt_is_discont && ist->st->pts_wrap_bits < 60) { + int64_t wrap_dts = av_rescale_q_rnd(pkt->dts + (1LL<st->pts_wrap_bits), + pkt->time_base, AV_TIME_BASE_Q, + AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); + if (FFABS(wrap_dts - ist->next_dts) < FFABS(pkt_dts - ist->next_dts)/10) + disable_discontinuity_correction = 0; + } + + if (ist->next_dts != AV_NOPTS_VALUE && !disable_discontinuity_correction) { + int64_t delta = pkt_dts - ist->next_dts; + if (fmt_is_discont) { + if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE || + pkt_dts + AV_TIME_BASE/10 < ist->dts) { + ifile->ts_offset_discont -= delta; + av_log(NULL, AV_LOG_WARNING, + "timestamp discontinuity for stream #%d:%d " + "(id=%d, type=%s): %"PRId64", new offset= %"PRId64"\n", + ist->file_index, ist->st->index, ist->st->id, + av_get_media_type_string(ist->par->codec_type), + delta, ifile->ts_offset_discont); + pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); + } + } else { + if (FFABS(delta) > 1LL * dts_error_threshold * AV_TIME_BASE) { + av_log(NULL, AV_LOG_WARNING, "DTS %"PRId64", next:%"PRId64" st:%d invalid dropping\n", pkt->dts, ist->next_dts, pkt->stream_index); + pkt->dts = AV_NOPTS_VALUE; + } + if (pkt->pts != AV_NOPTS_VALUE){ + int64_t pkt_pts = av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); + delta = pkt_pts - ist->next_dts; + if (FFABS(delta) > 1LL * dts_error_threshold * AV_TIME_BASE) { + av_log(NULL, AV_LOG_WARNING, "PTS %"PRId64", next:%"PRId64" invalid dropping st:%d\n", pkt->pts, ist->next_dts, pkt->stream_index); + pkt->pts = AV_NOPTS_VALUE; + } + } + } + } else if (ist->next_dts == AV_NOPTS_VALUE && !copy_ts && + fmt_is_discont && ifile->last_ts != AV_NOPTS_VALUE) { + int64_t delta = pkt_dts - ifile->last_ts; + if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE) { + ifile->ts_offset_discont -= delta; + av_log(NULL, AV_LOG_DEBUG, + "Inter stream timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", + delta, ifile->ts_offset_discont); + pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); + } + } + + ifile->last_ts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); +} + +static void ts_discontinuity_process(InputFile *ifile, InputStream *ist, + AVPacket *pkt) +{ + int64_t offset = av_rescale_q(ifile->ts_offset_discont, AV_TIME_BASE_Q, + pkt->time_base); + + // apply previously-detected timestamp-discontinuity offset + // (to all streams, not just audio/video) + if (pkt->dts != AV_NOPTS_VALUE) + pkt->dts += offset; + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts += offset; + + // detect timestamp discontinuities for audio/video + if ((ist->par->codec_type == AVMEDIA_TYPE_VIDEO || + ist->par->codec_type == AVMEDIA_TYPE_AUDIO) && + pkt->dts != AV_NOPTS_VALUE) + ts_discontinuity_detect(ifile, ist, pkt); +} + +static int ist_dts_update(InputStream *ist, AVPacket *pkt) +{ + const AVCodecParameters *par = ist->par; + + if (!ist->saw_first_ts) { + ist->first_dts = + ist->dts = ist->st->avg_frame_rate.num ? - ist->par->video_delay * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; + if (pkt->pts != AV_NOPTS_VALUE) { + ist->first_dts = + ist->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); + } + ist->saw_first_ts = 1; + } + + if (ist->next_dts == AV_NOPTS_VALUE) + ist->next_dts = ist->dts; + + if (pkt->dts != AV_NOPTS_VALUE) + ist->next_dts = ist->dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); + + ist->dts = ist->next_dts; + switch (par->codec_type) { + case AVMEDIA_TYPE_AUDIO: + av_assert1(pkt->duration >= 0); + if (par->sample_rate) { + ist->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / + par->sample_rate; + } else { + ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); + } + break; + case AVMEDIA_TYPE_VIDEO: + if (ist->framerate.num) { + // TODO: Remove work-around for c99-to-c89 issue 7 + AVRational time_base_q = AV_TIME_BASE_Q; + int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate)); + ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); + } else if (pkt->duration) { + ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); + } else if (ist->par->framerate.num != 0) { + AVRational field_rate = av_mul_q(ist->par->framerate, + (AVRational){ 2, 1 }); + int fields = 2; + + if (ist->codec_desc && + (ist->codec_desc->props & AV_CODEC_PROP_FIELDS) && + av_stream_get_parser(ist->st)) + fields = 1 + av_stream_get_parser(ist->st)->repeat_pict; + + ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); + } + break; + } + + av_assert0(!pkt->opaque_ref); + if (ist->streamcopy_needed) { + DemuxPktData *pd; + + pkt->opaque_ref = av_buffer_allocz(sizeof(*pd)); + if (!pkt->opaque_ref) + return AVERROR(ENOMEM); + pd = (DemuxPktData*)pkt->opaque_ref->data; + + pd->dts_est = ist->dts; + } + + return 0; +} + +static int ts_fixup(Demuxer *d, AVPacket *pkt) { InputFile *ifile = &d->f; InputStream *ist = ifile->streams[pkt->stream_index]; DemuxStream *ds = ds_from_ist(ist); const int64_t start_time = ifile->start_time_effective; int64_t duration; + int ret; pkt->time_base = ist->st->time_base; @@ -249,19 +400,27 @@ static void ts_fixup(Demuxer *d, AVPacket *pkt, int *repeat_pict) if (pkt->dts != AV_NOPTS_VALUE) pkt->dts += duration; - *repeat_pict = -1; - if (ist->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && - av_stream_get_parser(ist->st)) - *repeat_pict = av_stream_get_parser(ist->st)->repeat_pict; - SHOW_TS_DEBUG("demuxer+tsfixup"); + + // detect and try to correct for timestamp discontinuities + ts_discontinuity_process(ifile, ist, pkt); + + // update estimated/predicted dts + ret = ist_dts_update(ist, pkt); + if (ret < 0) + return ret; + + return 0; } // process an input packet into a message to send to the consumer thread // src is always cleared by this function static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src) { + InputFile *f = &d->f; + InputStream *ist = f->streams[src->stream_index]; AVPacket *pkt; + int ret = 0; pkt = av_packet_alloc(); if (!pkt) { @@ -270,13 +429,74 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src) } av_packet_move_ref(pkt, src); - ts_fixup(d, pkt, &msg->repeat_pict); + ret = ts_fixup(d, pkt); + if (ret < 0) + goto fail; + + ist->data_size += pkt->size; + ist->nb_packets++; + + /* add the stream-global side data to the first packet */ + if (ist->nb_packets == 1) { + for (int i = 0; i < ist->st->nb_side_data; i++) { + AVPacketSideData *src_sd = &ist->st->side_data[i]; + uint8_t *dst_data; + + if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX) + continue; + + if (av_packet_get_side_data(pkt, src_sd->type, NULL)) + continue; + + dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size); + if (!dst_data) { + ret = AVERROR(ENOMEM); + goto fail; + } + + memcpy(dst_data, src_sd->data, src_sd->size); + } + } + + if (debug_ts) { + av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n", + f->index, pkt->stream_index, + av_get_media_type_string(ist->par->codec_type), + av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &pkt->time_base), + av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &pkt->time_base), + av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, &pkt->time_base), + av_ts2str(input_files[ist->file_index]->ts_offset), + av_ts2timestr(input_files[ist->file_index]->ts_offset, &AV_TIME_BASE_Q)); + } msg->pkt = pkt; + pkt = NULL; + +fail: + av_packet_free(&pkt); return 0; } +static void readrate_sleep(Demuxer *d) +{ + InputFile *f = &d->f; + int64_t file_start = copy_ts * ( + (f->start_time_effective != AV_NOPTS_VALUE ? f->start_time_effective * !start_at_zero : 0) + + (f->start_time != AV_NOPTS_VALUE ? f->start_time : 0) + ); + int64_t burst_until = AV_TIME_BASE * d->readrate_initial_burst; + for (int i = 0; i < f->nb_streams; i++) { + InputStream *ist = f->streams[i]; + int64_t stream_ts_offset, pts, now; + stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); + pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); + now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; + if (pts - burst_until > now) + av_usleep(pts - burst_until - now); + } +} + static void thread_set_name(InputFile *f) { char name[16]; @@ -360,6 +580,9 @@ static void *input_thread(void *arg) if (ret < 0) break; + if (f->readrate) + readrate_sleep(d); + ret = av_thread_message_queue_send(d->in_thread_queue, &msg, flags); if (flags && ret == AVERROR(EAGAIN)) { flags = 0; @@ -456,7 +679,6 @@ fail: int ifile_get_packet(InputFile *f, AVPacket **pkt) { Demuxer *d = demuxer_from_ifile(f); - InputStream *ist; DemuxMsg msg; int ret; @@ -466,25 +688,6 @@ int ifile_get_packet(InputFile *f, AVPacket **pkt) return ret; } - if (f->readrate) { - int i; - int64_t file_start = copy_ts * ( - (f->start_time_effective != AV_NOPTS_VALUE ? f->start_time_effective * !start_at_zero : 0) + - (f->start_time != AV_NOPTS_VALUE ? f->start_time : 0) - ); - int64_t burst_until = AV_TIME_BASE * d->readrate_initial_burst; - for (i = 0; i < f->nb_streams; i++) { - InputStream *ist = f->streams[i]; - int64_t stream_ts_offset, pts, now; - if (!ist->nb_packets) continue; - stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); - pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); - now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; - if (pts - burst_until > now) - return AVERROR(EAGAIN); - } - } - ret = av_thread_message_queue_recv(d->in_thread_queue, &msg, d->non_blocking ? AV_THREAD_MESSAGE_NONBLOCK : 0); @@ -493,9 +696,6 @@ int ifile_get_packet(InputFile *f, AVPacket **pkt) if (msg.looping) return 1; - ist = f->streams[msg.pkt->stream_index]; - ist->last_pkt_repeat_pict = msg.repeat_pict; - *pkt = msg.pkt; return 0; } From patchwork Mon May 8 09:17:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41547 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181415pzb; Mon, 8 May 2023 02:20:50 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4rUPpdO4X1s/soDmdp8LCu9V8udUq2rIVi9YAFvZmUDP9UqwFEPkhgkA0kq20mhxP1DVua X-Received: by 2002:a50:ed99:0:b0:504:8929:71ca with SMTP id h25-20020a50ed99000000b00504892971camr7600206edr.6.1683537650089; Mon, 08 May 2023 02:20:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537650; cv=none; d=google.com; s=arc-20160816; b=t5/YhPhmm0QRJ1GN7DHjlIIFqNE+oF//LOWS9cfE3Ncd1lMAyDTDk+BSvFS6s+qebg B1+sfijtvg7jfbqyJ/AXXBBDO6eP1wnz0lRDhf5Gfukdm9odV5Yterc70RIxGwbYaE94 OdTW5hyQtxDeBxvoPFc8Bc4QDtfJ5jQKjVXzjUrnXvXREd6uUtYFCMEoV9P1IqhkLiPe QRjdsWOJlVlBK7IoG4NPQFHOJwYujdeorkGxEqc07OWb0PphWHrWuPv0619DuOjNmzVZ 2Wwoeg5CJsZtr7qnlURqJJ5cAc/Cqda7x36OZvQ4QefFT1K8G4kPf22xvty3Tfx/aGVQ 1n+Q== 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:delivered-to; bh=MaiIldlaHb46cx1pU9tVq0lKy0kwG0/g0EP5yrEXGTw=; b=HuPr7vePqgltvH53pMV4++vQp5UNulos/uKXuEXIv2E0HIi7BcXFaVO6GkuWXEEAbh 6JbL9OyCxbE0rWTsqFPeyRclFTVAKMu/qdNJwijyJe2yoMCb1lojuIXPkopNgkpJ8xVv nxYNHIWqDrwKll5B5ORhDUaSiKV2PbiItQh6vxk5dRZhuH2bneAczcie3JVQnrYkRzn5 3+wGAdvxAOYoZVk01G6BV3xKAbt4tRZTHLqY8HM0NlWw/1sivHPmzx8ooW+Hg8Ci2qdC JO3fHrpUNllE3mm7LC8F5f5yQQHLXg6a/EMks3rab6JvzNL1vFGTCjrzGAZxYGcYMP2F PV7A== ARC-Authentication-Results: i=1; mx.google.com; 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 d5-20020a056402000500b0050d9bd34e87si1887231edu.325.2023.05.08.02.20.49; Mon, 08 May 2023 02:20:50 -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; 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 1CD2E68C1EA; Mon, 8 May 2023 12:18:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3C93568C0B9 for ; Mon, 8 May 2023 12:18:04 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A54D72406CD for ; Mon, 8 May 2023 11:18:02 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id pS-CqqUqs3oW for ; Mon, 8 May 2023 11:18:02 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 66A422406CB for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 13E013A1506 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:23 +0200 Message-Id: <20230508091738.20813-7-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/22] fftools/ffmpeg_demux: reindent after previous commit 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: Nv7QxncGdpgS --- fftools/ffmpeg_demux.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 9082de6a80..d49bb8317c 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -481,20 +481,20 @@ fail: static void readrate_sleep(Demuxer *d) { InputFile *f = &d->f; - int64_t file_start = copy_ts * ( - (f->start_time_effective != AV_NOPTS_VALUE ? f->start_time_effective * !start_at_zero : 0) + - (f->start_time != AV_NOPTS_VALUE ? f->start_time : 0) - ); - int64_t burst_until = AV_TIME_BASE * d->readrate_initial_burst; - for (int i = 0; i < f->nb_streams; i++) { - InputStream *ist = f->streams[i]; - int64_t stream_ts_offset, pts, now; - stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); - pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); - now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; - if (pts - burst_until > now) - av_usleep(pts - burst_until - now); - } + int64_t file_start = copy_ts * ( + (f->start_time_effective != AV_NOPTS_VALUE ? f->start_time_effective * !start_at_zero : 0) + + (f->start_time != AV_NOPTS_VALUE ? f->start_time : 0) + ); + int64_t burst_until = AV_TIME_BASE * d->readrate_initial_burst; + for (int i = 0; i < f->nb_streams; i++) { + InputStream *ist = f->streams[i]; + int64_t stream_ts_offset, pts, now; + stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); + pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); + now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; + if (pts - burst_until > now) + av_usleep(pts - burst_until - now); + } } static void thread_set_name(InputFile *f) From patchwork Mon May 8 09:17:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41531 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180277pzb; Mon, 8 May 2023 02:18:31 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5Ev1umsIu5VUH+ndp45QM4s1yD0xOF4LSHZY0upXzITIX/HvO0UmU+EbY6tLz2ViA00nPj X-Received: by 2002:a17:907:1622:b0:965:aa65:233f with SMTP id hb34-20020a170907162200b00965aa65233fmr8828801ejc.2.1683537510917; Mon, 08 May 2023 02:18:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537510; cv=none; d=google.com; s=arc-20160816; b=hakKx9aiJbCrdELQevLO9zh7N7HJbpPr0c9j3GOIqLfvEGzU+ufY6gpPHBdfwiut9I GdQ4ZfI7udTJdPGt78w3ObzQgvEjfqeaPiw20fNu6lY3bUU8tPdHR6JJ8vJ5uwS9YIN3 usI9e4ukOEq4ZRrwd2jId7zx7wyhUUbYSaYHlQUgMkSFzFf+ThF01iKKPDD4sB5/qiOV EeHT/Co16Gu2PGxS5vt2ObhoPq2T1D3IkjoH4ouC91NYlUhQtddrq6S1Bjgv5uBWOCTh hGF/FwSGY8q8T9AQT5ePyUSfLuuruKQ1euy1TtaosYP4tiNJS5v+/e4vf5MvGryhGbAW qStg== 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:delivered-to; bh=ozatvNW3n0ywjF7Gp9i+jxE6+seX8qc6gIX50n+ikKs=; b=05fg5pvH7HvT81lR1vc79vPmd5UdD+/Qh/XcW9TTxPigh5D50yLPj0B/KKzBKCrNfT FwbeNUQqpWHJ9P/ZB6ZpnflnEbTd3Pdb0rb3dx3uDuITCgNjb5jPvzaRb1zg/uni3ohW PDIu6J9Hd/pD+Kuph2iJqPZwObJPyqgBDydjNEefAdEAfLrj7fjiHGbeskh8rJzZsKyj 5PoyHKLIJZD0izv4xmh5+e7Qv7i7Qcg1W9FMHOC+QE+WN5ZshtG/LPrs9Zal5wVtLheG hmW3oXiqUiSCAw3ZtkPNcpU9EVFEWuQEMmhdN1JBNojw3Wvbm4lxPD6YSmI8mXwI/N7W 2OCQ== ARC-Authentication-Results: i=1; mx.google.com; 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 p13-20020a1709066a8d00b009655bf7f248si4789006ejr.330.2023.05.08.02.18.30; Mon, 08 May 2023 02:18:30 -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; 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 557F068C168; Mon, 8 May 2023 12:18:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0281068C118 for ; Mon, 8 May 2023 12:17:59 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id BF235240177 for ; Mon, 8 May 2023 11:17:58 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id Pwq05LHQwe6m for ; Mon, 8 May 2023 11:17:58 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 410FF2405B5 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 1F8E93A154F for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:24 +0200 Message-Id: <20230508091738.20813-8-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/22] fftools/ffmpeg: drop unused decode_video() parameter 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: HLmSvpJlg8ZL --- fftools/ffmpeg.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index ee92587798..9cf94f2a22 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1026,7 +1026,7 @@ static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *fr } static int decode_video(InputStream *ist, const AVPacket *pkt, int *got_output, - int64_t *duration_pts, int eof, int *decode_failed) + int eof, int *decode_failed) { AVFrame *decoded_frame = ist->decoded_frame; int ret = 0, err = 0; @@ -1091,7 +1091,6 @@ static int decode_video(InputStream *ist, const AVPacket *pkt, int *got_output, } best_effort_timestamp= decoded_frame->best_effort_timestamp; - *duration_pts = decoded_frame->duration; if (ist->framerate.num) best_effort_timestamp = ist->cfr_next_pts++; @@ -1385,7 +1384,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo // while we have more to decode or while the decoder did output something on EOF while (ist->decoding_needed) { - int64_t duration_pts = 0; int got_output = 0; int decode_failed = 0; @@ -1396,7 +1394,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo av_packet_unref(avpkt); break; case AVMEDIA_TYPE_VIDEO: - ret = decode_video (ist, repeating ? NULL : avpkt, &got_output, &duration_pts, !pkt, + ret = decode_video (ist, repeating ? NULL : avpkt, &got_output, !pkt, &decode_failed); av_packet_unref(avpkt); From patchwork Mon May 8 09:17:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41544 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181240pzb; Mon, 8 May 2023 02:20:24 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6IEV52zfmrxMztfBns6kEV7oIkZcaKw9is6w9fssVEDpdcOq+g8VjKhfpdqA7bBFGppivx X-Received: by 2002:a17:907:2ce1:b0:959:c07b:84e0 with SMTP id hz1-20020a1709072ce100b00959c07b84e0mr9000826ejc.50.1683537624694; Mon, 08 May 2023 02:20:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537624; cv=none; d=google.com; s=arc-20160816; b=HPUlJApr5ZRuvapemGsPHYUMAA3r2z8O9af7Qy6gW69LZPBdqdO+wbioHJIZ2mZpVU t+AYWY2Jo11mcKwjc7eyQ/36VGy8X9u5BHwLNq4DxtjDO6Z1DQeUt4NYyfRd4vGhIY/l t7fRu3BIvz6vgBDqZmCxPO1KykOAtwGdxS7n/hq8eGZtqW/G2FWmeTQ6s+E20iGV71+X lKa6gbdmBWM/W9ZgHO02PiHCMM8g9I9MT85NBLIFJ1oW7oIyJWDTNUbG2gF4TW+hrTKe aM6Jh40IRnX10TpOhgauhkE8uq60Dlb5O6NzuL9Ul2mLcEf586kYqZGr0lRxNSWUUsT3 jiBA== 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:delivered-to; bh=a825XE1sQ6vVi4UvgmLyEWUvLqN45nCSUM4QiPmptWo=; b=nXSXY1HU3sXfGVMNchmWP5O6kS1t8rGatKmDCJ2HgkPUntNETVOmgaq38EPR2SDw6b 1VDhEdBx6kGaSlHBKjLgC/VuyE8lx+1v2XijS9hB03hk8vIiLtyIAXYVK/GliLMC5Vlr qjyUD5dVMX+kl5GyE+ourwZr/xsoBRBm9sK4L4K4jHoWRQYGtyeeUQ6qU/fnB9RVm7Ug UN7ibZ+9TdtALE15KVtXdIKfn3LxaRRqRj3uTE1ZIFUw7lV2AzFHds67z9vbpdXkLbVp xeK63IHVJUxWOE2LuerHJBLvPfDaA74h1OMjrwQfaAjXT6XqmpzGkvyMNaooP1Uoapnv x5aA== ARC-Authentication-Results: i=1; mx.google.com; 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 jg25-20020a170907971900b00965efc3031esi5057987ejc.859.2023.05.08.02.20.24; Mon, 08 May 2023 02:20:24 -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; 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 3302F68C1D8; Mon, 8 May 2023 12:18:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5187568C104 for ; Mon, 8 May 2023 12:18:03 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id B57DB2404EE for ; Mon, 8 May 2023 11:18:00 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id TTW4Td_vmkyJ for ; Mon, 8 May 2023 11:18:00 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 411092405EC for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 2B1223A1571 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:25 +0200 Message-Id: <20230508091738.20813-9-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/22] fftools/ffmpeg_demux: move InputStream.{nb_packets, data_size} to private data 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: gcbl1+xLf0mT They are no longer used outside of ffmpeg_demux. --- fftools/ffmpeg.h | 4 ---- fftools/ffmpeg_demux.c | 19 +++++++++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 1900f3deb6..8e96f27d5d 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -436,10 +436,6 @@ typedef struct InputStream { enum AVPixelFormat hwaccel_pix_fmt; /* stats */ - // combined size of all the packets read - uint64_t data_size; - /* number of packets successfully read for this stream */ - uint64_t nb_packets; // number of frames/samples retrieved from the decoder uint64_t frames_decoded; uint64_t samples_decoded; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index d49bb8317c..3c0d67fe00 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -62,6 +62,11 @@ typedef struct DemuxStream { int64_t min_pts; /* pts with the smallest value in a current stream */ int64_t max_pts; /* pts with the higher value in a current stream */ + + /* number of packets successfully read for this stream */ + uint64_t nb_packets; + // combined size of all the packets read + uint64_t data_size; } DemuxStream; typedef struct Demuxer { @@ -419,6 +424,7 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src) { InputFile *f = &d->f; InputStream *ist = f->streams[src->stream_index]; + DemuxStream *ds = ds_from_ist(ist); AVPacket *pkt; int ret = 0; @@ -433,11 +439,11 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src) if (ret < 0) goto fail; - ist->data_size += pkt->size; - ist->nb_packets++; + ds->data_size += pkt->size; + ds->nb_packets++; /* add the stream-global side data to the first packet */ - if (ist->nb_packets == 1) { + if (ds->nb_packets == 1) { for (int i = 0; i < ist->st->nb_side_data; i++) { AVPacketSideData *src_sd = &ist->st->side_data[i]; uint8_t *dst_data; @@ -710,15 +716,16 @@ static void demux_final_stats(Demuxer *d) for (int j = 0; j < f->nb_streams; j++) { InputStream *ist = f->streams[j]; + DemuxStream *ds = ds_from_ist(ist); enum AVMediaType type = ist->par->codec_type; - total_size += ist->data_size; - total_packets += ist->nb_packets; + total_size += ds->data_size; + total_packets += ds->nb_packets; av_log(f, AV_LOG_VERBOSE, " Input stream #%d:%d (%s): ", f->index, j, av_get_media_type_string(type)); av_log(f, AV_LOG_VERBOSE, "%"PRIu64" packets read (%"PRIu64" bytes); ", - ist->nb_packets, ist->data_size); + ds->nb_packets, ds->data_size); if (ist->decoding_needed) { av_log(f, AV_LOG_VERBOSE, "%"PRIu64" frames decoded", From patchwork Mon May 8 09:17:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41537 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180520pzb; Mon, 8 May 2023 02:18:57 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5TyqhjXjMMO9wD0yt/8hu2I5nWU3p51hW1kgw9zCpV9wzDcy4vymUTejOfu63kBXaeA7xw X-Received: by 2002:a17:907:c1f:b0:961:ba6c:e949 with SMTP id ga31-20020a1709070c1f00b00961ba6ce949mr9627436ejc.68.1683537537656; Mon, 08 May 2023 02:18:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537537; cv=none; d=google.com; s=arc-20160816; b=S+FJG9pGglqCa/gq2O807Ucdeis4p7q2/VWAzozhBI5ZVraGirmxqpzlWvf/37pJmR 81WIcvDGCMtzNAr5Is8LDA9NHhZ/57pU+NCDsqiE6b8Iw/Zv7XPziPRxJy9LRqxAWsMi yrH1KSlVx80kAFyXC8+81z0uUpfKTCyau/GafaaSinovYXnJSoIpkJk3K2xmHl/lhLCo KbRwmtI39JnLXpgjTRi7Zs6NnRYlgC1JQ4GGJ7Kj9HgFje0+9ffb4jFq5heZ6Y0Z76s4 Qrm1PBwDatiNEFh0ylmiPQgj4c1YenMgT01Zth5/1yFylq5A8gijL6B69A7rZFuRum3S /MSw== 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:delivered-to; bh=Sz6JZ4g57xRM/EPZsvSiEBAnhgANa842aP4H41f+vDQ=; b=kk3WGHgWQSMeEWtucvCEAGnppkSiXpYOMGc7TCnF5EiJIOCBDRAuENCjTdafxEzV19 sIUsY0eDJEwW3ILRIhBhf3DLJl5IEPVRDJVNxoNcgohFiMxi0GfI2Nc+ROAAsxphPB1U nTczflnbudc9Y+kyL3DziOop7XCEfKGDvzh11CtAfMYxRL22JA0BNz84LLIeO5LkrdAa Qm93J/9i2ZBSgqSLCicTIAGhTlOsdDqEINQMc4qAwJyMVegBIitTwt9K5ORzz973Tq56 UY5iPmL2HmxKR6RqBZPCEARAYfSIuqETQhPpN0BWQYwn85tvtYqjcIEg6e0g3ETK4PcR jR8Q== ARC-Authentication-Results: i=1; mx.google.com; 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 v5-20020aa7cd45000000b0050bc4575219si8336685edw.607.2023.05.08.02.18.57; Mon, 08 May 2023 02:18:57 -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; 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 7807468C17F; Mon, 8 May 2023 12:18:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A5FC868C130 for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A5E452404EC for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id LXVn6nS8xT80 for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 6825A2406CC for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 3630A3A11B4 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:26 +0200 Message-Id: <20230508091738.20813-10-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/22] fftools/ffmpeg_demux: move InputStream.[saw_]first_d?ts to private data 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: i4zKDN0aeeP0 They are no longer used outside of ffmpeg_demux. --- fftools/ffmpeg.h | 2 -- fftools/ffmpeg_demux.c | 22 ++++++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 8e96f27d5d..e4a697af54 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -367,7 +367,6 @@ 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) // pts/estimated duration of the last decoded frame @@ -388,7 +387,6 @@ typedef struct InputStream { int64_t nb_samples; /* number of samples in the last decoded audio frame before looping */ - int saw_first_ts; AVDictionary *decoder_opts; AVRational framerate; /* framerate forced with -r */ int top_field_first; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 3c0d67fe00..0b27d54870 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -60,6 +60,10 @@ typedef struct DemuxStream { double ts_scale; + int saw_first_ts; + ///< dts of the first packet read for this stream (in AV_TIME_BASE units) + int64_t first_dts; + int64_t min_pts; /* pts with the smallest value in a current stream */ int64_t max_pts; /* pts with the higher value in a current stream */ @@ -274,18 +278,19 @@ static void ts_discontinuity_process(InputFile *ifile, InputStream *ist, ts_discontinuity_detect(ifile, ist, pkt); } -static int ist_dts_update(InputStream *ist, AVPacket *pkt) +static int ist_dts_update(DemuxStream *ds, AVPacket *pkt) { + InputStream *ist = &ds->ist; const AVCodecParameters *par = ist->par; - if (!ist->saw_first_ts) { - ist->first_dts = + if (!ds->saw_first_ts) { + ds->first_dts = ist->dts = ist->st->avg_frame_rate.num ? - ist->par->video_delay * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; if (pkt->pts != AV_NOPTS_VALUE) { - ist->first_dts = + ds->first_dts = ist->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); } - ist->saw_first_ts = 1; + ds->saw_first_ts = 1; } if (ist->next_dts == AV_NOPTS_VALUE) @@ -411,7 +416,7 @@ static int ts_fixup(Demuxer *d, AVPacket *pkt) ts_discontinuity_process(ifile, ist, pkt); // update estimated/predicted dts - ret = ist_dts_update(ist, pkt); + ret = ist_dts_update(ds, pkt); if (ret < 0) return ret; @@ -494,8 +499,9 @@ static void readrate_sleep(Demuxer *d) int64_t burst_until = AV_TIME_BASE * d->readrate_initial_burst; for (int i = 0; i < f->nb_streams; i++) { InputStream *ist = f->streams[i]; + DemuxStream *ds = ds_from_ist(ist); int64_t stream_ts_offset, pts, now; - stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); + stream_ts_offset = FFMAX(ds->first_dts != AV_NOPTS_VALUE ? ds->first_dts : 0, file_start); pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; if (pts - burst_until > now) @@ -976,7 +982,7 @@ static void add_input_streams(const OptionsContext *o, Demuxer *d) ist->discard = 1; st->discard = AVDISCARD_ALL; ist->nb_samples = 0; - ist->first_dts = AV_NOPTS_VALUE; + ds->first_dts = AV_NOPTS_VALUE; ist->next_dts = AV_NOPTS_VALUE; ds->min_pts = INT64_MAX; From patchwork Mon May 8 09:17:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41549 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181540pzb; Mon, 8 May 2023 02:21:08 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5RjKrxvWvhNass3aUnrf/Yk3AWqvk1CyzyrexoeYMcM6Kw+fhgs6aJRg1kyBG01e0U7VSO X-Received: by 2002:a17:907:934a:b0:958:772e:e926 with SMTP id bv10-20020a170907934a00b00958772ee926mr7699231ejc.24.1683537668233; Mon, 08 May 2023 02:21:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537668; cv=none; d=google.com; s=arc-20160816; b=rh3SFW8XCdKOTftuf/Y0woiyEQQ7wDk7qKilRk1qkH0ZzCLnszUZ+Amo9ZruiJVJtP yW/rQXeNKANWiNTa5tQC+CH3Wvp2TsOQtZL+ad2E4mw28ISpYt49sG9eKC9KK3OiNxu7 ZIKxHoR4GBb7uZMBhTzMguvmACwN/6e9EAC5lk2tf3t5m8lxyPpKm0iNMgl58Hy8DoaS 6WtQC4YUA3fCcnykZbLA7QTeme3D7wthX1lzSMRWqMoxsqbH4c9bgvtnoTPHtY/uW4NF Sfe5ucWV753x0Fy6bwvW1XgoXZY+3oYbXUtW8O861OCpA2fGLhNAlvj6VA6hA0vUOvz7 d+Eg== 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:delivered-to; bh=0AvLSxmYx8oTlMQ+bnOguN2H18uVxnnDSYLfelN1i10=; b=z1BnOV/YZGHHfj4spv1fed69j7fV9ap6cdvAsslmOxnPO7vzgxMBZVVEOQ/QB9vCLb R6luI8F44nvAv4jvxtK40weBhAAxG2mBIIxX1JOVvSMcujBemkvArOpE2F3tmjPUMlbe vEQTlwgJepPrZISjPJLift7sbOsB8XRBdUcc+JFLALHPYX8w+rlnVLMLLsM7dBw4FkLd 1t0HJ5rKd+6JaQXePn8GPVE3X49MhvJuz1AZiIOkt1TDiewiAA6KOZ9CrsREupBSOXTh ZxLp7ATv1t51xn67L+9fnHrARxgL7OdOq3HAXnh6mPOUN1z8ZOMymVLvwg6R0cxDxW+v RSow== ARC-Authentication-Results: i=1; mx.google.com; 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 ca2-20020aa7cd62000000b005067c88a41dsi9380579edb.318.2023.05.08.02.21.07; Mon, 08 May 2023 02:21:08 -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; 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 0CFBE68C1F8; Mon, 8 May 2023 12:18:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6004E68C17A for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 0D4852406CB for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id e1QP5PrBG9J4 for ; Mon, 8 May 2023 11:18:00 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 4F1932405F9 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 418603A01C0 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:27 +0200 Message-Id: <20230508091738.20813-11-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/22] fftools/ffmpeg_demux: move InputStream.[next_]dts to private data 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: kImfQPOFTH8Y They are no longer used outside of ffmpeg_demux. --- fftools/ffmpeg.h | 4 --- fftools/ffmpeg_demux.c | 59 +++++++++++++++++++++++++----------------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index e4a697af54..b8c0e7db84 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -364,10 +364,6 @@ typedef struct InputStream { AVRational framerate_guessed; int64_t start; /* time when read started */ - /* 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 dts; ///< dts of the last packet read for this stream (in AV_TIME_BASE units) // pts/estimated duration of the last decoded frame // * in decoder timebase for video, diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 0b27d54870..7e34292b3a 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -64,6 +64,12 @@ typedef struct DemuxStream { ///< dts of the first packet read for this stream (in AV_TIME_BASE units) int64_t first_dts; + /* 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; + ///< dts of the last packet read for this stream (in AV_TIME_BASE units) + int64_t dts; + int64_t min_pts; /* pts with the smallest value in a current stream */ int64_t max_pts; /* pts with the higher value in a current stream */ @@ -197,25 +203,26 @@ static int seek_to_start(Demuxer *d) static void ts_discontinuity_detect(InputFile *ifile, InputStream *ist, AVPacket *pkt) { + DemuxStream *ds = ds_from_ist(ist); const int fmt_is_discont = ifile->ctx->iformat->flags & AVFMT_TS_DISCONT; int disable_discontinuity_correction = copy_ts; int64_t pkt_dts = av_rescale_q_rnd(pkt->dts, pkt->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX); - if (copy_ts && ist->next_dts != AV_NOPTS_VALUE && + if (copy_ts && ds->next_dts != AV_NOPTS_VALUE && fmt_is_discont && ist->st->pts_wrap_bits < 60) { int64_t wrap_dts = av_rescale_q_rnd(pkt->dts + (1LL<st->pts_wrap_bits), pkt->time_base, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); - if (FFABS(wrap_dts - ist->next_dts) < FFABS(pkt_dts - ist->next_dts)/10) + if (FFABS(wrap_dts - ds->next_dts) < FFABS(pkt_dts - ds->next_dts)/10) disable_discontinuity_correction = 0; } - if (ist->next_dts != AV_NOPTS_VALUE && !disable_discontinuity_correction) { - int64_t delta = pkt_dts - ist->next_dts; + if (ds->next_dts != AV_NOPTS_VALUE && !disable_discontinuity_correction) { + int64_t delta = pkt_dts - ds->next_dts; if (fmt_is_discont) { if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE || - pkt_dts + AV_TIME_BASE/10 < ist->dts) { + pkt_dts + AV_TIME_BASE/10 < ds->dts) { ifile->ts_offset_discont -= delta; av_log(NULL, AV_LOG_WARNING, "timestamp discontinuity for stream #%d:%d " @@ -229,19 +236,23 @@ static void ts_discontinuity_detect(InputFile *ifile, InputStream *ist, } } else { if (FFABS(delta) > 1LL * dts_error_threshold * AV_TIME_BASE) { - av_log(NULL, AV_LOG_WARNING, "DTS %"PRId64", next:%"PRId64" st:%d invalid dropping\n", pkt->dts, ist->next_dts, pkt->stream_index); + av_log(NULL, AV_LOG_WARNING, + "DTS %"PRId64", next:%"PRId64" st:%d invalid dropping\n", + pkt->dts, ds->next_dts, pkt->stream_index); pkt->dts = AV_NOPTS_VALUE; } if (pkt->pts != AV_NOPTS_VALUE){ int64_t pkt_pts = av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); - delta = pkt_pts - ist->next_dts; + delta = pkt_pts - ds->next_dts; if (FFABS(delta) > 1LL * dts_error_threshold * AV_TIME_BASE) { - av_log(NULL, AV_LOG_WARNING, "PTS %"PRId64", next:%"PRId64" invalid dropping st:%d\n", pkt->pts, ist->next_dts, pkt->stream_index); + av_log(NULL, AV_LOG_WARNING, + "PTS %"PRId64", next:%"PRId64" invalid dropping st:%d\n", + pkt->pts, ds->next_dts, pkt->stream_index); pkt->pts = AV_NOPTS_VALUE; } } } - } else if (ist->next_dts == AV_NOPTS_VALUE && !copy_ts && + } else if (ds->next_dts == AV_NOPTS_VALUE && !copy_ts && fmt_is_discont && ifile->last_ts != AV_NOPTS_VALUE) { int64_t delta = pkt_dts - ifile->last_ts; if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE) { @@ -285,39 +296,39 @@ static int ist_dts_update(DemuxStream *ds, AVPacket *pkt) if (!ds->saw_first_ts) { ds->first_dts = - ist->dts = ist->st->avg_frame_rate.num ? - ist->par->video_delay * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; + ds->dts = ist->st->avg_frame_rate.num ? - ist->par->video_delay * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0; if (pkt->pts != AV_NOPTS_VALUE) { ds->first_dts = - ist->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); + ds->dts += av_rescale_q(pkt->pts, pkt->time_base, AV_TIME_BASE_Q); } ds->saw_first_ts = 1; } - if (ist->next_dts == AV_NOPTS_VALUE) - ist->next_dts = ist->dts; + if (ds->next_dts == AV_NOPTS_VALUE) + ds->next_dts = ds->dts; if (pkt->dts != AV_NOPTS_VALUE) - ist->next_dts = ist->dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); + ds->next_dts = ds->dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); - ist->dts = ist->next_dts; + ds->dts = ds->next_dts; switch (par->codec_type) { case AVMEDIA_TYPE_AUDIO: av_assert1(pkt->duration >= 0); if (par->sample_rate) { - ist->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / + ds->next_dts += ((int64_t)AV_TIME_BASE * par->frame_size) / par->sample_rate; } else { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); + ds->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); } break; case AVMEDIA_TYPE_VIDEO: if (ist->framerate.num) { // TODO: Remove work-around for c99-to-c89 issue 7 AVRational time_base_q = AV_TIME_BASE_Q; - int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate)); - ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); + int64_t next_dts = av_rescale_q(ds->next_dts, time_base_q, av_inv_q(ist->framerate)); + ds->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q); } else if (pkt->duration) { - ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); + ds->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q); } else if (ist->par->framerate.num != 0) { AVRational field_rate = av_mul_q(ist->par->framerate, (AVRational){ 2, 1 }); @@ -328,7 +339,7 @@ static int ist_dts_update(DemuxStream *ds, AVPacket *pkt) av_stream_get_parser(ist->st)) fields = 1 + av_stream_get_parser(ist->st)->repeat_pict; - ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); + ds->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q); } break; } @@ -342,7 +353,7 @@ static int ist_dts_update(DemuxStream *ds, AVPacket *pkt) return AVERROR(ENOMEM); pd = (DemuxPktData*)pkt->opaque_ref->data; - pd->dts_est = ist->dts; + pd->dts_est = ds->dts; } return 0; @@ -502,7 +513,7 @@ static void readrate_sleep(Demuxer *d) DemuxStream *ds = ds_from_ist(ist); int64_t stream_ts_offset, pts, now; stream_ts_offset = FFMAX(ds->first_dts != AV_NOPTS_VALUE ? ds->first_dts : 0, file_start); - pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); + pts = av_rescale(ds->dts, 1000000, AV_TIME_BASE); now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; if (pts - burst_until > now) av_usleep(pts - burst_until - now); @@ -983,7 +994,7 @@ static void add_input_streams(const OptionsContext *o, Demuxer *d) st->discard = AVDISCARD_ALL; ist->nb_samples = 0; ds->first_dts = AV_NOPTS_VALUE; - ist->next_dts = AV_NOPTS_VALUE; + ds->next_dts = AV_NOPTS_VALUE; ds->min_pts = INT64_MAX; ds->max_pts = INT64_MIN; From patchwork Mon May 8 09:17:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41545 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181304pzb; Mon, 8 May 2023 02:20:33 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7WPNu61TFB1Ej3EJ0QgZ/+mxfvtbh735sVnVB4QiUoZVpPTRqcU4OP6xxtVGIDtNiwH1I+ X-Received: by 2002:aa7:d29a:0:b0:504:81d4:118d with SMTP id w26-20020aa7d29a000000b0050481d4118dmr8186487edq.3.1683537633162; Mon, 08 May 2023 02:20:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537633; cv=none; d=google.com; s=arc-20160816; b=j61ogFibkFgkqKIWstXpWLK5hvtfRFZzYeS0wwz/53Hs9FOUBL5ZDaANptAYd0bfgP XRoDQVKU4A+zB/nezIC/NeinNW0nDyNq0lbjvywJjPAm68iQIaam3/Rufy7woiTiJzQ7 PCAsYLWliKHxVUCT99os1kWOFYRPqS7vOS01MfsLKW33mzbK5QjJm2slGSOrQxx/WFRr i2xITBa9D+mQ0SwcRu3DJkAjjK5hwgJ6y2NRxtwvPVjqKnHn1pA3OOBufrE5djmrCL75 01JG4O4VW3c1JNaZ39CNYdwX+7gZljd3UYUv9uEN6Qdq5yU9rzOvrUvQEGkblWWvnPBI Cf2Q== 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:delivered-to; bh=ux8f7z4tFE2gpYXb0BmImtqnBiTQKL56eAKrFB8Jt7g=; b=R1zwVBECji4PATU5/+427nShJhcXH67hjsyAW9eekYhUpq6qlYAp1t6YvSU7DS6pzc CGjkXdywDXvILA6J7JiVaxGu5/84bqJlCyXd6S0kgV/DgROpcXnSk+Wb6SVufi+Ic0j+ o0130vK0yamAZTNOunDF1Dl53GZOJmM/q1mYO0NoY9ASEtaP3uv1LtcHcytGblu3/zfU s73llXhiEk71PLE+0qqXWAixwPZN7C+2NMwC0flZ7YZZJY5PVVfrXqhyavnslLPXHKCL jOLEeqf+Rwsa4yjHMrQEb4NR81JOcgqO0U0VUC+T4h5GBj3tdkMYBRMPjeCQsZFTUfPe MqXQ== ARC-Authentication-Results: i=1; mx.google.com; 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 o8-20020a056402038800b0050bc4dd2ccbsi8724611edv.168.2023.05.08.02.20.32; Mon, 08 May 2023 02:20:33 -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; 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 33E2668C1E0; Mon, 8 May 2023 12:18:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C58B668C16B for ; Mon, 8 May 2023 12:18:03 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 80D582404F8 for ; Mon, 8 May 2023 11:18:01 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id wnThQOKD1nqF for ; Mon, 8 May 2023 11:18:01 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 5B2852406CA for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 4C21D3A048F for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:28 +0200 Message-Id: <20230508091738.20813-12-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/22] fftools/ffmpeg_demux: move InputStream.wrap_correction_done to private data 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: jyZLIbFWV5wn It is no longer used outside of ffmpeg_demux. --- fftools/ffmpeg.h | 2 -- fftools/ffmpeg_demux.c | 9 +++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index b8c0e7db84..559381531e 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -373,8 +373,6 @@ typedef struct InputStream { AVRational last_frame_tb; int last_frame_sample_rate; - int wrap_correction_done; - int64_t filter_in_rescale_delta_last; // when forcing constant input framerate through -r, diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 7e34292b3a..ff77f90c9e 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -60,6 +60,7 @@ typedef struct DemuxStream { double ts_scale; + int wrap_correction_done; int saw_first_ts; ///< dts of the first packet read for this stream (in AV_TIME_BASE units) int64_t first_dts; @@ -383,21 +384,21 @@ static int ts_fixup(Demuxer *d, AVPacket *pkt) SHOW_TS_DEBUG("demuxer"); - if (!ist->wrap_correction_done && start_time != AV_NOPTS_VALUE && + if (!ds->wrap_correction_done && start_time != AV_NOPTS_VALUE && ist->st->pts_wrap_bits < 64) { int64_t stime, stime2; stime = av_rescale_q(start_time, AV_TIME_BASE_Q, pkt->time_base); stime2= stime + (1ULL<st->pts_wrap_bits); - ist->wrap_correction_done = 1; + ds->wrap_correction_done = 1; if(stime2 > stime && pkt->dts != AV_NOPTS_VALUE && pkt->dts > stime + (1LL<<(ist->st->pts_wrap_bits-1))) { pkt->dts -= 1ULL<st->pts_wrap_bits; - ist->wrap_correction_done = 0; + ds->wrap_correction_done = 0; } if(stime2 > stime && pkt->pts != AV_NOPTS_VALUE && pkt->pts > stime + (1LL<<(ist->st->pts_wrap_bits-1))) { pkt->pts -= 1ULL<st->pts_wrap_bits; - ist->wrap_correction_done = 0; + ds->wrap_correction_done = 0; } } From patchwork Mon May 8 09:17:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41548 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181483pzb; Mon, 8 May 2023 02:20:59 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4zX1jCI5O0tcBtqxZFiQd/UTknJ20glmaFA1lso1YoI6pobMtelaMsf809nlTfAz6+wImF X-Received: by 2002:a05:6402:389:b0:50b:f72f:adf8 with SMTP id o9-20020a056402038900b0050bf72fadf8mr7718472edv.21.1683537659142; Mon, 08 May 2023 02:20:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537659; cv=none; d=google.com; s=arc-20160816; b=YK+ynAa49zQ+oCweHbbgPvgDCFG2RqnaSABuO76oeis9SRx3uDkItAxOr+8Ud5Lnob 8FmQw0hge0YQlDOY6eDnPpdKs6Hk2ReP9r3NIdCn1VgOwAchy+aZzfL3Lj7DB19RTQTN 5Y8LME/R6l2nFT7Ej9pgfLOJx/v931qcQdQHB0dK6Qj5oUqszDoT668V7eEdunNQRtSr cNEoaWzOzQ/c5rhWKN8oC9IVf+pSeRH7ovtNurQRBqZUhm9CbBhU+qYeCEcDBTevmy7r FFL+CBC2N3pf3dSsAygLGs5sttxH8ljEpz5xC7YO3aoX17K/iKDs4QEFaOqy//wWM/v0 P6zw== 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:delivered-to; bh=XQ6buRfSLADFN9Bh7eTdgm4UEGsFHsmPc+WEXGLotrc=; b=LV8tIxIEiZLDAxpd+XA23eKzMqIWEm0IzCSwHpvE74b7FrngJuf2+/5vifbA3C2MOf pa4Hx8fpGN3+AxnyHl+J3p9VdHjXvnjfOebrbGbroTBdu4nOpewBoT0gLPuVDpO4ByD+ Uwe8ZRBy8XaWABggFlwaOZOXV8AmHysx6bqRzCt2pPaBaDJMeqOYTHrPMAPNGTyEgka5 yP2e/Ubh1/Qzb0RBtBmagsTl+TV9V85Nl63w3/svvkhnfFusN6p0KPbjFqlCkthRgQIR oK7OqCjjEjNgx5YehkStaHM43y75IY6KG5pgUpHtvUqdg025KD0XqqGXEH6HqvJHXrtC tv2w== ARC-Authentication-Results: i=1; mx.google.com; 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 e22-20020aa7d7d6000000b0050bd245d39asi8647518eds.160.2023.05.08.02.20.58; Mon, 08 May 2023 02:20:59 -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; 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 0512568C1F1; Mon, 8 May 2023 12:18:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3D2E068C148 for ; Mon, 8 May 2023 12:18:04 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 1ACCF2406CA for ; Mon, 8 May 2023 11:18:02 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id Bti78IfHFOc9 for ; Mon, 8 May 2023 11:18:01 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 683CB2406CD for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 57E693A01C0 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:29 +0200 Message-Id: <20230508091738.20813-13-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 13/22] fftools/ffmpeg_demux: move InputStream.streamcopy_needed to private data 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: E64NqD+2L2yG It is no longer used outside of ffmpeg_demux. --- fftools/ffmpeg.h | 1 - fftools/ffmpeg_demux.c | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 559381531e..7eb6301c74 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -343,7 +343,6 @@ typedef struct InputStream { int discard; /* true if stream data should be discarded */ int user_set_discard; int decoding_needed; /* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */ - int streamcopy_needed; #define DECODING_FOR_OST 1 #define DECODING_FOR_FILTER 2 // should attach FrameData as opaque_ref after decoding diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index ff77f90c9e..d5924c05aa 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -60,6 +60,8 @@ typedef struct DemuxStream { double ts_scale; + int streamcopy_needed; + int wrap_correction_done; int saw_first_ts; ///< dts of the first packet read for this stream (in AV_TIME_BASE units) @@ -346,7 +348,7 @@ static int ist_dts_update(DemuxStream *ds, AVPacket *pkt) } av_assert0(!pkt->opaque_ref); - if (ist->streamcopy_needed) { + if (ds->streamcopy_needed) { DemuxPktData *pd; pkt->opaque_ref = av_buffer_allocz(sizeof(*pd)); @@ -806,10 +808,12 @@ void ifile_close(InputFile **pf) static void ist_use(InputStream *ist, int decoding_needed) { + DemuxStream *ds = ds_from_ist(ist); + ist->discard = 0; ist->st->discard = ist->user_set_discard; ist->decoding_needed |= decoding_needed; - ist->streamcopy_needed |= !decoding_needed; + ds->streamcopy_needed |= !decoding_needed; if (decoding_needed && !avcodec_is_open(ist->dec_ctx)) { int ret = dec_open(ist); From patchwork Mon May 8 09:17:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41550 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181613pzb; Mon, 8 May 2023 02:21:17 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7MruEOcXJ428dAMTkregVpMf0UO1KppR3bBHNnfLGtFnGN9u2MYfrNSGkVuSy7bAUsqrGm X-Received: by 2002:a17:907:783:b0:862:c1d5:ea1b with SMTP id xd3-20020a170907078300b00862c1d5ea1bmr8665302ejb.8.1683537677181; Mon, 08 May 2023 02:21:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537677; cv=none; d=google.com; s=arc-20160816; b=tPPjlYJA7etN7H10sk6Z7SPs9gG/QhYlOoodUnpzIJrAlpwuVAkfV6GoufRBQ6yV7e 3SJnBNFYXnM9X0Nr07JdDKJ1z4rU1NTVIwUo21PChmc3FQly4YMScdUMdb4lwYtPKFmj HQ/2Pqe+B6/55AutDgfqSrk0LgZ+rhAh0TmJgEl62OvoYjcoV+YdZPKYQG/gZK+IlFYI 8ED8edlgRfkQ+4AG0NyXMeN0mwgXQkptj+c3w3Xprw2252ltpEZ7ig3OrlItTfuuU8qd zLNqu56Aq4ImPPMn7B5fF/nOhUIC3VhftYTs7CZhhIANPTbR6uuwFvTknWBKbwqMrZqc e43w== 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:delivered-to; bh=ByymBLPNdd7WyG6XrSCOe2Yv+/lK4mBPhO+lTIkq1gE=; b=VKy9k8eToGTZR4Ux5OzNlZVH0PN9D5FAiqSqhxe6gEcNjYjLu8jzRXAS+JSG4Z8Fxn wFDIAwpQ4XhTiIRYBRDAYn1VcugHIELfSxkME+m1/zkzHNeVkcXWZMq4bLl81ZUXEimo AzzELykfK+jDPnpk8p/25uX74/8qXJSh3Czwzb3I/QOqYFU+h/SO6ReuQRZxpEZVbJ2b VKjTKkfOWm2OjeBPMr6Ts17fGHEDn2vtBItPjDsOoDY9jlKwD/cqbf9AY65r129M5RfQ j7aYZHHN66kD1KoJ8PsTrontaXjU3D8POoEd6Da3/6Nd3nj0Pb/nFkUEWgtCqn5P5LPx +mBQ== ARC-Authentication-Results: i=1; mx.google.com; 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 p23-20020a170906229700b00961454884f0si5093964eja.145.2023.05.08.02.21.16; Mon, 08 May 2023 02:21:17 -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; 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 01BA868C1FE; Mon, 8 May 2023 12:18:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 647F268C17B for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 42AF32405F9 for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id NMSkmhhqrROn for ; Mon, 8 May 2023 11:18:02 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 717092406CE for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 6398B3A11DB for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:30 +0200 Message-Id: <20230508091738.20813-14-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/22] fftools/ffmpeg: simplify tracking -readrate start time 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: QaTfJhwLfs4g There is no point in having a per-stream wallclock start time, since they are all computed at the same instant. Keep a per-file start time instead, initialized when the demuxer thread starts. --- fftools/ffmpeg.c | 8 -------- fftools/ffmpeg.h | 2 -- fftools/ffmpeg_demux.c | 6 +++++- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 9cf94f2a22..40e97ad486 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1498,14 +1498,6 @@ static int transcode_init(void) { int ret = 0; - /* init framerate emulation */ - for (int i = 0; i < nb_input_files; i++) { - InputFile *ifile = input_files[i]; - if (ifile->readrate) - for (int j = 0; j < ifile->nb_streams; j++) - ifile->streams[j]->start = av_gettime_relative(); - } - /* discard unused programs */ for (int i = 0; i < nb_input_files; i++) { InputFile *ifile = input_files[i]; diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 7eb6301c74..d1af94590d 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -362,8 +362,6 @@ typedef struct InputStream { AVRational framerate_guessed; - int64_t start; /* time when read started */ - // pts/estimated duration of the last decoded frame // * in decoder timebase for video, // * in last_frame_tb (may change during decoding) for audio diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index d5924c05aa..1f8f3a73bd 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -88,6 +88,8 @@ typedef struct Demuxer { // name used for logging char log_name[32]; + int64_t wallclock_start; + /* number of times input stream should be looped */ int loop; /* actual duration of the longest stream in a file at the moment when @@ -517,7 +519,7 @@ static void readrate_sleep(Demuxer *d) int64_t stream_ts_offset, pts, now; stream_ts_offset = FFMAX(ds->first_dts != AV_NOPTS_VALUE ? ds->first_dts : 0, file_start); pts = av_rescale(ds->dts, 1000000, AV_TIME_BASE); - now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; + now = (av_gettime_relative() - d->wallclock_start) * f->readrate + stream_ts_offset; if (pts - burst_until > now) av_usleep(pts - burst_until - now); } @@ -546,6 +548,8 @@ static void *input_thread(void *arg) thread_set_name(f); + d->wallclock_start = av_gettime_relative(); + while (1) { DemuxMsg msg = { NULL }; From patchwork Mon May 8 09:17:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41536 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180575pzb; Mon, 8 May 2023 02:19:06 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7f+VWtZEIJSthkhGcfYSLtMSlAyh0sNr7/rfmVG4kkKzUH+kauM7x8rlMsrvzPlAZ+cC7J X-Received: by 2002:a17:906:58d0:b0:961:8fcd:53bc with SMTP id e16-20020a17090658d000b009618fcd53bcmr8691735ejs.21.1683537546308; Mon, 08 May 2023 02:19:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537546; cv=none; d=google.com; s=arc-20160816; b=eQ8T/YIZ2gy45HPSMgG1gGoFcYoEs6tkFBr+rULBMdAI/eeAJ80MTVJdA2KKQkr/BT 9aVWeq3c7koYR/whmOdMUYIk2BgWdJgAAVg/DP0OHjMZdPOHkoKs9sS223cBNL+N6KAe bIQJFBt8LGutSzv0qC8NdkcLRvfLQwX7Kz7+4eHF4gt+EG0NugcW7ZfvSh0HERyZnokk iV9GqfTPESKD8s9cMddE9naRNu6ql8R/c8qBHKlAOIciw3C8HuMqttjERro6EYwtdnvN IzOh2d4+65X2C0o6YaHYbg70neguQkaiifJd8A59Q+TxI4dBzNIuT/P7Rt/J+EqfPfRJ U2UQ== 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:delivered-to; bh=HZf62voTnOPpZlzfmZ/PBCkp27M8SKph5DTMmicgMi0=; b=AGZmvre6RajYFM1jqQ/35gOqGqFx+b97oux+WCTyoKMibGo/IT3EOHDb+6+asYZ31W tpb6hBxmFS9iQmp813ZPzGmPFs6jqoxZPXxiiV5XGF9p7q1F6g+hh8L5nNiFX9plG+rD VEEAy1gsBS+LxHpDpHl1AfRDAlROHdAdgPSt23c0Jao8QcqDNlOgQ3O8Ti9pYnxMy4CT MojG7GueXcZ8uPnW1Q4ejsrmavC3nku0DXuiwWDt3EqR91LxBeVGjYqvMJ8liDWCVZj0 oQpJxfn3c+J+8IEKpjwsVq67PMxVKmcc3FT6mfAHmAJm81vLDkirss1UAiZHeBEmbTH1 nfyA== ARC-Authentication-Results: i=1; mx.google.com; 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 c18-20020aa7c992000000b0050b8cfeecbasi626090edt.517.2023.05.08.02.19.05; Mon, 08 May 2023 02:19:06 -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; 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 798F368C194; Mon, 8 May 2023 12:18:11 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ACF2268C136 for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id CD6432406CC for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id MKpVWlxRU9Wg for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 80FCF2406CF for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 6E6393A048F for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:31 +0200 Message-Id: <20230508091738.20813-15-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 15/22] fftools/ffmpeg: move discarding unused programs to ffmpeg_demux 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: pRxzVU38XZCo This is a more appropriate place for this code. --- fftools/ffmpeg.c | 16 ---------------- fftools/ffmpeg_demux.c | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 40e97ad486..725ffca631 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1498,22 +1498,6 @@ static int transcode_init(void) { int ret = 0; - /* discard unused programs */ - for (int i = 0; i < nb_input_files; i++) { - InputFile *ifile = input_files[i]; - for (int j = 0; j < ifile->ctx->nb_programs; j++) { - AVProgram *p = ifile->ctx->programs[j]; - int discard = AVDISCARD_ALL; - - for (int k = 0; k < p->nb_stream_indexes; k++) - if (!ifile->streams[p->stream_index[k]]->discard) { - discard = AVDISCARD_DEFAULT; - break; - } - p->discard = discard; - } - } - /* dump the stream mapping */ av_log(NULL, AV_LOG_INFO, "Stream mapping:\n"); for (InputStream *ist = ist_iter(NULL); ist; ist = ist_iter(ist)) { diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 1f8f3a73bd..1b268719aa 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -525,6 +525,21 @@ static void readrate_sleep(Demuxer *d) } } +static void discard_unused_programs(InputFile *ifile) +{ + for (int j = 0; j < ifile->ctx->nb_programs; j++) { + AVProgram *p = ifile->ctx->programs[j]; + int discard = AVDISCARD_ALL; + + for (int k = 0; k < p->nb_stream_indexes; k++) + if (!ifile->streams[p->stream_index[k]]->discard) { + discard = AVDISCARD_DEFAULT; + break; + } + p->discard = discard; + } +} + static void thread_set_name(InputFile *f) { char name[16]; @@ -548,6 +563,8 @@ static void *input_thread(void *arg) thread_set_name(f); + discard_unused_programs(f); + d->wallclock_start = av_gettime_relative(); while (1) { From patchwork Mon May 8 09:17:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41539 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180744pzb; Mon, 8 May 2023 02:19:23 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7+X+xDxYOF46HOlHiJeAh+XPt5EOjvOMtxO/IFh9zFrnYY/AerTFjbGIAiOVUbnMKKfUd4 X-Received: by 2002:a17:907:3d90:b0:968:236:eb17 with SMTP id he16-20020a1709073d9000b009680236eb17mr1182638ejc.24.1683537563629; Mon, 08 May 2023 02:19:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537563; cv=none; d=google.com; s=arc-20160816; b=JR6ma+9Ya4i3IFwxdZdCU8E2k/bEk5LMRYklXglnX+Q4E0MTMKV1+zrj9xHn2uZoPZ l4swYzRPpzV++YXOZFluGBZXWji1pCFdKzVgAaTpfp3tlwP9ySPnuOpzODxPuM0SSaim lm15M0sN4QMS0EKxEnMfggOVQdpMu6i/8wcdRc51ETJJPHTOUslRa7A+o7t+Pl7b6IQb udLiXFGV/mJuigRiRCBYkkyEjH/WEMdQPkGXlerrDqumM5swvLWRnOMhwUlTu3gBg7I1 HArcVZq0s/paqvZPAbkpL8sVui6IXcyphVG/zdjOGrJbLTikR4YQcakXyqbpdech55ES I/bA== 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:delivered-to; bh=JgYSEhwYaCC4Xajf5stHGPR8TsXHvFLxfD82fn6NaWg=; b=TAUDwTad8dA6cxdI2muJC5xVyqbmZAhBP96oNRWPzrHWsbnaaylaoA+3ehCxLuWvwo bqO4BKyNr+WbSgAHPYK6Uru6D+UhVDiqjBC6LmWdGJK286/qlNfDhwB0Tr3k+UjCZknV tD/OFn/62Wl1BgD2WMij4+8mxDiEcpbJbMQ79mSpFlLgaethbY8Nj/l8IvNd2W252TqI EexwZlOfj7pcL3aXATdk8dgpS5SJt+eYQP3viQ8IczODU094SH3IyTJaajT0vggmKSHG TvfDRvVx8qBpvkeJ1fPJEEY9yBsvph3chJJb1SIID4cwbC6/25IOHXCnFBxEf0KpCCSN FRWw== ARC-Authentication-Results: i=1; mx.google.com; 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 my5-20020a1709065a4500b0094f50e7bbb2si4943334ejc.660.2023.05.08.02.19.23; Mon, 08 May 2023 02:19:23 -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; 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 019DB68C178; Mon, 8 May 2023 12:18:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E1DA368C13D for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 27820240177 for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id jOUA6TeKgRZw for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 89DE82406D0 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 7953F3A01C0 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:32 +0200 Message-Id: <20230508091738.20813-16-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 16/22] fftools/ffmpeg_demux: reindent after previous commit 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: YOS+gcZQpxn1 --- fftools/ffmpeg_demux.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 1b268719aa..4b1e7e5254 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -527,17 +527,17 @@ static void readrate_sleep(Demuxer *d) static void discard_unused_programs(InputFile *ifile) { - for (int j = 0; j < ifile->ctx->nb_programs; j++) { - AVProgram *p = ifile->ctx->programs[j]; - int discard = AVDISCARD_ALL; + for (int j = 0; j < ifile->ctx->nb_programs; j++) { + AVProgram *p = ifile->ctx->programs[j]; + int discard = AVDISCARD_ALL; - for (int k = 0; k < p->nb_stream_indexes; k++) - if (!ifile->streams[p->stream_index[k]]->discard) { - discard = AVDISCARD_DEFAULT; - break; - } - p->discard = discard; - } + for (int k = 0; k < p->nb_stream_indexes; k++) + if (!ifile->streams[p->stream_index[k]]->discard) { + discard = AVDISCARD_DEFAULT; + break; + } + p->discard = discard; + } } static void thread_set_name(InputFile *f) From patchwork Mon May 8 09:17:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41538 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180658pzb; Mon, 8 May 2023 02:19:15 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6v5+WW9iRuGrLiCspMsYUxU46vfJ9R/FVp3wP0NjjKoSb66aNMHZaNnuOBMBaYpYsUrst1 X-Received: by 2002:a17:907:961d:b0:966:6056:a7c1 with SMTP id gb29-20020a170907961d00b009666056a7c1mr2974294ejc.74.1683537554823; Mon, 08 May 2023 02:19:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537554; cv=none; d=google.com; s=arc-20160816; b=JkZCHoFgo6OLFmAHyYmU4bnmJxBYVZoqqDkIFJ5hvaRKWgeeJpL/unK3TnvxewDQ9u v9vh5DPg4bTgJ5g1DtGcjT/jZ+gX94Yp79REKFg3crWzAwBzKs8VlZDOTCYlDH1N6pyM 9mt5oKkI/88AgcaksMpdHQRpHsNRWtGxrvStYWY8gKdV4VCXpR7mv5WG7ZwDQ7OjEL/Q yZiaIeHaCUWTDjn+sGaoYQPXBENLYOtfMdfImnL916e/KXBzk0UXJlI7HOjd1HAQ2rmG BxNidnrFhPdD/7MO+etJJNlG51OOFpQunSWyllD6nTI7C4y5+4lxNacvMoKiJ83w98+B yFmA== 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:delivered-to; bh=hKUavQdYMrn0lTZL2EoWzqtat2PcJQ712lXpAHlXWj4=; b=c1HJLz/zmCSJsGHEwN31o5bbckjDk7ff3XYBD70QNRJhnwGvxawSc149y4c0mXnFg7 3a4yR1UmRQayNsnjCSi3HOYK8COSjNhYI7oETGDY6QsZSbRFL7CpB+IuCb5m9eMWg/Xr 6/XFx7xlzks+Qw7CB/qSKPUMSFemyJ5oQqDnh9KSGXEbxP4A7VnTrkwe3LmSiAowcJ8U F4i20XqcZROX1XuGbrNXHHq8oznNG5GMWSI6unBdIrTjIzy6bYd5WVgVVU2zvVd7ebjB OMAjnA8gWgWtUDSeHRmDoDeyDINGVyqsY+CsUk2FqHvKNiLkdOGeXSpA/f4QnUdp13n/ Xrhw== ARC-Authentication-Results: i=1; mx.google.com; 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 z9-20020a1709067e4900b009538c4f45c8si5410686ejr.598.2023.05.08.02.19.14; Mon, 08 May 2023 02:19:14 -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; 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 8519968C17B; Mon, 8 May 2023 12:18:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E0B8668C136 for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 531F12406CE for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id hSQmLtmu2u9T for ; Mon, 8 May 2023 11:18:03 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 92648240705 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 84CD63A11B4 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:33 +0200 Message-Id: <20230508091738.20813-17-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 17/22] fftools/ffmpeg: replace print_error() by more meaningful messages 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: iUtu/wn2iDyg --- fftools/ffmpeg.c | 5 ++--- fftools/ffmpeg_demux.c | 3 ++- fftools/ffmpeg_mux.c | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 725ffca631..981714d027 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1756,12 +1756,10 @@ static void decode_flush(InputFile *ifile) static int process_input(int file_index) { InputFile *ifile = input_files[file_index]; - AVFormatContext *is; InputStream *ist; AVPacket *pkt; int ret, i; - is = ifile->ctx; ret = ifile_get_packet(ifile, &pkt); if (ret == AVERROR(EAGAIN)) { @@ -1775,7 +1773,8 @@ static int process_input(int file_index) } if (ret < 0) { if (ret != AVERROR_EOF) { - print_error(is->url, ret); + av_log(ifile, AV_LOG_ERROR, + "Error retrieving a packet from demuxer: %s\n", av_err2str(ret)); if (exit_on_error) exit_program(1); } diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 4b1e7e5254..1d596d1b29 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -1405,7 +1405,8 @@ int ifile_open(const OptionsContext *o, const char *filename) /* open the input file with generic avformat function */ err = avformat_open_input(&ic, filename, file_iformat, &o->g->format_opts); if (err < 0) { - print_error(filename, err); + av_log(d, AV_LOG_ERROR, + "Error opening input: %s\n", av_err2str(err)); if (err == AVERROR_PROTOCOL_NOT_FOUND) av_log(d, AV_LOG_ERROR, "Did you mean file:%s?\n", filename); exit_program(1); diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index afcd4df99b..36ed482072 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -139,7 +139,9 @@ static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt) ret = av_interleaved_write_frame(s, pkt); if (ret < 0) { - print_error("av_interleaved_write_frame()", ret); + av_log(ost, AV_LOG_ERROR, + "Error submitting a packet to the muxer: %s\n", + av_err2str(ret)); goto fail; } From patchwork Mon May 8 09:17:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41541 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180903pzb; Mon, 8 May 2023 02:19:41 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7q9IBOTctcmqOHNZQO3JJNew4z5oHQ6HEmFnLmAbq+/s2SdxL+HR8XfuhwAWFM63r+EiDc X-Received: by 2002:a17:906:d552:b0:953:4481:3301 with SMTP id cr18-20020a170906d55200b0095344813301mr8280965ejc.59.1683537580753; Mon, 08 May 2023 02:19:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537580; cv=none; d=google.com; s=arc-20160816; b=leP5cpmHfLphbk07SpQhGPOt7YGE+rAaIzvos8nBs7u55PNEEtaGyUOKECzaUvGYa5 vZ3emAsFvkU/XpM9MFK5FgXR00eABJFwKGxG9JLL/Avxxw4WLBC+jv9xRGDeDHCF0paz WT36pp8wc8ugpdYWoF/mFu4mYFA1k/0dgCTmAnxHgJpmcvezhqAs0ENacekrqWNZt7qY UN/JkTBIS5cUmj5pYIEBaeFIYT8v6BvtRrbft5JWvSSYmPN43Q9PPF/zVFBfk4S7BOke p0IBmzOVgDhYlXijxGRcY55sOGn7uTLc+vWX3DcT0ZD4ISC3lr2Qv6Tij9vT2lK7Z7QK eLCg== 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:delivered-to; bh=/RjTDYxH2JoQP7RkQxFCk/qOApCVO3L3o5isFnWsxx8=; b=UaZOR97AZkTxrIoKjNdKHCPhy1zr+FTtbFOLke/iQj8AWzJipFBqr3PbOIDTnZyLV7 9MS2aTOk6lyqWc1QHzPp3lnheeInKqxrMkjoOYt4c4qqvdvLnnRJpaWLb35GgbZdI/B6 bhVRBbQK+zYUCIaPbyQDSSB98zeQ/dW15OGVWg1wifGrVMxP8nf0aQv6ZGas6zDCB7qE VLps+YLXY6JejqSI9OooiMe0nrluEVYjw5tiKbCPFaQZxmEfOlvsNhAzjm9gVDgDn6a8 7nKzKo7j2aGeFVFkrIqi1SOu3B837WKYZ4u/nX3eDZspXlwH2Bc3Tk+elo4K8tDRk7ad 7VzQ== ARC-Authentication-Results: i=1; mx.google.com; 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 h3-20020a170906718300b0095723b2b32csi4913622ejk.182.2023.05.08.02.19.40; Mon, 08 May 2023 02:19:40 -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; 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 F39FE68C1A7; Mon, 8 May 2023 12:18:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E776868C140 for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 86F9A2406CF for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id qL_QxBlGrUgK for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id 9E21B240706 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 8FC1F3A048F for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:34 +0200 Message-Id: <20230508091738.20813-18-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 18/22] fftools/ffmpeg: log corrupt-frame errors to the appropriate context 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: XvbtLAJAqDGS --- fftools/ffmpeg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 981714d027..092c5e179a 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -779,8 +779,8 @@ static void check_decode_result(InputStream *ist, int *got_output, int ret) if (*got_output && ist) { if (ist->decoded_frame->decode_error_flags || (ist->decoded_frame->flags & AV_FRAME_FLAG_CORRUPT)) { - av_log(NULL, exit_on_error ? AV_LOG_FATAL : AV_LOG_WARNING, - "%s: corrupt decoded frame in stream %d\n", input_files[ist->file_index]->ctx->url, ist->st->index); + av_log(ist, exit_on_error ? AV_LOG_FATAL : AV_LOG_WARNING, + "corrupt decoded frame\n"); if (exit_on_error) exit_program(1); } From patchwork Mon May 8 09:17:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41540 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180836pzb; Mon, 8 May 2023 02:19:32 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5meCQ09nlrsao/+YZIOiw//ZK1ifqjpwicFRzZvFPZCW9MkDD0NWFNJselNvnYYeiQXRh9 X-Received: by 2002:a17:906:4fd1:b0:959:8575:2635 with SMTP id i17-20020a1709064fd100b0095985752635mr8788994ejw.17.1683537572208; Mon, 08 May 2023 02:19:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537572; cv=none; d=google.com; s=arc-20160816; b=LZOIB1y26VVKovg0yx+O9Jdu96zb3nZJps++3ae4CO6ndcTHtgWhGxYk2OOklan02n IV0MWs+blbwFerA30Tpc8KrkCvUDLFeI0b7erLA0c16ihGQX0Qm5cAPVpaDV4M+4hFMi V+71xdzWgPAfXNUtHzzc67FN9TYV/L1E1Yuu3EN0396BkgMnUBTsTGnyIVVQ5ilWYR7n JeIKkEXpVdMv4AbKzVvUWqn9nlWz3+rgMiY3FGCvA1mQADvrvbrYK5R2LX3cae7yZ+yK /K9NjNPuA0u1CiErVherAmmy3+X7tqLFzH6M4Nwyk5QKYGmZPa7OCSVs3iw/HeR92Ish rVmg== 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:delivered-to; bh=fUrCw+wP3AkpKaXyEicpwEroIk8mqQfbEfKH27S/u1w=; b=0v4QKWSbOG9pThhL5tX4oaZCmzHFvnWFnY5gGrE+f/ckUaNsx8TqjZ9qdKnn+oBIVm SV3Py45CZfIfDcxKR5Ps/wbBkRFvN9Jb4dg4HPpmGhoiK3AJpdUNuX2YYy1m443v4pff uO3KOSmzojhss+99oTEQqhKraA3TrrTyi/7v2+u0JTLmRKmuXQgwk/X9jp48qsSp8tDr zsMsRGf5cEtwxYRGZFqzEM7ZwyazA8x5Iv4lxd88grNN460TQ/hOREVMLSw8SMqT7Roc RG+TYLLyt2rWR41j0VbtKQZHrNzR80CmH2BFT2TQEg6GAHQgU+g0m0r+dFIk6IcvQupP Bdjg== ARC-Authentication-Results: i=1; mx.google.com; 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 hr14-20020a1709073f8e00b009665ac84e4csi1779537ejc.34.2023.05.08.02.19.31; Mon, 08 May 2023 02:19:32 -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; 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 0A9B068C1A1; Mon, 8 May 2023 12:18:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EE03968C143 for ; Mon, 8 May 2023 12:18:05 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id E3DC02406D0 for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id PybNbrDaNPwE for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id AB030240D03 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 9B3B13A01C0 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:35 +0200 Message-Id: <20230508091738.20813-19-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 19/22] fftools/ffmpeg: stop accessing input format from decoding code 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: 4l9LPN4HV+lz Export the corresponding flag in InputFile instead. This will allow making the demuxer AVFormatContext private in future commits, similarly to what was previously done for muxers. --- fftools/ffmpeg.c | 5 ++--- fftools/ffmpeg.h | 3 +++ fftools/ffmpeg_demux.c | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 092c5e179a..45efa75047 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -976,7 +976,6 @@ static int decode_audio(InputStream *ist, const AVPacket *pkt, int *got_output, static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *frame) { const InputFile *ifile = input_files[ist->file_index]; - const int container_nots = !!(ifile->ctx->iformat->flags & AVFMT_NOTIMESTAMPS); int64_t codec_duration = 0; // XXX lavf currently makes up frame durations when they are not provided by @@ -986,7 +985,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 && !container_nots) + if (frame->duration > 0 && !ifile->format_nots) return frame->duration; if (ist->dec_ctx->framerate.den && ist->dec_ctx->framerate.num) { @@ -998,7 +997,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 && container_nots) + if (codec_duration > 0 && ifile->format_nots) return codec_duration; // when timestamps are available, repeat last frame's actual duration diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index d1af94590d..5863ca1faf 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -442,6 +442,9 @@ typedef struct InputFile { int index; + // input format has no timestamps + int format_nots; + AVFormatContext *ctx; int eof_reached; /* true if eof reached */ int eagain; /* true if last read attempt returned EAGAIN */ diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 1d596d1b29..2882f4308a 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -1504,6 +1504,8 @@ int ifile_open(const OptionsContext *o, const char *filename) d->duration = 0; d->time_base = (AVRational){ 1, 1 }; + f->format_nots = !!(ic->iformat->flags & AVFMT_NOTIMESTAMPS); + f->readrate = o->readrate ? o->readrate : 0.0; if (f->readrate < 0.0f) { av_log(d, AV_LOG_ERROR, "Option -readrate is %0.3f; it must be non-negative.\n", f->readrate); From patchwork Mon May 8 09:17:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41542 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181104pzb; Mon, 8 May 2023 02:20:07 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7ntd3mrLp+fRVejkDQ327ucEJxmETrNqfFEQqHCq2tT5Yn24oQW9DliHaq6iD/pZsy0jPc X-Received: by 2002:a17:907:c1b:b0:94f:31da:8c38 with SMTP id ga27-20020a1709070c1b00b0094f31da8c38mr8229578ejc.24.1683537606897; Mon, 08 May 2023 02:20:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537606; cv=none; d=google.com; s=arc-20160816; b=uXB8yx3QOfsw2uxLfL+zA2blRqrl3Ee1iPV+nFoIM6UGtTAXo9dM7v3o2KLEouMEqM uANcveSR9CzVHooVyd+wvgx6nzJwxe4yFxezXprYd5yyTJBQVsZpIJD7k/mwbpy6USuQ XGP/oqMfpZMsjK/thc9T1aJvqORmx1bSKH2RY9t4iAUXZ5nXx9oTIbxl0p4+ME8gHHLU 2zqWAamcyQR4dPXonyu4HoNS+U3fVvb5PHqaFNB6mRcFVgvMJ7JAuIk+Je2D4AhHwiAf HTytwpwmp1mdFs/akS0ygQDkxUf9vN1WZE7ttFLHysdpBdAG8/pt0UV43eOZQTo0UWDa IdEw== 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:delivered-to; bh=7eztSrpFCUgvNYwsmD0U2HXxSYeSlHC7GTVdHuDI9ME=; b=Za+bRQcpiyLiBLIcyCNOiS3spd0T4qw27wnDwFh/fHUKhccPDpsJRxbOSzl5UQxl5E dPmBiXoDzSwpEtvCAWLAhydyninkeJSJ1ApN5PUkZcA748cVYhMZqSBMdV+QcgYP/G8F 6QF7dV4N4R7Mosb4se7wHPWKpF9UoOzoUgM1eTeWOVaTVw1jhHwsldgQPJZrAhfD9yhe gccXRzxtB37zov/84C4wyEFIvy0eNWUr3uOn5hPKCnZKMg8D0MCEKGV6XP2RSuXiPt+V SksUWIabkCFmiZ/ve3IMWvDZ7eyzCnIIptFb2IP8P6SrTAJYUsC+mHcxxDM9SK4WBpWQ a2tg== ARC-Authentication-Results: i=1; mx.google.com; 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 l14-20020a170906938e00b0095382d71c52si5474218ejx.880.2023.05.08.02.20.06; Mon, 08 May 2023 02:20:06 -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; 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 1AC0C68C1B7; Mon, 8 May 2023 12:18:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 34DBD68C143 for ; Mon, 8 May 2023 12:18:06 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 343C42405B5 for ; Mon, 8 May 2023 11:18:05 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ysEPbuLSLHj3 for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id B3455240D0E for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id A60723A048F for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:36 +0200 Message-Id: <20230508091738.20813-20-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 20/22] fftools/ffmpeg_demux: move InputFile.ts_offset_discont, last_ts to private data 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: jkFRaBJU3JKg They are no longer used outside of ffmpeg_demux. --- fftools/ffmpeg.h | 5 ----- fftools/ffmpeg_demux.c | 31 +++++++++++++++++++------------ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 5863ca1faf..f88792d7eb 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -455,11 +455,6 @@ typedef struct InputFile { */ int64_t start_time_effective; int64_t ts_offset; - /** - * Extra timestamp offset added by discontinuity handling. - */ - int64_t ts_offset_discont; - int64_t last_ts; int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */ int64_t recording_time; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 2882f4308a..461f819e9e 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -90,6 +90,12 @@ typedef struct Demuxer { int64_t wallclock_start; + /** + * Extra timestamp offset added by discontinuity handling. + */ + int64_t ts_offset_discont; + int64_t last_ts; + /* number of times input stream should be looped */ int loop; /* actual duration of the longest stream in a file at the moment when @@ -205,9 +211,10 @@ static int seek_to_start(Demuxer *d) return ret; } -static void ts_discontinuity_detect(InputFile *ifile, InputStream *ist, +static void ts_discontinuity_detect(Demuxer *d, InputStream *ist, AVPacket *pkt) { + InputFile *ifile = &d->f; DemuxStream *ds = ds_from_ist(ist); const int fmt_is_discont = ifile->ctx->iformat->flags & AVFMT_TS_DISCONT; int disable_discontinuity_correction = copy_ts; @@ -228,13 +235,13 @@ static void ts_discontinuity_detect(InputFile *ifile, InputStream *ist, if (fmt_is_discont) { if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE || pkt_dts + AV_TIME_BASE/10 < ds->dts) { - ifile->ts_offset_discont -= delta; + d->ts_offset_discont -= delta; av_log(NULL, AV_LOG_WARNING, "timestamp discontinuity for stream #%d:%d " "(id=%d, type=%s): %"PRId64", new offset= %"PRId64"\n", ist->file_index, ist->st->index, ist->st->id, av_get_media_type_string(ist->par->codec_type), - delta, ifile->ts_offset_discont); + delta, d->ts_offset_discont); pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); if (pkt->pts != AV_NOPTS_VALUE) pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); @@ -258,26 +265,26 @@ static void ts_discontinuity_detect(InputFile *ifile, InputStream *ist, } } } else if (ds->next_dts == AV_NOPTS_VALUE && !copy_ts && - fmt_is_discont && ifile->last_ts != AV_NOPTS_VALUE) { - int64_t delta = pkt_dts - ifile->last_ts; + fmt_is_discont && d->last_ts != AV_NOPTS_VALUE) { + int64_t delta = pkt_dts - d->last_ts; if (FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE) { - ifile->ts_offset_discont -= delta; + d->ts_offset_discont -= delta; av_log(NULL, AV_LOG_DEBUG, "Inter stream timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", - delta, ifile->ts_offset_discont); + delta, d->ts_offset_discont); pkt->dts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); if (pkt->pts != AV_NOPTS_VALUE) pkt->pts -= av_rescale_q(delta, AV_TIME_BASE_Q, pkt->time_base); } } - ifile->last_ts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); + d->last_ts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q); } -static void ts_discontinuity_process(InputFile *ifile, InputStream *ist, +static void ts_discontinuity_process(Demuxer *d, InputStream *ist, AVPacket *pkt) { - int64_t offset = av_rescale_q(ifile->ts_offset_discont, AV_TIME_BASE_Q, + int64_t offset = av_rescale_q(d->ts_offset_discont, AV_TIME_BASE_Q, pkt->time_base); // apply previously-detected timestamp-discontinuity offset @@ -291,7 +298,7 @@ static void ts_discontinuity_process(InputFile *ifile, InputStream *ist, if ((ist->par->codec_type == AVMEDIA_TYPE_VIDEO || ist->par->codec_type == AVMEDIA_TYPE_AUDIO) && pkt->dts != AV_NOPTS_VALUE) - ts_discontinuity_detect(ifile, ist, pkt); + ts_discontinuity_detect(d, ist, pkt); } static int ist_dts_update(DemuxStream *ds, AVPacket *pkt) @@ -429,7 +436,7 @@ static int ts_fixup(Demuxer *d, AVPacket *pkt) SHOW_TS_DEBUG("demuxer+tsfixup"); // detect and try to correct for timestamp discontinuities - ts_discontinuity_process(ifile, ist, pkt); + ts_discontinuity_process(d, ist, pkt); // update estimated/predicted dts ret = ist_dts_update(ds, pkt); From patchwork Mon May 8 09:17:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41533 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2180967pzb; Mon, 8 May 2023 02:19:49 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5VM2Gq9DO5UPH7TV0xCRfJLC5SHLCp6iOTo39VQXWU3PPL+hDMeh7PLSl9u5qFMi7YSdFp X-Received: by 2002:a17:907:7d88:b0:967:2595:b099 with SMTP id oz8-20020a1709077d8800b009672595b099mr1419467ejc.28.1683537589135; Mon, 08 May 2023 02:19:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537589; cv=none; d=google.com; s=arc-20160816; b=0PsZea9HxPrtpCE7NMgaAmAudPQMHzBy26N4MgZ1rAfMlpyJNTJ9NaM9eGY5nA5J16 Uw3VdTcIQ/AM4575j6aoi4w5mkPZq9dK8uTVfO4cdKPyNZJEpjV0wMBn/Wy4hfrvE/VI bkqhk5T0PR1obglyAEDWJwYkRjjZ4I7LCuoF/wEKTfBQtPGEejMjYrokMxq3VFgzFQbw GoJYP6hEH5YxHxMf8EComqS/d8v1omWSGORHqfvXOS1cXy+WEtJqDcPBdisjs2ThPjBR qzSV14Q3KIz7TeAoy5RVPLG2m0bzBRPWnn1786iIeyV9NE27ilRVSJnifBNAL/4LYgXx Yk1A== 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:delivered-to; bh=dfTGwj+HYHoP+AmXAW++xZW5VxA25X69R488JTNAk1w=; b=ZKg3etz/DvB+VoHA6LjVT1ei/qoH7CSdW3xdk4mpw5O7hITuNqX/u0di5Uv49sb0Dz jR5KhzkVMqAKbnBRnRlUnK8A/CSwItIy5h1izmcYt5YLh0HYITUD3R3IQw8gxEVaYzDP L/l5dYedP2jAI8uJFfs7VxKVb70Y7GJdhHCquPCDmLulCAFhzH1b4jX72nnsqbKwTFZV dGBUNeTJkaqr2dZoSEcpN6rKQ3vUtupqj8bjiYcYSC+qDm72/nWsAADFN9LnH3jyC13m qeIC2tfGYFltgUPnczqLEBB/pKEEDV9e2y0WrUBmGxOjpD3icZUopGiAc/Ie3jaS4LJ/ 7neA== ARC-Authentication-Results: i=1; mx.google.com; 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 t25-20020a1709066bd900b00946c265cf23si5149533ejs.838.2023.05.08.02.19.48; Mon, 08 May 2023 02:19:49 -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; 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 0759B68C1AC; Mon, 8 May 2023 12:18:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3537D68C148 for ; Mon, 8 May 2023 12:18:06 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 52FFE240705 for ; Mon, 8 May 2023 11:18:05 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id XiuW1ebN59WJ for ; Mon, 8 May 2023 11:18:04 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id BFA16240D1A for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id B0C2B3A01C0 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:37 +0200 Message-Id: <20230508091738.20813-21-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 21/22] fftools/ffmpeg_demux: stop logging to demuxer context 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: sYE1aJAl96pB Only the demuxer itself should do that. --- fftools/ffmpeg_demux.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 461f819e9e..0d265cbfea 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -641,14 +641,14 @@ static void *input_thread(void *arg) if (flags && ret == AVERROR(EAGAIN)) { flags = 0; ret = av_thread_message_queue_send(d->in_thread_queue, &msg, flags); - av_log(f->ctx, AV_LOG_WARNING, + av_log(f, AV_LOG_WARNING, "Thread message queue blocking; consider raising the " "thread_queue_size option (current value: %d)\n", d->thread_queue_size); } if (ret < 0) { if (ret != AVERROR_EOF) - av_log(f->ctx, AV_LOG_ERROR, + av_log(f, AV_LOG_ERROR, "Unable to send packet to main thread: %s\n", av_err2str(ret)); av_packet_free(&msg.pkt); From patchwork Mon May 8 09:17:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41534 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp2181030pzb; Mon, 8 May 2023 02:19:57 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6QT4ai8fM7nFp6G+mZAwOdycq3ubAc3hOGeWIWWXTGzhwuV+6h2miLCDps/3AZonipwNUS X-Received: by 2002:a17:906:4fcf:b0:94e:1764:b09b with SMTP id i15-20020a1709064fcf00b0094e1764b09bmr8820552ejw.45.1683537597638; Mon, 08 May 2023 02:19:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683537597; cv=none; d=google.com; s=arc-20160816; b=q+YgIcHLUg0Dy3z54VuQVOonQhi+hgl4lwZRKkAVKO2Lz8LNdnyJyw4YKjSbdSEsub qAASLEunMZ9NRKXhGxKG1/dg0bG8ZbVD8wCbG9qDfipLWjjEwAJFUYz0KZAhhtGiOhTk xKt3FLQaby9oRcwAIK8aIPD5pADkAsdyveNFjKtBE0bvglEG/2wT0MY9xsBbXFphBqoC YSm/q4ecQOlOXATSPR45X6PkDkBq9HmpINVAkVYJF+ez88ZqAyXQBtD91BfgzoBJyQGc /la6OdE1MuvvdKGdhewkJxG4ZuY0GQ9q3j0MTGd0NgGVyOlWEPciDrFCzyEM5PxDsPSe Wy8A== 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:delivered-to; bh=sXea10LMBrKCToG8dqHVHY7cCnaW3Xz5QO+6wrBqLGU=; b=yGFY8cJz9nglu8dW14SYbGDo5EfXW/hfculeFu2d4nL98TXPeBto6wo6zy0axaWacH 64Ym3fP7Mgeng9linJrpY1OAFyJFrE23AlSCqziLCnfRKMXsjjtOFiYomXCFwpEf9fp9 hefINizqfTQb5BWHXgXoOL+r5DThqDouzGg+f3eftvvOS6stP2aqeoCE/n6Z98W6LFA5 TXIWBh+eHvvjISiBIgfV5eXakAcWULaYYZzT0VSZhlUPOyXOu2c6SdRh+WVKtMJEfPvA 48dG1/hw+d0A4svx96uav+kRdTNn7pJtrWJnY329M0iryeHYTKk1aHmzzJ/OqfFAz41O lK/g== ARC-Authentication-Results: i=1; mx.google.com; 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 h4-20020a1709063c0400b00959bbda5dc8si5586524ejg.1040.2023.05.08.02.19.57; Mon, 08 May 2023 02:19:57 -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; 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 1BDE168C1B4; Mon, 8 May 2023 12:18:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 34B8968C140 for ; Mon, 8 May 2023 12:18:06 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A53AA2404F5 for ; Mon, 8 May 2023 11:18:05 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id bqdYAjV5Q0AT for ; Mon, 8 May 2023 11:18:05 +0200 (CEST) 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 mail0.khirnov.net (Postfix) with ESMTPS id CA13F240D1B for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id BBD513A11B4 for ; Mon, 8 May 2023 11:17:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 May 2023 11:17:38 +0200 Message-Id: <20230508091738.20813-22-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230508091738.20813-1-anton@khirnov.net> References: <20230508091738.20813-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 22/22] fftools/ffmpeg: rename transcode_init() 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: LXJBBd64BAY6 It does no initialization anymore, except for setting transcode_init_done - the bulk of the function is printing the input/output maps. It also cannot fail anymore, so remove the useless return value. --- fftools/ffmpeg.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 45efa75047..ebd793a98c 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1493,11 +1493,8 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo return !eof_reached; } -static int transcode_init(void) +static void print_stream_maps(void) { - int ret = 0; - - /* dump the stream mapping */ av_log(NULL, AV_LOG_INFO, "Stream mapping:\n"); for (InputStream *ist = ist_iter(NULL); ist; ist = ist_iter(ist)) { for (int j = 0; j < ist->nb_filters; j++) { @@ -1570,13 +1567,6 @@ static int transcode_init(void) av_log(NULL, AV_LOG_INFO, " (copy)"); av_log(NULL, AV_LOG_INFO, "\n"); } - - if (ret) - return ret; - - atomic_store(&transcode_init_done, 1); - - return 0; } /** @@ -1854,9 +1844,9 @@ static int transcode(void) InputStream *ist; int64_t timer_start; - ret = transcode_init(); - if (ret < 0) - return ret; + print_stream_maps(); + + atomic_store(&transcode_init_done, 1); if (stdin_interaction) { av_log(NULL, AV_LOG_INFO, "Press [q] to stop, [?] for help\n");