From patchwork Mon Sep 23 05:19:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 51726 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d154:0:b0:48e:c0f8:d0de with SMTP id bt20csp2245945vqb; Sun, 22 Sep 2024 22:29:25 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVilWBVf1/I7AX9oEChH/iTli1+KyCs/Daky8JE4L1FpV4YY3xbmIlWgTOJZlAsqtcMGvJXNrTQXAfcbx6zlDuh@gmail.com X-Google-Smtp-Source: AGHT+IGCMtweq3Fa3ABjmKyRLeNpzy9rr4nIbjNO2sPqmBfu5i3q5wBjLPh79ldIiksCzmpmPQU2 X-Received: by 2002:a05:6512:12cf:b0:530:ab86:1e with SMTP id 2adb3069b0e04-536acf6b2aamr4070487e87.6.1727069365433; Sun, 22 Sep 2024 22:29:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727069365; cv=none; d=google.com; s=arc-20240605; b=Y2EBbscjWGTl7rrmd8grS3WYeu4wxRIEW3WiCW374qJxhprf1suc3UT6nwOBKq9Wdq TOL3s4e9QgwUPYd+DorcSCnoHcQjGv2CpR0yhhu6kJAxG79FIRDrkudR+5qSefOGcwL8 1FJhOgVdH5S1Pvewn845uy7j2Dhw8k8NdOWc1hQhPZTyZQS6tPusO5tYcdbtnOaZtyj1 fcQwcuBOUhki/U4OrwRArEP+Y22M9DzP9iUu2TapKQgeqvFAAEHWl6MCXr5d/7eOi6dR 3Lugw7F3mriaX8JLxuahjEHE9FrYwItsXz7+rvcjjuCWRd1W4ciRTZJnF8axKBwQOjzy dOfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=NeNAEsJIpLWwnnGu3b29UJU18fUzOy2+VTjJwlay7SM=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=F+YNyL/U6k2lVSaAC2/8+jD2ghc639La3K/V40NZ22oftkbD2CmmpSZ7jcHhccjnfs 94TUxN/VvYnwquBd1PcKm2ZATnfPax9QG5iU+3uF32ZbIdphiLShBT/1YJVQqx9Ma8wS vB71tS2sYegEObJPYyBQP8nZ7cuQECSN8Uz4YoZ/oyFPiPTbkpSX9Kp0MHATnw7WfFG6 Lxg5wV1CFi6T27KDkqmyHU1Mie+OykOBQTXegP+jTz+C/LcFkJd/D/NPkWMVlR1duU/0 uWW8cYRVMPZrHjeFqLFAIkmZnzaEpM6qjv259D/YyTV2FDLpIryFzsaH3D2n5YuHs7HX abUQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@proxyid.net header.s=google header.b=bA1eSqHY; 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; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 2adb3069b0e04-5368708dc83si6995012e87.322.2024.09.22.22.29.25; Sun, 22 Sep 2024 22:29:25 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@proxyid.net header.s=google header.b=bA1eSqHY; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0E45C68DC1A; Mon, 23 Sep 2024 08:20:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f228.google.com (mail-oi1-f228.google.com [209.85.167.228]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BB7DC68D942 for ; Mon, 23 Sep 2024 08:19:51 +0300 (EEST) Received: by mail-oi1-f228.google.com with SMTP id 5614622812f47-3e03a5ed4d7so1814110b6e.1 for ; Sun, 22 Sep 2024 22:19:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1727068790; x=1727673590; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5fUUWOl+ACPGIxRlbGPhKPFhtlevfDAV2wuUXNwODnU=; b=bA1eSqHYLuVTUZY+44q2iGVXTKGCSpKAR1tgB8V70MCoNgKAZrzzyApMmqxs9ctCQk qcDtqLy+MGGlmHM4AyCCKeumfT+pUfTo3ltKuiq9PxEetIMyOti1H7xnz7whhQ84YcwT AgGVbtOzTsd+4SuX66U+YzL/qWAgn7SoOSz71ggvSyChBS5qOTTV+LUQzQwmYIFeUMKt GN1XbUhJ2AQta9pFlMI1Hr6OwBDlky7XoV+V2HHV0tlhsXOagjdBBp8UrSMm+iKz2AnT bJK8o279yDAMnDckcpV9u35EX5Mq7d5kmSDjZRbNs485erEEUj4RNkeppXDUUywzElNp Nwpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727068790; x=1727673590; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5fUUWOl+ACPGIxRlbGPhKPFhtlevfDAV2wuUXNwODnU=; b=mp+b1S0BfRg3tFSgoOB2TvISlZzTgeYEMCw6I/xnZfWXY8wtG5/I0S/5sE8s5/RdW1 A1aNJ4FflqWe7Jz24liapcDwYAa0HV8GKV2Sz2F10lYnApqfoXgBMFbNJhB79eoCtUgO VEcbIrfwqukTJDQ4bz5VIdJazObjR3lG1lenzyF6dt8V3Cs7B+2FC0txdtA0s7OyKzGa 76s2pFSRflPlOCX4GDWProz3YRYVfgi1ugzXEGP/b/swp9aKs6ZQ6zm3XmQJze4I0KHW Rrr83SUUN8m8Pu8tDlF35nJVYO7h16PSiBIH66nOm0lYTql+hMFA/frjVlQLWq8kLDkw ffZw== X-Gm-Message-State: AOJu0Yz4R7rrGirdH1QQ6chm5ueRCC9HkkZmEZRSesLihKIiIQCIlpgX RBj8MYKqsLN3FbAe4YngjZmAsBU8oBdNT3mulFzkaRIrozv0FHN+6ThpbT2S6S+eRdar2qc1Xz7 J920OKTf7x7jBD/EEbGGyyptfYIeZ6BZPN2K6u8Xe X-Received: by 2002:a05:6808:1b8a:b0:3da:e219:bf with SMTP id 5614622812f47-3e271cf5113mr5959689b6e.43.1727068790336; Sun, 22 Sep 2024 22:19:50 -0700 (PDT) Received: from localhost.localdomain (c-69-245-177-215.hsd1.il.comcast.net. [69.245.177.215]) by smtp-relay.gmail.com with ESMTPS id 006d021491bc7-5e3bc69661csm202010eaf.20.2024.09.22.22.19.50 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 22 Sep 2024 22:19:50 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Mon, 23 Sep 2024 00:19:38 -0500 Message-Id: <20240923051941.54124-9-marth64@proxyid.net> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20240923051941.54124-1-marth64@proxyid.net> References: <20240923051941.54124-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 08/11] avformat/dvdvideodec: simplify dvdvideo_read_packet() 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 Cc: Marth64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 3VAxUE5yYCs5 The function has a few branches where it discards frames via FFERROR_REDO; consolidate is via a goto block to simplify the function and improve readability. Logging still maintains all the relevant details for the reason of the discard. Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 44 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index 5df123ac44..ebcfdca9a5 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -1615,8 +1615,9 @@ static int dvdvideo_read_packet(AVFormatContext *s, AVPacket *pkt) DVDVideoDemuxContext *c = s->priv_data; int ret; - enum AVMediaType st_type; - int found_stream = 0; + int is_key = 0; + int st_mapped = 0; + AVStream *st_subdemux; if (c->play_end) return AVERROR_EOF; @@ -1629,32 +1630,27 @@ static int dvdvideo_read_packet(AVFormatContext *s, AVPacket *pkt) if (!c->segment_started) c->segment_started = 1; - st_type = c->mpeg_ctx->streams[pkt->stream_index]->codecpar->codec_type; + st_subdemux = c->mpeg_ctx->streams[pkt->stream_index]; + is_key = pkt->flags & AV_PKT_FLAG_KEY; /* map the subdemuxer stream to the parent demuxer's stream (by startcode) */ for (int i = 0; i < s->nb_streams; i++) { - if (s->streams[i]->id == c->mpeg_ctx->streams[pkt->stream_index]->id) { + if (s->streams[i]->id == st_subdemux->id) { pkt->stream_index = s->streams[i]->index; - found_stream = 1; + st_mapped = 1; + break; } } - if (!found_stream) { - av_log(s, AV_LOG_DEBUG, "discarding frame with stream that was not in IFO headers " - "(stream id=%d)\n", c->mpeg_ctx->streams[pkt->stream_index]->id); - - return FFERROR_REDO; - } + if (!st_mapped) + goto discard; if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE) { if (!c->play_started) { /* try to start at the beginning of a GOP */ - if (st_type != AVMEDIA_TYPE_VIDEO || !(pkt->flags & AV_PKT_FLAG_KEY)) { - av_log(s, AV_LOG_VERBOSE, "Discarding packet which is not a video keyframe or " - "with unset PTS/DTS at start\n"); - return FFERROR_REDO; - } + if (st_subdemux->codecpar->codec_type != AVMEDIA_TYPE_VIDEO || !is_key) + goto discard; c->first_pts = pkt->pts; c->play_started = 1; @@ -1663,13 +1659,8 @@ static int dvdvideo_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->pts += c->play_state.ts_offset - c->first_pts; pkt->dts += c->play_state.ts_offset - c->first_pts; - if (pkt->pts < 0) { - av_log(s, AV_LOG_VERBOSE, "Discarding packet with negative PTS (st=%d pts=%" PRId64 "), " - "this is OK at start of playback\n", - pkt->stream_index, pkt->pts); - - return FFERROR_REDO; - } + if (pkt->pts < 0) + goto discard; } else { av_log(s, AV_LOG_WARNING, "Unset PTS or DTS @ st=%d pts=%" PRId64 " dts=%" PRId64 "\n", pkt->stream_index, pkt->pts, pkt->dts); @@ -1681,6 +1672,13 @@ static int dvdvideo_read_packet(AVFormatContext *s, AVPacket *pkt) c->play_state.ts_offset, c->first_pts); return c->play_end ? AVERROR_EOF : 0; + +discard: + av_log(s, st_mapped ? AV_LOG_VERBOSE : AV_LOG_DEBUG, + "Discarding frame @ st=%d pts=%" PRId64 " dts=%" PRId64 " is_key=%d st_mapped=%d\n", + st_mapped ? pkt->stream_index : -1, pkt->pts, pkt->dts, is_key, st_mapped); + + return FFERROR_REDO; } static int dvdvideo_close(AVFormatContext *s)