From patchwork Mon Sep 23 05:19:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 51721 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d154:0:b0:48e:c0f8:d0de with SMTP id bt20csp2243965vqb; Sun, 22 Sep 2024 22:20:59 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWXJM8OPqPYikrZ77qSKNo3ly/SYYBfjg6oU84VHZFDpJsNuAzs0iYq+mq6BR9I1DKoaeXcBRRkgkluzcR8B8Iy@gmail.com X-Google-Smtp-Source: AGHT+IFBp7XmToUKMyBpScxCg2CO2GsNzK5bkbCyi03MeOR/PdOgs1AzAeiZropybzAf0l+fOl+Y X-Received: by 2002:a2e:b890:0:b0:2f6:6074:db84 with SMTP id 38308e7fff4ca-2f7cb324cdcmr15100531fa.9.1727068859293; Sun, 22 Sep 2024 22:20:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727068859; cv=none; d=google.com; s=arc-20240605; b=Yr7iR1ko2pz/DSy+lMBPFrAgFhBX8J5SZe8VpN1Fv4YchfI5qytcSC1UKM60f6uI18 w1cbM9I5dJ/JWo99WNkuEh0cXNS3Au+/PZ/UWvp57pCkM9iaFixPy7oF8rpDJ0cKXip7 MOhnP4VLLZ0oLojaN9itOQt67HHLxTIJmD4YWi95jUrq52d8JbevqI49YgHL3aWNJBu8 dUxW5AbxGfC2tD3I313ahlCh4LhtdueIroMapb9yCdZb+g9nNEphEFhZ3l+XVrwVm3Q4 r/4cjNJwNIwd4jL9ggyVsPrX2ifz6jgHN8gmDetdIvzYW0WYsQjnwvnGVLSziR+HA5nq w2pA== 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=7Qv04dprDBSRxWahRGow9JxTiCx5LqUdlZciFqG02h8=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=BABxHy8OvZsvLKzkdLuCeDwwGLYiHBPtfqi4bdjI+ArtAArM2f8+zx2IaAw3RAgaVl HCCJWyKWQXYv5XHwx829WmTByry4wBt8WhSVTkqY6UuVrV/54S/WnD99QOG3nsYXNlfS BZZKxJ0RpFY35sPl78X4bDsUh0T7RPRQ/ZOXC7bKTM+Yg6dgGxOp+nknfN2REc+OyWVM z4pw/+6ZHPmA5gCIIde1/8uiFSPk/J50rk8x90lafRyelqIpVqS9pmI5vqRcXfLKiRb5 eKQbdCf5PHWf1w5KLdYjxpwOzT7XeW0H5B+wGbYHjlPUi6SuWQWVSsUj1roH+Bq+7DXk s6uw==; 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=gznUWrit; 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 38308e7fff4ca-2f79d2db26csi53963281fa.170.2024.09.22.22.20.58; Sun, 22 Sep 2024 22: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; dkim=neutral (body hash did not verify) header.i=@proxyid.net header.s=google header.b=gznUWrit; 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 457D668DBE5; Mon, 23 Sep 2024 08:20:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oo1-f98.google.com (mail-oo1-f98.google.com [209.85.161.98]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0728168DA3A for ; Mon, 23 Sep 2024 08:19:51 +0300 (EEST) Received: by mail-oo1-f98.google.com with SMTP id 006d021491bc7-5d5f24d9df8so1822347eaf.2 for ; Sun, 22 Sep 2024 22:19:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1727068789; x=1727673589; 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=KMKDoVhot4hLfrBo+A8hgTWyqdB/S/+xtYoKVXN/0K0=; b=gznUWritje4obXixANut0g4xQ8GRJi7JqYvCYzDnScUE2hAbGW+vO8o+reQf1PwHWP 70CuWvGns5qdO2cc2bg9iTPYR1a0uKQ/HlLZN0UmSuHv0R0ZtkF6cZBaoWsY9Ppm70gW sH0RywDqYMNol0M8t7rPB0ojxx5xtVVlcg1PVUgqXD45mbJ171nXCOaJGuNLm4uO4gxP FC44H9IPw04WRNgZ2sZSYBnz4D2vVirFIoLHghCwO6DlCEryTrAzMYhw+Mp9LREtsjjZ VeWRESkSTUgEdW7B7Z1BQ3xy9JF35ls6uZ11NbX1T1NpRSRehZS8Z4yuF4JCYRmT/aqj fZ3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727068789; x=1727673589; 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=KMKDoVhot4hLfrBo+A8hgTWyqdB/S/+xtYoKVXN/0K0=; b=RJwuM/AQHEy0C09epwFiQOmIR7AcGx44G9fcrGO/KPnpkcXjJo3ClgzffuCtbecHPb NH333tamQQrHF4nWKJtwhUS4flu/UJBT0IkpJ61msjrMA1FjIiqhts6mmSo5H8S0hZTv C/GTOoTHgoEMdZ97b5WbFFWfVZPC+m4wnSGodaisXXD91T6LJQswI4D0Kcj2HE0qlbfx 1YCXat2VPeRagcTlXcQA0sDVnkS5QIuuZ6OQLAvHo8RV1oCXPoTaFoLP8w8yoRFuPrcW zSD2RZJHUP7PlHW+Vu+dM3h9fBnaFdTjLK7k4il6SU/Joid6XhA/1ngay9VuGFEeR8EU YpxA== X-Gm-Message-State: AOJu0YwdGxpoG4QiePP7g2F2JHg5Ko3vtAqqm6kd7NRLV/Y3+N5HczSY 3EDTgMiTIp8vUKkAicBvwPGg+QaWX4nbkpAvufq786mmGXRfEb0MkjeXb6GlCeUhb41wCXdwtRz O5h/xUT0LGZYBSVEQKDEXbbHdL2tMMWWKKrvmNkWR X-Received: by 2002:a05:6820:210:b0:5e1:de92:6b4c with SMTP id 006d021491bc7-5e58ba58eaamr5176901eaf.1.1727068789558; Sun, 22 Sep 2024 22:19:49 -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.49 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 22 Sep 2024 22:19:49 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Mon, 23 Sep 2024 00:19:36 -0500 Message-Id: <20240923051941.54124-7-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 06/11] avformat/dvdvideodec: standardize the NAV packet event signal 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: UTAqtNIXbivE This consolidates the FFERROR_REDO handling of NAV packets to dvdvideo_subdemux_read_data(), is a pre-requisite to calculating chapter markers for menus, and a pre-requisite to fixing the frame desync issue when the subdemuxer is flushed. Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index 9246ac0863..066edaaa27 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -390,7 +390,7 @@ static int dvdvideo_menu_open(AVFormatContext *s, DVDVideoPlaybackState *state) } static int dvdvideo_menu_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState *state, - uint8_t *buf, int buf_size, + uint8_t *buf, int buf_size, int *p_is_nav_packet, void (*flush_cb)(AVFormatContext *s)) { int64_t blocks_read = 0; @@ -398,6 +398,8 @@ static int dvdvideo_menu_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState pci_t pci = (pci_t) {0}; dsi_t dsi = (dsi_t) {0}; + (*p_is_nav_packet) = 0; + if (buf_size != DVDVIDEO_BLOCK_SIZE) { av_log(s, AV_LOG_ERROR, "Invalid buffer size (expected=%d actual=%d)\n", DVDVIDEO_BLOCK_SIZE, buf_size); @@ -481,7 +483,9 @@ static int dvdvideo_menu_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState dsi.dsi_gi.nv_pck_lbn, pci.pci_gi.vobu_s_ptm, pci.pci_gi.vobu_e_ptm, state->ts_offset); - return FFERROR_REDO; + (*p_is_nav_packet) = 1; + + return 0; } /* we are in the middle of a VOBU, so pass on the PS packet */ @@ -611,8 +615,7 @@ end_dvdnav_error: } static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState *state, - uint8_t *buf, int buf_size, - int *p_nav_event, + uint8_t *buf, int buf_size, int *p_is_nav_packet, void (*flush_cb)(AVFormatContext *s)) { DVDVideoDemuxContext *c = s->priv_data; @@ -627,6 +630,8 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState pci_t *e_pci; dsi_t *e_dsi; + (*p_is_nav_packet) = 0; + if (buf_size != DVDVIDEO_BLOCK_SIZE) { av_log(s, AV_LOG_ERROR, "Invalid buffer size (expected=%d actual=%d)\n", DVDVIDEO_BLOCK_SIZE, buf_size); @@ -780,9 +785,9 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState state->vobu_e_ptm = e_pci->pci_gi.vobu_e_ptm; - (*p_nav_event) = nav_event; + (*p_is_nav_packet) = 1; - return nav_len; + return 0; case DVDNAV_BLOCK_OK: if (!state->in_ps) { if (state->in_pgc) @@ -811,8 +816,6 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState memcpy(buf, &nav_buf, nav_len); - (*p_nav_event) = nav_event; - state->is_seeking = 0; return nav_len; @@ -1442,18 +1445,18 @@ static int dvdvideo_subdemux_read_data(void *opaque, uint8_t *buf, int buf_size) AVFormatContext *s = opaque; DVDVideoDemuxContext *c = s->priv_data; - int ret = 0; - int nav_event; + int ret; + int is_nav_packet; if (c->play_end) return AVERROR_EOF; if (c->opt_menu) - ret = dvdvideo_menu_next_ps_block(s, &c->play_state, buf, buf_size, + ret = dvdvideo_menu_next_ps_block(s, &c->play_state, buf, buf_size, &is_nav_packet, dvdvideo_subdemux_flush); else - ret = dvdvideo_play_next_ps_block(opaque, &c->play_state, buf, buf_size, - &nav_event, dvdvideo_subdemux_flush); + ret = dvdvideo_play_next_ps_block(s, &c->play_state, buf, buf_size, &is_nav_packet, + dvdvideo_subdemux_flush); if (ret == AVERROR_EOF) { c->mpeg_pb.pub.eof_reached = 1; @@ -1462,7 +1465,7 @@ static int dvdvideo_subdemux_read_data(void *opaque, uint8_t *buf, int buf_size) return AVERROR_EOF; } - if (ret >= 0 && nav_event == DVDNAV_NAV_PACKET) + if (ret == 0 && is_nav_packet) return FFERROR_REDO; return ret;