From patchwork Sun Jul 28 07:34:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 50775 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp536413vqi; Sun, 28 Jul 2024 00:35:29 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXUefiDz0UL7Wr/dIOvcHX7oK9/Ulu7xfN1IRjhv0I54sClBleOZAQ6Xa992gXut3J114DpYJdf4WAwqeM1r5Ygb5hC6XHrJJY9JQ== X-Google-Smtp-Source: AGHT+IF75BBSfsY71/LCJ/CzwJrEfNI6uJDAkdckD9als/hKVsFPh+XqkOhwbUQEyTEG7hhML+qH X-Received: by 2002:a17:906:c14b:b0:a77:dc70:b35f with SMTP id a640c23a62f3a-a7d401769b4mr298607666b.58.1722152128936; Sun, 28 Jul 2024 00:35:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722152128; cv=none; d=google.com; s=arc-20160816; b=a6YTDDy1ZTu001owFkGEipN0bhyJwLbV8fV30pC3P8O9ko9dbWs0uxVgbbanqzVp2V 6iw6O6y61KnIajQl4vJz3jJ+4dKdvSUCs3p/4mi0n6XfO9mF9R7wBEaZR2ZmQqecMRpv FSD3KGb5ytYxE/SU86dpT5UaoEtJB4mfK2bEHNCmIhsqTq5icQD6TLxluP56YKDdn0tW Bj/HdvWeCxUzJz7HbXPiV+6h2zHCVg+CtmFLQiN+WegdriS/8WbboqnQcbqVyW2pj6kz NVQ5DVzfHJaGkpDM7CRS52207Lqh/ksOXnivskRPOa1mljceU1nS4jQlezgX20P7iJ4k sbPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=OgQgENI6JguKgC71FtEOR38aqbxmkSxmavPKU36kF78=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=z9bFh5qg6VIX6V3frtxVK7+4HcyS8qm2ND7HM+k29EgBlE7pcfG2zsBuy7HNwjLaD0 w4Ee+LCfBvWoZdg+dxxXF/fr/0U7jeVcdclIEmBBNBjlzijHs8x9OwX4AK21VpapvhVD RWIFuq+EIxT4g46YOeS67o8OLeKbMt9uiBUJfKgtDj7RXHCUKux2fOlx7Oew8jV1Czru exYaDBEKbh0k+oMfzEjIvFVl+s+gURT62Cx1jd4NzPwEKRaXLmAoTiSV4npEjnoAW57O OxKY+qEG4WSL1yyBVs6F1MEJKPPVm11myihXiyDy5+cLoaPDuwhVWhptrzfxIajYM5Hr VtcQ==; 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=U2kdtXrY; 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 a640c23a62f3a-a7acacc41ddsi470513566b.957.2024.07.28.00.35.28; Sun, 28 Jul 2024 00:35:28 -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=U2kdtXrY; 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 514D768D786; Sun, 28 Jul 2024 10:35:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yb1-f226.google.com (mail-yb1-f226.google.com [209.85.219.226]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 30F1068D76C for ; Sun, 28 Jul 2024 10:35:08 +0300 (EEST) Received: by mail-yb1-f226.google.com with SMTP id 3f1490d57ef6-e05f25fb96eso1005080276.1 for ; Sun, 28 Jul 2024 00:35:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1722152107; x=1722756907; 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=zbTgPcn6HSeKlVg+EX1r9k6y+eAECctz8WGrBRZYs6I=; b=U2kdtXrYk6TqVrhKyVRZkCR/WfNgObvBmJXOD3dz6ZHyw/+ivoARgosdf00cmgS+ZN eJ8DtxBOegRwSr2pwEAF3n0yggQ+APV30RM3TgB0iM3idTrgaGX9PdAPbTarQlbqwUhP pGi++TEH9f/S1eIFD5e4nPpFd5X4N+t4JybZnZ7f1HMZR5sW5fECDp4cFa5gyNjG9ZRB tQ8O9AuN2HZmvmRQ3qal4cI53WADpavfC1Nxb5+q4vD4FxHPW9MzHRayvCxiDk6zCUQr faz6x9prvMahBYhid0EIRIz5efJ40JLPzec9W1kIPIG6cxKD7Z2ZvuLx9gsSw4llF5Hg 4ZSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722152107; x=1722756907; 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=zbTgPcn6HSeKlVg+EX1r9k6y+eAECctz8WGrBRZYs6I=; b=bIe8bWN1CEr74207W15evjcLNS29vNS8rc3waUxZYDYtK7znUCmf8IBgP9Prf3aInP zQrkzlJI9IwTWMRj4R79MgYhe4m2jvEv7LxU2qvLrXRQOrRVaW+rt3iGVhMQOFF5zwMu pCTopVhKvzsLpBvlcQTXTD88d1oJUPf/Z5aVuuA4oMr/xXZADnqLci6vWF4oQoigxRJU /Ai8C80QxOmsIFvCL0bzFTn2j+mvAtVZNHvGMEWuKD9MI2gdw1bzBzSlqQwo14sGJWct hhhA4rmn3BZs7BKM9CleTl2HNNsACfB2fEwggPhdlEIPxN2VmlD2Ggrk558CxshQ1gqx UnZA== X-Gm-Message-State: AOJu0Yxr+e6M9b1J150TmkUvJ2mO0f7sk2FkksGKRnklmha3dM2xSmTY hDDRYkoYfg3rah4bg0qOM1v2teEz9+NmwOlrQBWgfLasXC+MILbHVOnmkzv8ux7c9GFVHXYFp2y bggFSutsYtZOVjEEG7ZX0M7Y3W3QmAXNy2rOR1pLR X-Received: by 2002:a05:690c:6610:b0:650:9799:41d2 with SMTP id 00721157ae682-67a09f4ac9bmr51367107b3.30.1722152106538; Sun, 28 Jul 2024 00:35:06 -0700 (PDT) Received: from wsx-cc1-001.. (c-76-136-218-80.hsd1.il.comcast.net. [76.136.218.80]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-6756ad425desm5735937b3.61.2024.07.28.00.35.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 00:35:06 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jul 2024 02:34:39 -0500 Message-Id: <20240728073445.725161-2-marth64@proxyid.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> References: <20240728073445.725161-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/7] avformat/dvdvideodec: Fix racy PTS calculation and frame drops 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: KwlENoZlApY8 DVDs naturally consist of segmented MPEG-PS blobs within a VOB (i.e. VOBs are not linear). NAV packs set the segment boundaries. When switching between segments, discontinuities occur and thus the subdemuxer needs to be reset. The current approach to manage this is by invoking ff_read_frame_flush() on the subdemuxer context, via a callback function which is invoked during the menu or dvdnav block functions. The same subdemuxer context is used throughout the demux, with a stretched PTS wrap bits value (64) + disabled overflow correction, and then flushed on each segment. Eventually, a play_end context variable is set to declare EOF. However, this approach is wrong and racy. The block read flushes the demuxer before the frame read is complete, causing frames to drop on discontinuity. The play_end signal likewise ends playback before the frame read is complete, causing frames to drop at end of the title. To compound the issue, the PTS wrap bits value of 64 is wrong; the VOBU limit is actually 32 and the overflow correction should work. Instead, EOF the MPEG-PS subdemuxer organically when each VOB segment ends, and re-open it if needed with the offset after the full frame read is complete. In doing so, correct the PTS wrap behavior to 32 bits, remove the racy play_end/segment_started signals and the callback pattern. The behavior is now more similar to the HLS/DASH demuxers. This commit fixes five intertwined issues, yielding an accurate demux: (1) Racy segment switching (2) Racy EOF signaling (3) Off-by-one leading to missed packets at start of menus (4) Incorrect PTS wrap behavior (5) Unnecessary frame discard workarounds removed Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 198 +++++++++++++++++++------------------- 1 file changed, 100 insertions(+), 98 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index 7a859071c3..e745165e00 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -58,7 +58,7 @@ #define DVDVIDEO_MAX_PS_SEARCH_BLOCKS 128 #define DVDVIDEO_BLOCK_SIZE 2048 #define DVDVIDEO_TIME_BASE_Q (AVRational) { 1, 90000 } -#define DVDVIDEO_PTS_WRAP_BITS 64 /* VOBUs use 32 (PES allows 33) */ +#define DVDVIDEO_PTS_WRAP_BITS 32 /* VOBUs use 32 (PES allows 33) */ #define DVDVIDEO_LIBDVDX_LOG_BUFFER_SIZE 1024 #define PCI_START_BYTE 45 /* complement dvdread's DSI_START_BYTE */ @@ -116,8 +116,9 @@ typedef struct DVDVideoPlaybackState { int pgc_nb_pg_est; /* number of PGs as reported by IFOs */ int pgcn; /* ID of the PGC we are playing */ int pgn; /* ID of the PG we are in now */ + int ptm_discont; /* signal that a PTM discontinuity occurred */ + int64_t ptm_offset; /* PTM discontinuity offset (as NAV value) */ int ptt; /* ID of the chapter we are in now */ - int64_t ts_offset; /* PTS discontinuity offset (ex. VOB change) */ uint32_t vobu_duration; /* duration of the current VOBU */ uint32_t vobu_e_ptm; /* end PTM of the current VOBU */ int vtsn; /* ID of the active VTS (video title set) */ @@ -164,10 +165,11 @@ typedef struct DVDVideoDemuxContext { /* playback control */ int64_t first_pts; /* the PTS of the first video keyframe */ - int play_end; /* signal EOF to the parent demuxer */ - DVDVideoPlaybackState play_state; /* the active playback state */ int play_started; /* signal that playback has started */ - int segment_started; /* signal that subdemuxer is on a segment */ + DVDVideoPlaybackState play_state; /* the active playback state */ + int64_t pts_offset; /* PTS discontinuity offset (ex. VOB change) */ + int seek_warned; /* signal that we warned about seeking limits */ + int subdemux_reset; /* signal that subdemuxer should be reset */ } DVDVideoDemuxContext; static void dvdvideo_libdvdread_log(void *opaque, dvd_logger_level_t level, @@ -344,7 +346,7 @@ static int dvdvideo_menu_open(AVFormatContext *s, DVDVideoPlaybackState *state) } /* make sure the PGC is valid */ - state->pgcn = c->opt_pgc - 1; + state->pgcn = c->opt_pgc; state->pgc = pgci_ut->lu[c->opt_menu_lu - 1].pgcit->pgci_srp[c->opt_pgc - 1].pgc; if (!state->pgc || !state->pgc->program_map || !state->pgc->cell_playback) { av_log(s, AV_LOG_ERROR, "Invalid PGC structure for menu [LU %d, PGC %d]\n", @@ -390,14 +392,16 @@ 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, - void (*flush_cb)(AVFormatContext *s)) + uint8_t *buf, int buf_size, int *p_is_nav_packet) { int64_t blocks_read = 0; uint8_t read_buf[DVDVIDEO_BLOCK_SIZE] = {0}; pci_t pci = (pci_t) {0}; dsi_t dsi = (dsi_t) {0}; + (*p_is_nav_packet) = 0; + state->ptm_discont = 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); @@ -463,10 +467,8 @@ static int dvdvideo_menu_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState if (state->in_pgc) { if (state->vobu_e_ptm != pci.pci_gi.vobu_s_ptm) { - if (flush_cb) - flush_cb(s); - - state->ts_offset += state->vobu_e_ptm - pci.pci_gi.vobu_s_ptm; + state->ptm_discont = 1; + state->ptm_offset += state->vobu_e_ptm - pci.pci_gi.vobu_s_ptm; } } else { state->in_pgc = 1; @@ -474,13 +476,17 @@ static int dvdvideo_menu_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState } state->vobu_e_ptm = pci.pci_gi.vobu_e_ptm; + state->vobu_duration = pci.pci_gi.vobu_e_ptm - pci.pci_gi.vobu_s_ptm; av_log(s, AV_LOG_DEBUG, "NAV packet: sector=%d " - "vobu_s_ptm=%d vobu_e_ptm=%d ts_offset=%" PRId64 "\n", + "vobu_s_ptm=%d vobu_e_ptm=%d ptm_offset=%" PRId64 "\n", dsi.dsi_gi.nv_pck_lbn, - pci.pci_gi.vobu_s_ptm, pci.pci_gi.vobu_e_ptm, state->ts_offset); + pci.pci_gi.vobu_s_ptm, pci.pci_gi.vobu_e_ptm, state->ptm_offset); - return FFERROR_REDO; + + (*p_is_nav_packet) = 1; + + return DVDVIDEO_BLOCK_SIZE; } /* we are in the middle of a VOBU, so pass on the PS packet */ @@ -610,9 +616,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, - void (*flush_cb)(AVFormatContext *s)) + uint8_t *buf, int buf_size, int *p_is_nav_packet) { DVDVideoDemuxContext *c = s->priv_data; @@ -626,6 +630,9 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState pci_t *e_pci; dsi_t *e_dsi; + (*p_is_nav_packet) = 0; + state->ptm_discont = 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); @@ -769,16 +776,14 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState state->in_ps = 1; } else { if (state->vobu_e_ptm != e_pci->pci_gi.vobu_s_ptm) { - if (flush_cb) - flush_cb(s); - - state->ts_offset += state->vobu_e_ptm - e_pci->pci_gi.vobu_s_ptm; + state->ptm_discont = 1; + state->ptm_offset += state->vobu_e_ptm - e_pci->pci_gi.vobu_s_ptm; } } state->vobu_e_ptm = e_pci->pci_gi.vobu_e_ptm; - (*p_nav_event) = nav_event; + (*p_is_nav_packet) = 1; return nav_len; case DVDNAV_BLOCK_OK: @@ -809,8 +814,6 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState "this could be due to a missed NAV packet\n", state->pgn, cur_pgn); - (*p_nav_event) = nav_event; - return nav_len; case DVDNAV_WAIT: if (dvdnav_wait_skip(state->dvdnav) != DVDNAV_STATUS_OK) { @@ -908,7 +911,7 @@ static int dvdvideo_chapters_setup_preindex(AVFormatContext *s) DVDVideoPlaybackState state = {0}; uint8_t nav_buf[DVDVIDEO_BLOCK_SIZE]; - int nav_event; + int is_nav_packet; if (c->opt_chapter_start == c->opt_chapter_end) return ret; @@ -924,11 +927,11 @@ static int dvdvideo_chapters_setup_preindex(AVFormatContext *s) while (!(interrupt = ff_check_interrupt(&s->interrupt_callback))) { ret = dvdvideo_play_next_ps_block(s, &state, nav_buf, DVDVIDEO_BLOCK_SIZE, - &nav_event, NULL); + &is_nav_packet); if (ret < 0 && ret != AVERROR_EOF) goto end_close; - if (nav_event != DVDNAV_NAV_PACKET && ret != AVERROR_EOF) + if (!is_nav_packet && ret != AVERROR_EOF) continue; if (state.ptt == last_ptt) { @@ -1420,46 +1423,40 @@ static int dvdvideo_subp_stream_add_all(AVFormatContext *s) return 0; } -static void dvdvideo_subdemux_flush(AVFormatContext *s) -{ - DVDVideoDemuxContext *c = s->priv_data; - - if (!c->segment_started) - return; - - av_log(s, AV_LOG_DEBUG, "flushing sub-demuxer\n"); - avio_flush(&c->mpeg_pb.pub); - ff_read_frame_flush(c->mpeg_ctx); - c->segment_started = 0; -} - 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; - - if (c->play_end) - return AVERROR_EOF; + int ret; + int is_nav_packet; if (c->opt_menu) - ret = dvdvideo_menu_next_ps_block(s, &c->play_state, buf, buf_size, - dvdvideo_subdemux_flush); + ret = dvdvideo_menu_next_ps_block(s, &c->play_state, buf, buf_size, &is_nav_packet); 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); - if (ret == AVERROR_EOF) { - c->mpeg_pb.pub.eof_reached = 1; - c->play_end = 1; + if (ret < 0) + goto subdemux_eof; - return AVERROR_EOF; - } + if (is_nav_packet) { + if (c->play_state.ptm_discont) { + c->subdemux_reset = 1; + + ret = AVERROR_EOF; + goto subdemux_eof; + } - if (ret >= 0 && nav_event == DVDNAV_NAV_PACKET) return FFERROR_REDO; + } + + return ret; + +subdemux_eof: + c->mpeg_pb.pub.eof_reached = 1; + c->mpeg_pb.pub.error = ret; + c->mpeg_pb.pub.read_packet = NULL; + c->mpeg_pb.pub.buf_end = c->mpeg_pb.pub.buf_ptr = c->mpeg_pb.pub.buffer; return ret; } @@ -1469,7 +1466,9 @@ static void dvdvideo_subdemux_close(AVFormatContext *s) DVDVideoDemuxContext *c = s->priv_data; av_freep(&c->mpeg_pb.pub.buffer); + memset(&c->mpeg_pb, 0x00, sizeof(c->mpeg_pb)); avformat_close_input(&c->mpeg_ctx); + c->mpeg_ctx = NULL; } static int dvdvideo_subdemux_open(AVFormatContext *s) @@ -1501,12 +1500,23 @@ static int dvdvideo_subdemux_open(AVFormatContext *s) c->mpeg_ctx->max_analyze_duration = 0; c->mpeg_ctx->interrupt_callback = s->interrupt_callback; c->mpeg_ctx->pb = &c->mpeg_pb.pub; - c->mpeg_ctx->correct_ts_overflow = 0; - c->mpeg_ctx->io_open = NULL; return avformat_open_input(&c->mpeg_ctx, "", &ff_mpegps_demuxer.p, NULL); } +static int dvdvideo_subdemux_reset(AVFormatContext *s) +{ + int ret; + + av_log(s, AV_LOG_DEBUG, "resetting sub-demuxer\n"); + + dvdvideo_subdemux_close(s); + if ((ret = dvdvideo_subdemux_open(s)) < 0) + return ret; + + return 0; +} + static int dvdvideo_read_header(AVFormatContext *s) { DVDVideoDemuxContext *c = s->priv_data; @@ -1604,72 +1614,64 @@ static int dvdvideo_read_packet(AVFormatContext *s, AVPacket *pkt) DVDVideoDemuxContext *c = s->priv_data; int ret; - enum AVMediaType st_type; - int found_stream = 0; - - if (c->play_end) - return AVERROR_EOF; + int st_matched = 0; + AVStream *st_subdemux; ret = av_read_frame(c->mpeg_ctx, pkt); + if (ret < 0) { + if (c->subdemux_reset) { + c->subdemux_reset = 0; + c->pts_offset = c->play_state.ptm_offset; - if (ret < 0) - return ret; + if ((ret = dvdvideo_subdemux_reset(s)) < 0) + return ret; + + return FFERROR_REDO; + } - if (!c->segment_started) - c->segment_started = 1; + return ret; + } - st_type = c->mpeg_ctx->streams[pkt->stream_index]->codecpar->codec_type; + st_subdemux = c->mpeg_ctx->streams[pkt->stream_index]; /* 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_matched = 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_matched) + 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; - } - c->first_pts = pkt->pts; c->play_started = 1; } - 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; - } + pkt->pts += c->pts_offset - c->first_pts; + pkt->dts += c->pts_offset - c->first_pts; } 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); + av_log(s, AV_LOG_WARNING, "Received packet with unset PTS or DTS\n"); } av_log(s, AV_LOG_TRACE, "st=%d pts=%" PRId64 " dts=%" PRId64 " " - "ts_offset=%" PRId64 " first_pts=%" PRId64 "\n", + "pts_offset=%" PRId64 " first_pts=%" PRId64 "\n", pkt->stream_index, pkt->pts, pkt->dts, - c->play_state.ts_offset, c->first_pts); + c->pts_offset); + + return 0; + +discard: + av_log(s, AV_LOG_VERBOSE, "Discarding packet @ st=%d pts=%" PRId64 " dts=%" PRId64 " " + "st_matched=%d\n", + st_matched ? pkt->stream_index : -1, pkt->pts, pkt->dts, + st_matched); - return c->play_end ? AVERROR_EOF : 0; + return FFERROR_REDO; } static int dvdvideo_close(AVFormatContext *s) From patchwork Sun Jul 28 07:34:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 50779 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp537801vqi; Sun, 28 Jul 2024 00:41:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUzT9zFp/owv6Y34yFJTCMadcvp/pf+DzrqnSsayA0tkxswmtChzPuruT0JnWmTsKsmmxiGPOLSbjD2ZloBVQXa9ccBDW6gCBfFNw== X-Google-Smtp-Source: AGHT+IEtrvX2Y1jUEhTe+BecPHKYyVVowbK/SOInz3NWzIHMtCChigm2ldUjlc7SbATvnTVkoXNt X-Received: by 2002:a17:906:d551:b0:a6f:6b6a:e8d0 with SMTP id a640c23a62f3a-a7d3ffa5ae0mr334908966b.7.1722152515695; Sun, 28 Jul 2024 00:41:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722152515; cv=none; d=google.com; s=arc-20160816; b=uVIKFvgpKnl46uamJ2fgUrFTCnkqVr7oX5fncKMVCJ5ThClm2C5KnC5jXEC5WxOgNR y4Z4M+N5fpTJOvd+ECSwxRaQbielM+vTcSegdmT+Sfk818AgDs8f2+jROkCdntKIooSM Rgfb6eLRvE1OLiCvJZZ1b/TEfd2w2AMGHHAp1NKNqiHZaDJ7OtjdpqIBcSQ2Ax91D7iO 10hUyx0K4FZi6uOXTgA16c9qoatZOBEFRUR8bSPv2hxEz8zlNb0vuT0mxdHgvblMm4N5 MRnYy9EuOipoLHXNu5u6EBKWS0BZQayRWHHtsJTNPdHZFvmMvoDQTlSnIvb7i34F2ddT hADA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=pKFJ2wXr1BzcJ9WPnE9pYWbpDcJpMqtl6imew13+nCY=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=vPzlXCLeRMbUX4umXj/GptlN9OmVOmddexlUtyn0wfduEnttatG6SJywfEwVIjT2N0 dI//PDuWPzdtPPiWNjCxUx1OIBtd3FPx1q83HjwIkvbOV9Ps90u6gz7BZaWyo32zB8lY YZOcEXffmrUyMYbAULPtO8bsBDCILDh83gG12/qhrUJd6fsvyKwZGwvG/qt3b3lktvnk aP1qSaFQJJwaJRq8Mz1A1R2gJzt1OPCkjXJJaKZNynbzfifYDZsge895wz89SikQq/RO Afl955Vcle1B+G0I8Q8vDl2yjlGalvA5qGoEOKKGfbEa6d0sT2hSsh1yHb4n2LI7lIKB 0fSw==; 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=JByzXi9x; 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 a640c23a62f3a-a7acacc4c65si471581866b.1024.2024.07.28.00.41.55; Sun, 28 Jul 2024 00:41:55 -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=JByzXi9x; 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 9F3EC68D744; Sun, 28 Jul 2024 10:35:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f226.google.com (mail-yw1-f226.google.com [209.85.128.226]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 754CC68D76C for ; Sun, 28 Jul 2024 10:35:08 +0300 (EEST) Received: by mail-yw1-f226.google.com with SMTP id 00721157ae682-65f9e25fffaso11660867b3.3 for ; Sun, 28 Jul 2024 00:35:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1722152107; x=1722756907; 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=3sJGFNPKSJja60wnkhuKxZ7kdB4iZ88cu2C6+C6h0bo=; b=JByzXi9xBEH3saUhsOlKNkBJCDi8G6l4APZ8GE0Zndc+OKWMlg7mreiXvKHkyW6TPS hUrvBsI6c49KN1FlHQMylxnw0puL3zFqmz6Iik/zaqdMYl+X5r5pP+QSUGilBdI1GhWX 3ha68w7Th3FvDxx5AqqxsE3FgAjQ0ynJ/aUm+4I07zgp8CiJbp20FCEAHVyLqpciNOiZ 4SjVoNu+IdnntGu7MKdO4IDaDBUu5rXlyqFRZbIJMeXg4DziE3WpsVBVCVrrmvDg0Ibk pqD77f1enLcGgEjSymeoiffQDm3TmQynU15HbXZhsF36LlU9WiHdITVDgwj+C/LWKaZz GkQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722152107; x=1722756907; 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=3sJGFNPKSJja60wnkhuKxZ7kdB4iZ88cu2C6+C6h0bo=; b=eRWu1IEduWDcaPZZdSXSf/3J3zjWglynxssVKUDmruyfgVqJul9o284isAj4MYFpRr TSo7N2XceJULm556exh4uMHNcZLzPra0IMo4pdFVWfBklPwBJudOl+z9ZzmTlbUVJ12y o5tQptjlaBug2hwgZRA4k00T77dMRjz5J4ycsWC4+HkUtGtgIwyKxuDZL0rasAwpyhjQ 8wdmfU/V+jRcKVBSaDd63p774Flpptb9bAaESuZvnrZFLkBPU4a2jArWdeOmNau4lB1L M7BgKaobMQRQHUNMmWuO+GDb+enNDANV5BQqhenD0PWapIMfyFGpTF4S9ttiQWcvPHky OhVg== X-Gm-Message-State: AOJu0Yyki04scL1IrJ51FGWrawiQ5CiRaAkPiBS9ymBMU0TfZwiNM2cJ ACYdvpGerVxxJz788PTGaloAhT3o4s5Vti174SeB8lCrhw1DlaI+WvSK7SAdf6Oj0AqxnVIqYop QYlIYKKLaxZvU2+zyeLda5Eb0e9ELfl47zZCHX6WH X-Received: by 2002:a0d:c885:0:b0:64b:7859:a92f with SMTP id 00721157ae682-67a053e0c51mr50581847b3.5.1722152107111; Sun, 28 Jul 2024 00:35:07 -0700 (PDT) Received: from wsx-cc1-001.. (c-76-136-218-80.hsd1.il.comcast.net. [76.136.218.80]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-6756ad425desm5735937b3.61.2024.07.28.00.35.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 00:35:07 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jul 2024 02:34:40 -0500 Message-Id: <20240728073445.725161-3-marth64@proxyid.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> References: <20240728073445.725161-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] avformat/dvdvideodec: Implement seeking 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: yeurvUX0i7IY Player applications can now enjoy seeking while playing back a title. Accuracy is at the mercy of what libdvdnav offers, which is currently dvdnav_jump_to_sector_by_time(). Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 93 ++++++++++++++++++++++++++++++++++----- 1 file changed, 82 insertions(+), 11 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index e745165e00..e8301b1173 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -110,6 +110,7 @@ typedef struct DVDVideoPlaybackState { int in_pgc; /* if our navigator is in the PGC */ int in_ps; /* if our navigator is in the program stream */ int in_vts; /* if our navigator is in the VTS */ + int is_seeking; /* relax navigation path while seeking */ int64_t nav_pts; /* PTS according to IFO, not frame-accurate */ uint64_t pgc_duration_est; /* estimated duration as reported by IFO */ uint64_t pgc_elapsed; /* the elapsed time of the PGC, cell-relative */ @@ -722,7 +723,8 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState state->in_pgc = 1; } - } else if (state->celln >= e_cell->cellN || state->pgn > cur_pgn) { + } else if (!state->is_seeking && + (state->celln >= e_cell->cellN || state->pgn > cur_pgn)) { return AVERROR_EOF; } @@ -735,7 +737,7 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState if (!state->in_pgc) continue; - if ((state->ptt > 0 && state->ptt > cur_ptt) || + if ((!state->is_seeking && state->ptt > 0 && state->ptt > cur_ptt) || (c->opt_chapter_end > 0 && cur_ptt > c->opt_chapter_end)) { return AVERROR_EOF; } @@ -807,13 +809,15 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState return AVERROR_INPUT_CHANGED; } - memcpy(buf, &nav_buf, nav_len); - if (state->pgn != cur_pgn) av_log(s, AV_LOG_WARNING, "Unexpected PG change (expected=%d actual=%d); " "this could be due to a missed NAV packet\n", state->pgn, cur_pgn); + memcpy(buf, &nav_buf, nav_len); + + state->is_seeking = 0; + return nav_len; case DVDNAV_WAIT: if (dvdnav_wait_skip(state->dvdnav) != DVDNAV_STATUS_OK) { @@ -1659,17 +1663,17 @@ static int dvdvideo_read_packet(AVFormatContext *s, AVPacket *pkt) } av_log(s, AV_LOG_TRACE, "st=%d pts=%" PRId64 " dts=%" PRId64 " " - "pts_offset=%" PRId64 " first_pts=%" PRId64 "\n", + "pts_offset=%" PRId64 " first_pts=%" PRId64 " is_seeking=%d\n", pkt->stream_index, pkt->pts, pkt->dts, - c->pts_offset); + c->pts_offset, c->first_pts, c->play_state.is_seeking); return 0; discard: av_log(s, AV_LOG_VERBOSE, "Discarding packet @ st=%d pts=%" PRId64 " dts=%" PRId64 " " - "st_matched=%d\n", + "st_matched=%d is_seeking=%d\n", st_matched ? pkt->stream_index : -1, pkt->pts, pkt->dts, - st_matched); + st_matched, c->play_state.is_seeking); return FFERROR_REDO; } @@ -1690,6 +1694,72 @@ static int dvdvideo_close(AVFormatContext *s) return 0; } +static int dvdvideo_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags) +{ + DVDVideoDemuxContext *c = s->priv_data; + int ret; + int64_t new_nav_pts; + pci_t* new_nav_pci; + dsi_t* new_nav_dsi; + + if (c->opt_menu || c->opt_chapter_start > 1) { + av_log(s, AV_LOG_ERROR, "Seeking is not compatible with menus or chapter extraction\n"); + + return AVERROR_PATCHWELCOME; + } + + if ((flags & AVSEEK_FLAG_BYTE)) + return AVERROR(ENOSYS); + + if (timestamp < 0) + return AVERROR(EINVAL); + + if (!c->seek_warned) { + av_log(s, AV_LOG_WARNING, "Seeking is inherently unreliable and will result " + "in imprecise timecodes from this point\n"); + c->seek_warned = 1; + } + + /* XXX(PATCHWELCOME): use dvdnav_jump_to_sector_by_time(c->play_state.dvdnav, timestamp, 0) + * when it is available in a released version of libdvdnav; it is more accurate */ + if (dvdnav_time_search(c->play_state.dvdnav, timestamp) != DVDNAV_STATUS_OK) { + av_log(s, AV_LOG_ERROR, "libdvdnav: seeking to %" PRId64 " failed\n", timestamp); + + return AVERROR_EXTERNAL; + } + + new_nav_pts = dvdnav_get_current_time (c->play_state.dvdnav); + new_nav_pci = dvdnav_get_current_nav_pci(c->play_state.dvdnav); + new_nav_dsi = dvdnav_get_current_nav_dsi(c->play_state.dvdnav); + + if (new_nav_pci == NULL || new_nav_dsi == NULL) { + av_log(s, AV_LOG_ERROR, "Invalid NAV packet after seeking\n"); + + return AVERROR_INVALIDDATA; + } + + c->play_state.in_pgc = 1; + c->play_state.in_ps = 0; + c->play_state.is_seeking = 1; + c->play_state.nav_pts = timestamp; + c->play_state.ptm_offset = timestamp; + c->play_state.ptm_discont = 0; + c->play_state.vobu_e_ptm = new_nav_pci->pci_gi.vobu_s_ptm; + + c->first_pts = 0; + c->play_started = 0; + c->pts_offset = timestamp; + c->subdemux_reset = 0; + + if ((ret = dvdvideo_subdemux_reset(s)) < 0) + return ret; + + av_log(s, AV_LOG_DEBUG, "seeking: requested_nav_pts=%" PRId64 " new_nav_pts=%" PRId64 "\n", + timestamp, new_nav_pts); + + return 0; +} + #define OFFSET(x) offsetof(DVDVideoDemuxContext, x) static const AVOption dvdvideo_options[] = { {"angle", "playback angle number", OFFSET(opt_angle), AV_OPT_TYPE_INT, { .i64=1 }, 1, 9, AV_OPT_FLAG_DECODING_PARAM }, @@ -1718,11 +1788,12 @@ const FFInputFormat ff_dvdvideo_demuxer = { .p.name = "dvdvideo", .p.long_name = NULL_IF_CONFIG_SMALL("DVD-Video"), .p.priv_class = &dvdvideo_class, - .p.flags = AVFMT_NOFILE | AVFMT_SHOW_IDS | AVFMT_TS_DISCONT | - AVFMT_NO_BYTE_SEEK | AVFMT_NOGENSEARCH | AVFMT_NOBINSEARCH, + .p.flags = AVFMT_SHOW_IDS | AVFMT_TS_DISCONT | AVFMT_SEEK_TO_PTS | + AVFMT_NOFILE | AVFMT_NO_BYTE_SEEK | AVFMT_NOGENSEARCH | AVFMT_NOBINSEARCH, .priv_data_size = sizeof(DVDVideoDemuxContext), .flags_internal = FF_INFMT_FLAG_INIT_CLEANUP, .read_close = dvdvideo_close, .read_header = dvdvideo_read_header, - .read_packet = dvdvideo_read_packet + .read_packet = dvdvideo_read_packet, + .read_seek = dvdvideo_read_seek }; From patchwork Sun Jul 28 07:34:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 50776 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp536480vqi; Sun, 28 Jul 2024 00:35:48 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUQgmvRAE/25jMfYP694jc2INv7jr31wSJ+iKpSRj+QD8eCETyMmOrLkezd37jdQ35JL0j5LvhVe8sUUPrea+bLP6WtTo5rGLimCg== X-Google-Smtp-Source: AGHT+IEJkiD6NFCLPSij6W22W6DozfME0O1C7XKr66YWZIbZ1pQVx3+AR8gAIy1wUgV2bxWD/G9e X-Received: by 2002:ac2:52b4:0:b0:52c:e1cd:39b7 with SMTP id 2adb3069b0e04-5309b269cfdmr3078928e87.5.1722152148607; Sun, 28 Jul 2024 00:35:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722152148; cv=none; d=google.com; s=arc-20160816; b=jhn+/229wl4IzAASEPaBGRejAGje14TV1xp1kUnkbQiSULVAIoVTF2EKM+Gnh3Rf9v rRVR38fc5MqFqgQWFGLooX7bQhBsS++1zid3PPTKXHwDrRFiGj7aRMH0VjDUJcaOULIJ f1QsQ4EP2aBt8RigkUjVsPgKSsWs7yrOxdEjNuM9VMYCFY9Fb9L65esAfwii0tadBHKM nE5RSJAMxrfNYPkDLdJQWnsZTb6bdZfaWsJJXKkt8Gvh3qV+NaBUTwBIISCM013s4ycZ Mi1cQzFSFeqPdmuXnia3cC21a+afJZgSGN8mq81E4C1KchMuOLYEItB8YVMCMN++B0ey c2yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=kf/fSoNHfIpYAu1DEtqox87tSFwNf6bEOCkHRbj1iMo=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=BCknGpjEBPy1DZnuoRBl78CJcxpIkUu0MORmjyT9yGvmdDeZgdG9fNmc4aWZlhljsv G6i+nme73jEv9iezFxBstr+NL4Zp58/GPRJEepIdCA/XLZvlA7naHPAE0xOrwCatbAfR 0YWqFIz9g72fDMcn6AgBgfipFa+1cNtBzrsMI5kTqzfoyHFLxInKsHyptkOtXRyK7jMC 8iUFZM5gv/dOQZBsZoxfbM6skzfxJwnGrMQ5FL7ijkVY0o0NQ2kyNY0A/eEDhOwMoEaR 10zLEPEfgR7M3RKv+ofV11ne+Cx5Uy939lgblVGK2+IZkSLTV43c/VyLdZBEI9LwmrYb PNpA==; 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=U5k6iQQR; 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-52fd5c1840csi2089469e87.642.2024.07.28.00.35.47; Sun, 28 Jul 2024 00:35: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; dkim=neutral (body hash did not verify) header.i=@proxyid.net header.s=google header.b=U5k6iQQR; 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 DCF3268D8A7; Sun, 28 Jul 2024 10:35:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f226.google.com (mail-yw1-f226.google.com [209.85.128.226]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BB23168D76C for ; Sun, 28 Jul 2024 10:35:08 +0300 (EEST) Received: by mail-yw1-f226.google.com with SMTP id 00721157ae682-65cd720cee2so10155367b3.1 for ; Sun, 28 Jul 2024 00:35:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1722152107; x=1722756907; 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=yGNnH1Z/JnRHGkFNph6dhIsUzzX/OsE4lLA+1qrJ0jM=; b=U5k6iQQRo1Q5uJCtZ1vMnP0zjWZcdE2lbLFcrtBJMjjmJyay9r5NdI4PaJSTFCZQG1 sICfAwjNtEwuow+y2suvgdAhKTq58HAp2APX9gxml39WJd/u1VI82RPZwQViwydV2OR6 +R5G5wA6Tx6djWpLApoeSQZBx8xkY6w2dQWYGBexDB1s6FIABOH5LoQcOLNQASrolyjb eYgXfYK+vvyMTlIi1wcbiVQztFIm1xhzart0KuilQTkasSseuSuMe4LBvlDjQtMK7Kbk onr8nfu1hpBPfgay1A78POhadR/6a5tTg7hYB4dXQD3XxNjDtFwN1rSSOG5UxOhhJ1PR /JoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722152107; x=1722756907; 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=yGNnH1Z/JnRHGkFNph6dhIsUzzX/OsE4lLA+1qrJ0jM=; b=bhMdfTo9L2st5Rdmpdx/hkaSDU3CzGQu5fcevyOGrvuuIWFl/cMOJcRLHN911xj3wn QvwfIz15nuNzO3pY2jmOoWf4tttKBlRuphRFZ5GgQamkMbJYdP8POpM56tlvmuhgcIYK VZZH0aFOtQ+faVZl7OmwTfjgjggm5A/Ucjrw1T4fmpDHbkTr1zirh0hR6XvT9DdT9p/l vhrTsIFUSx+Gu9fP8Z+URMpQM5zDBQZvIgB35QtvmiZjDVt3gtxGv73oRegh5IAS2Ja4 egbpycUPFWT3n505HzgzhxJv18gVTH3Pd/0SHf7h2JpzbK+N15xvGt5NzBb2EOhjzoVX nObA== X-Gm-Message-State: AOJu0Yxl2H33ark0fzTBX7ucpcPQ4oliPWMK5unToHJx+in1JUYXP/Hq VdPQeuwWvJmjSqwlH9mdabJOj/PL/0gY7K4vpNHlIiU5/CzAOfcKXKKrdA9dxHSnrMTZBWoZir+ ZvD7M6+siIHghhUMf9+CfmaD9JMkoHWkXB7T6IOfD X-Received: by 2002:a81:6905:0:b0:65f:93c1:fee9 with SMTP id 00721157ae682-67a05c8b8f9mr49379497b3.9.1722152107497; Sun, 28 Jul 2024 00:35:07 -0700 (PDT) Received: from wsx-cc1-001.. (c-76-136-218-80.hsd1.il.comcast.net. [76.136.218.80]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-6756ad425desm5735937b3.61.2024.07.28.00.35.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 00:35:07 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jul 2024 02:34:41 -0500 Message-Id: <20240728073445.725161-4-marth64@proxyid.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> References: <20240728073445.725161-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] avformat/dvdvideodec: Combine libdvdread and libdvdnav log callbacks 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: ZRgYcR47kP5M The methods are effectively the same but reference different public enums, so roll them up into a macro. Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 64 +++++++++++++++------------------------ 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index e8301b1173..f6373d8ade 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -173,40 +173,28 @@ typedef struct DVDVideoDemuxContext { int subdemux_reset; /* signal that subdemuxer should be reset */ } DVDVideoDemuxContext; -static void dvdvideo_libdvdread_log(void *opaque, dvd_logger_level_t level, - const char *msg, va_list msg_va) -{ - AVFormatContext *s = opaque; - char msg_buf[DVDVIDEO_LIBDVDX_LOG_BUFFER_SIZE]; - int lavu_level = AV_LOG_DEBUG; - - vsnprintf(msg_buf, sizeof(msg_buf), msg, msg_va); - - if (level == DVD_LOGGER_LEVEL_ERROR) - lavu_level = AV_LOG_ERROR; - else if (level == DVD_LOGGER_LEVEL_WARN) - lavu_level = AV_LOG_WARNING; - - av_log(s, lavu_level, "libdvdread: %s\n", msg_buf); -} - -static void dvdvideo_libdvdnav_log(void *opaque, dvdnav_logger_level_t level, - const char *msg, va_list msg_va) -{ - AVFormatContext *s = opaque; - char msg_buf[DVDVIDEO_LIBDVDX_LOG_BUFFER_SIZE]; - int lavu_level = AV_LOG_DEBUG; - - vsnprintf(msg_buf, sizeof(msg_buf), msg, msg_va); - - if (level == DVDNAV_LOGGER_LEVEL_ERROR) - lavu_level = AV_LOG_ERROR; - /* some discs have invalid language codes set for menus, which throws noisy warnings */ - else if (level == DVDNAV_LOGGER_LEVEL_WARN && !av_strstart(msg, "Language", NULL)) - lavu_level = AV_LOG_WARNING; - - av_log(s, lavu_level, "libdvdnav: %s\n", msg_buf); -} +#define LIBDVDX_LOG_CALLBACK(X, CB_TYPE, LEVEL_TYPE, LEVEL_PREFIX) \ + static void dvdvideo_##X##_log(void *o, LEVEL_TYPE level, const char *msg, va_list msg_va) \ + { \ + AVFormatContext *s = o; \ + char msg_buf[DVDVIDEO_LIBDVDX_LOG_BUFFER_SIZE]; \ + int lavu_level = AV_LOG_DEBUG; \ + \ + vsnprintf(msg_buf, sizeof(msg_buf), msg, msg_va); \ + \ + if (level == LEVEL_PREFIX##_ERROR) \ + lavu_level = AV_LOG_ERROR; \ + else if (level == LEVEL_PREFIX##_WARN && \ + !av_strstart(msg, "Language", NULL)) /* muffle menus with invalid language */ \ + lavu_level = AV_LOG_WARNING; \ + \ + av_log(s, lavu_level, #X": %s\n", msg_buf); \ + } \ + \ + static const CB_TYPE dvdvideo_##X##_log_cb = (CB_TYPE) { .pf_log = dvdvideo_##X##_log }; \ + +LIBDVDX_LOG_CALLBACK(libdvdread, dvd_logger_cb, dvd_logger_level_t, DVD_LOGGER_LEVEL) +LIBDVDX_LOG_CALLBACK(libdvdnav, dvdnav_logger_cb, dvdnav_logger_level_t, DVDNAV_LOGGER_LEVEL) static void dvdvideo_ifo_close(AVFormatContext *s) { @@ -226,11 +214,9 @@ static int dvdvideo_ifo_open(AVFormatContext *s) { DVDVideoDemuxContext *c = s->priv_data; - dvd_logger_cb dvdread_log_cb; title_info_t title_info; - dvdread_log_cb = (dvd_logger_cb) { .pf_log = dvdvideo_libdvdread_log }; - c->dvdread = DVDOpen2(s, &dvdread_log_cb, s->url); + c->dvdread = DVDOpen2(s, &dvdvideo_libdvdread_log_cb, s->url); if (!c->dvdread) { av_log(s, AV_LOG_ERROR, "Unable to open the DVD-Video structure\n"); @@ -516,15 +502,13 @@ static int dvdvideo_play_open(AVFormatContext *s, DVDVideoPlaybackState *state) { DVDVideoDemuxContext *c = s->priv_data; - dvdnav_logger_cb dvdnav_log_cb; dvdnav_status_t dvdnav_open_status; int32_t disc_region_mask; int32_t player_region_mask; int cur_title, cur_pgcn, cur_pgn; pgc_t *pgc; - dvdnav_log_cb = (dvdnav_logger_cb) { .pf_log = dvdvideo_libdvdnav_log }; - dvdnav_open_status = dvdnav_open2(&state->dvdnav, s, &dvdnav_log_cb, s->url); + dvdnav_open_status = dvdnav_open2(&state->dvdnav, s, &dvdvideo_libdvdnav_log_cb, s->url); if (!state->dvdnav || dvdnav_open_status != DVDNAV_STATUS_OK || From patchwork Sun Jul 28 07:34:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 50777 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp536527vqi; Sun, 28 Jul 2024 00:35:57 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU5vvMaUo1Ml2ZgrK8xDNkaUEfxSAWM2eIeEoyk9/vV+RPtkqOkzzmtTNw7TbwR79tsIBiTp++SjTNnZHCLRKvvnWR/dq6lQpqK2Q== X-Google-Smtp-Source: AGHT+IGJnCKS9/nPe/fm7YEtlqE0WVRuQTljBpufJB3sCheINRQB82BaDkrixCBXD4cQsfAYENOY X-Received: by 2002:a17:907:d17:b0:a7a:9f0f:ab26 with SMTP id a640c23a62f3a-a7d4006e3f4mr296067766b.23.1722152157169; Sun, 28 Jul 2024 00:35:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722152157; cv=none; d=google.com; s=arc-20160816; b=JgixKef+6X4lmkESF8vUsA1nZ1EZHO2e6rAMTXqSqstJwmp5y1hyLZBfFpVO9o3Y/r FmIASeYaZXFSzw1DYUQ+5ss//uSbAhU697zKSBffWVmG5mOu00rhOkB/IRleosV6QSp8 Icev+RsgLfeqkPyxIFDJn0SKW4BiDvohHNmWcEVE4yuQhZfH/P80QRpfJ4MB29saaeXh odMs0TOBSfhTzVlD5FhKwcA8g570mP6zLr221PclRex5JBBLQeFL6/NMzWQbt6/BEnrG h+XmXwquUNJSN2t86f5cevWwIsezV9pyjrjVpcGcUPqUGB2g3W9W8KmfZ3iZ6akgyQFx ej/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: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=MAT5yQaGQ4O5O2iDhMBQuKYQpfXj5fcAu/a4ktBXzpM=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=wehgW0f/SloUden6A33/unw25nqwAhFSLPD9SGODUhZw6Km9eC0XXUcC7hx2Wo8qA4 xytlOf2CBWEDE01o//m/GQxFhJGLuI5pgnxtMdasvKPWGPyQcBRHXAlmc/Xj31EhQ6OI LqB1wHhdAOQ0VPno5V5sTd25LLRGWClJh8NzYtXHsApwBd2O44Sscu7/dfUFnWmSb6JS TApqPzo4fLpE5dCx4E0cctnnbiHwb6PbQBskZsS09vKNJWoaV1lXTYMvHe77GU10Di6s P2mY5ka7Zrv/m9ZZURGc0Qut2r+FGLmhI9JYiAiCFL8DDUIcf57eK8Nq/Ru0LCYgLBII J1vA==; 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=RQSo1PWY; 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 a640c23a62f3a-a7acac8daebsi465793866b.720.2024.07.28.00.35.56; Sun, 28 Jul 2024 00:35: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; dkim=neutral (body hash did not verify) header.i=@proxyid.net header.s=google header.b=RQSo1PWY; 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 39B7B68D8C3; Sun, 28 Jul 2024 10:35:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f227.google.com (mail-yw1-f227.google.com [209.85.128.227]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 37F3868D744 for ; Sun, 28 Jul 2024 10:35:09 +0300 (EEST) Received: by mail-yw1-f227.google.com with SMTP id 00721157ae682-65f9708c50dso11414737b3.2 for ; Sun, 28 Jul 2024 00:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1722152108; x=1722756908; 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=MDTiYgmwY7+XKTOSuCQS+EiQBorowoe+0JnySgRJjV4=; b=RQSo1PWYR45P9Pg+yA/CPKNZBmN6qKQdzfekcgwXKe5l0DiKbNt7VEbtbqdPRwhRPn 0dl1qWXhrjJd/11cg5CIuwVJk/2e3kkgVoIiTdYheVDbmu1Ss2y0PrN+LppcP+EBXIJr mH6gQdKc4sOIVsC+BIZXoS2O4kXOynjZZcsH0wnhodEYCru7R/AmrQPtZU2ACbdX+xu/ iQv9yGKWmT/9sPSC6/b4P3O5kEm//NWRW873S4ktPI8fhTNgV72r2sbgx+Miv6Hq1W0R hBp8wXiCQdE2ZaCmIJFIc2Pqh1wftxbwwUsWV+dJLhvcshuJaUrdhO3KHL1scCtZV66W 30Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722152108; x=1722756908; 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=MDTiYgmwY7+XKTOSuCQS+EiQBorowoe+0JnySgRJjV4=; b=ByL5Sm7LFOlC3IF3RCYgjCWi7tnyunQIDFSjs/ztDXGMDyrYPeryOGtDewf7HB6JZU 7f/DJd1SHT7A/UUsbrNktEFjwrOq5qhyCm6AJniI880oHEIifYW5Mt6dH4PYGJdsLmx7 YKEt70kebl+pVmpyDB62BASTpdY1snXR23CQoOcjNeWR5/2iZObBKsR1UzT7RTim3/xT TwWmHikdLA64s7N0b/VT9xqbguIIAiaP/p8DBtoMeQxpzi4myyxUHMaWi3D2eOR6gtjO mgV/10fWSY2TqFXV5PKLjOFi0t+qadBQO1fyApbtHlJmfHe+qKt3RLBw5nzatrvIzRqh qJXQ== X-Gm-Message-State: AOJu0Yx4BzTC8fFBQPoHoZXlffozX+qqijnDDuLivocrUvegpZHpPtLw KF1KwVHNESCcppNwfSsJYMu2kiDInAANFQqodUAg4gO0TCG+3U0uH4Qp2ha5/3NGmFlhDKhDt4t Q4h+gbj+C8KQCC7qkthmSDGtS4CWM9/3EXldZatds X-Received: by 2002:a05:690c:6304:b0:665:a133:f294 with SMTP id 00721157ae682-67a0968dbfamr51865907b3.33.1722152107880; Sun, 28 Jul 2024 00:35:07 -0700 (PDT) Received: from wsx-cc1-001.. (c-76-136-218-80.hsd1.il.comcast.net. [76.136.218.80]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-6756ad425desm5735937b3.61.2024.07.28.00.35.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 00:35:07 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jul 2024 02:34:42 -0500 Message-Id: <20240728073445.725161-5-marth64@proxyid.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> References: <20240728073445.725161-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avformat/dvdvideodec: Chapter markers and trimming for menus 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: z8YkyOAac4iG Menus can have chapter markers by way of cells, and empty menus can be detected with existing functionality. Menu selection also is in need of usability improvement. Implement chapter markers for menus, let the trim function detect empty menus, remove the unnecessary ceremony around the -pg option by simply defaulting it to 1, and finally default the menu_vts option to 1 since most DVD menus can be found there. Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 106 +++++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 48 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index f6373d8ade..a908acfa7f 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -367,6 +367,14 @@ static int dvdvideo_menu_open(AVFormatContext *s, DVDVideoPlaybackState *state) if (c->opt_menu_vts > 0) state->in_vts = 1; + if (c->opt_trim && !dvdvideo_is_pgc_promising(s, state->pgc)) { + av_log(s, AV_LOG_ERROR, "Menu LU %d, VTS %d, PGC %d looks empty; " + "if you want to try anyway, disable the trim option\n", + c->opt_menu_lu, c->opt_menu_vts, c->opt_pgc); + + return AVERROR_INVALIDDATA; + } + if (!(state->vob_file = DVDOpenFile(c->dvdread, c->opt_menu_vts, DVD_READ_MENU_VOBS))) { av_log(s, AV_LOG_ERROR, !c->opt_menu_vts ? "Unable to open main menu VOB (VIDEO_TS.VOB)\n" : @@ -527,7 +535,7 @@ static int dvdvideo_play_open(AVFormatContext *s, DVDVideoPlaybackState *state) goto end_dvdnav_error; } - if (c->opt_pgc > 0 && c->opt_pg > 0) { + if (c->opt_pgc > 0) { if (dvdnav_program_play(state->dvdnav, c->opt_title, c->opt_pgc, c->opt_pg) != DVDNAV_STATUS_OK) { av_log(s, AV_LOG_ERROR, "Unable to start playback at title %d, PGC %d, PG %d\n", c->opt_title, c->opt_pgc, c->opt_pg); @@ -893,8 +901,8 @@ static int dvdvideo_chapters_setup_preindex(AVFormatContext *s) { DVDVideoDemuxContext *c = s->priv_data; - int ret = 0, interrupt = 0; - int nb_chapters = 0, last_ptt = c->opt_chapter_start; + int ret, partn, last_partn; + int interrupt = 0, nb_chapters = 0; uint64_t cur_chapter_offset = 0, cur_chapter_duration = 0; DVDVideoPlaybackState state = {0}; @@ -902,27 +910,38 @@ static int dvdvideo_chapters_setup_preindex(AVFormatContext *s) int is_nav_packet; if (c->opt_chapter_start == c->opt_chapter_end) - return ret; + return 0; - if ((ret = dvdvideo_play_open(s, &state)) < 0) - return ret; + if (c->opt_menu) { + if ((ret = dvdvideo_menu_open(s, &state)) < 0) + return ret; + last_partn = state.celln; + } else { + if ((ret = dvdvideo_play_open(s, &state)) < 0) + return ret; + last_partn = c->opt_chapter_start; + } if (state.pgc->nr_of_programs == 1) goto end_close; - av_log(s, AV_LOG_INFO, - "Indexing chapter markers, this will take a long time. Please wait...\n"); + av_log(s, AV_LOG_INFO, "Indexing chapter markers, this may take a long time. Please wait...\n"); while (!(interrupt = ff_check_interrupt(&s->interrupt_callback))) { - ret = dvdvideo_play_next_ps_block(s, &state, nav_buf, DVDVIDEO_BLOCK_SIZE, - &is_nav_packet); + if (c->opt_menu) + ret = dvdvideo_menu_next_ps_block(s, &state, nav_buf, DVDVIDEO_BLOCK_SIZE, &is_nav_packet); + else + ret = dvdvideo_play_next_ps_block(s, &state, nav_buf, DVDVIDEO_BLOCK_SIZE, &is_nav_packet); + if (ret < 0 && ret != AVERROR_EOF) goto end_close; if (!is_nav_packet && ret != AVERROR_EOF) continue; - if (state.ptt == last_ptt) { + partn = c->opt_menu ? state.celln : state.ptt; + + if (partn == last_partn) { cur_chapter_duration += state.vobu_duration; /* ensure we add the last chapter */ if (ret != AVERROR_EOF) @@ -941,7 +960,7 @@ static int dvdvideo_chapters_setup_preindex(AVFormatContext *s) cur_chapter_offset += cur_chapter_duration; cur_chapter_duration = state.vobu_duration; - last_ptt = state.ptt; + last_partn = partn; if (ret == AVERROR_EOF) break; @@ -961,7 +980,10 @@ static int dvdvideo_chapters_setup_preindex(AVFormatContext *s) ret = 0; end_close: - dvdvideo_play_close(s, &state); + if (c->opt_menu) + dvdvideo_menu_close(s, &state); + else + dvdvideo_play_close(s, &state); return ret; } @@ -1512,47 +1534,47 @@ static int dvdvideo_read_header(AVFormatContext *s) int ret; if (c->opt_menu) { - if (c->opt_region || - c->opt_title > 1 || - c->opt_preindex || - c->opt_chapter_start > 1 || + if (c->opt_region || + c->opt_title > 1 || + c->opt_chapter_start > 1 || c->opt_chapter_end > 0) { - av_log(s, AV_LOG_ERROR, "-menu is not compatible with the -region, -title, " - "-preindex, or -chapter_start/-chapter_end options\n"); + + av_log(s, AV_LOG_ERROR, "Menu mode does not use region, title, or chapter ranges\n"); + return AVERROR(EINVAL); } if (!c->opt_pgc) { - av_log(s, AV_LOG_ERROR, "If -menu is enabled, -pgc must be set to a non-zero value\n"); + av_log(s, AV_LOG_ERROR, "Menu mode requires a PGC number\n"); return AVERROR(EINVAL); } if (!c->opt_menu_lu) { av_log(s, AV_LOG_INFO, "Defaulting to menu language unit #1. " - "This is not always desirable, validation suggested.\n"); + "This is not always the desired menu, validation suggested\n"); c->opt_menu_lu = 1; } - if (!c->opt_pg) { - av_log(s, AV_LOG_INFO, "Defaulting to menu PG #1. " - "This is not always desirable, validation suggested.\n"); - - c->opt_pg = 1; - } - - if ((ret = dvdvideo_ifo_open(s)) < 0 || - (ret = dvdvideo_menu_open(s, &c->play_state)) < 0 || - (ret = dvdvideo_subdemux_open(s)) < 0 || - (ret = dvdvideo_video_stream_setup(s)) < 0 || + if ((ret = dvdvideo_ifo_open(s)) < 0 || + (c->opt_preindex && (ret = dvdvideo_chapters_setup_preindex(s)) < 0) || + (ret = dvdvideo_menu_open(s, &c->play_state)) < 0 || + (ret = dvdvideo_subdemux_open(s)) < 0 || + (ret = dvdvideo_video_stream_setup(s)) < 0 || (ret = dvdvideo_audio_stream_add_all(s)) < 0) return ret; return 0; } - if (c->opt_chapter_end != 0 && c->opt_chapter_start > c->opt_chapter_end) { + if (c->opt_pgc && (c->opt_chapter_start > 1 || c->opt_chapter_end > 0 || c->opt_preindex)) { + av_log(s, AV_LOG_ERROR, "PGC extraction is not compatible with chapter options\n"); + + return AVERROR(EINVAL); + } + + if (!c->opt_pgc && (c->opt_chapter_end != 0 && c->opt_chapter_start > c->opt_chapter_end)) { av_log(s, AV_LOG_ERROR, "Chapter (PTT) range [%d, %d] is invalid\n", c->opt_chapter_start, c->opt_chapter_end); @@ -1561,23 +1583,11 @@ static int dvdvideo_read_header(AVFormatContext *s) if (c->opt_title == 0) { av_log(s, AV_LOG_INFO, "Defaulting to title #1. " - "This is not always the main feature, validation suggested.\n"); + "This is not always the main feature, validation suggested\n"); c->opt_title = 1; } - if (c->opt_pgc) { - if (c->opt_pg == 0) { - av_log(s, AV_LOG_ERROR, "Invalid coordinates. If -pgc is set, -pg must be set too.\n"); - - return AVERROR(EINVAL); - } else if (c->opt_chapter_start > 1 || c->opt_chapter_end > 0 || c->opt_preindex) { - av_log(s, AV_LOG_ERROR, "-pgc is not compatible with the -preindex or " - "-chapter_start/-chapter_end options\n"); - return AVERROR(EINVAL); - } - } - if ((ret = dvdvideo_ifo_open(s)) < 0) return ret; @@ -1751,8 +1761,8 @@ static const AVOption dvdvideo_options[] = { {"chapter_start", "entry chapter (PTT) number", OFFSET(opt_chapter_start), AV_OPT_TYPE_INT, { .i64=1 }, 1, 99, AV_OPT_FLAG_DECODING_PARAM }, {"menu", "demux menu domain", OFFSET(opt_menu), AV_OPT_TYPE_BOOL, { .i64=0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM }, {"menu_lu", "menu language unit (0=auto)", OFFSET(opt_menu_lu), AV_OPT_TYPE_INT, { .i64=0 }, 0, 99, AV_OPT_FLAG_DECODING_PARAM }, - {"menu_vts", "menu VTS (0=VMG main menu)", OFFSET(opt_menu_vts), AV_OPT_TYPE_INT, { .i64=0 }, 0, 99, AV_OPT_FLAG_DECODING_PARAM }, - {"pg", "entry PG number (0=auto)", OFFSET(opt_pg), AV_OPT_TYPE_INT, { .i64=0 }, 0, 255, AV_OPT_FLAG_DECODING_PARAM }, + {"menu_vts", "menu VTS (0=VMG root menu)", OFFSET(opt_menu_vts), AV_OPT_TYPE_INT, { .i64=1 }, 0, 99, AV_OPT_FLAG_DECODING_PARAM }, + {"pg", "entry PG number when paired with PGC number", OFFSET(opt_pg), AV_OPT_TYPE_INT, { .i64=1 }, 1, 255, AV_OPT_FLAG_DECODING_PARAM }, {"pgc", "entry PGC number (0=auto)", OFFSET(opt_pgc), AV_OPT_TYPE_INT, { .i64=0 }, 0, 999, AV_OPT_FLAG_DECODING_PARAM }, {"preindex", "enable for accurate chapter markers, slow (2-pass read)", OFFSET(opt_preindex), AV_OPT_TYPE_BOOL, { .i64=0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM }, {"region", "playback region number (0=free)", OFFSET(opt_region), AV_OPT_TYPE_INT, { .i64=0 }, 0, 8, AV_OPT_FLAG_DECODING_PARAM }, From patchwork Sun Jul 28 07:34:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 50780 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp537805vqi; Sun, 28 Jul 2024 00:41:57 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXGptERkJf6Hh7DJb82lFD8KUjEggRDMoOb7knfPfeC7cx5YV0iExKhIytHE+29FC5Z7RaQoJmWuzxdbQEbfeE6W+UvexSYhuP6EQ== X-Google-Smtp-Source: AGHT+IEcdpkO6Jq6Y0ljP0xwCHaJ52q2yiXod1YlokZShI8/Fu38lkMcR0hx7RIdYY+Kq8htHCT6 X-Received: by 2002:ac2:568a:0:b0:52c:8b69:e039 with SMTP id 2adb3069b0e04-5309b2697a9mr4102852e87.4.1722152516904; Sun, 28 Jul 2024 00:41:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722152516; cv=none; d=google.com; s=arc-20160816; b=yZ0oQ+xWlVL5dern2FXHh5co3xaJlyssZikqoQeShiYNufEVkiW4oB/1Uc1LHCfQd1 snE6ezth/z/lRAD9lZ9E66wLMTgZgoOTPUnMwP/v4WECc/N9GQwgZ7ZApErTuyyHlxwn P3n/YKo/fKSV9JG8JQwCGsUw5U9YRd23sNh1WTsc7qHaz5tmDj4eG6rdtmxMgnS60p5F Oe5dd+c8v1SgvhF6HXuAUCqX5d9KcVZwfSgwPbrE66RXATrjroMxJVKzYH+Dt5xzF3XG nVG1ElHivuUAsJPFN9KCd5y1bnIWIuUUv5HA14FP432bEVwy5M3RPlex6IiWRpMHGGlh 4G5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=FaT1ZNGLinnX6g7a5vJYXN5tY/wU1LTMVGvnPpqDD2s=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=h1siSKdjTrO0slupntdt3KylWk2kbl44ypNU3t2ufrFeGhXAMcqWZA+iqi/80q7En1 inu4F9uCp+4jo0u63oeEfhNwqTmA1U3Ie9c7vG+0iouawcT0MWVig29BaIWGzvaWdkAS t0KJP/kOLhpDhbEYudJgN7Ayl3VcOyULKyD4fVArPXvXxUrVAiSBfnzgZtS6ofD/NySk P6wvpovVG95AZ8fPSHCC00/VI84FEe9Uok0BuaGUrcPsG7s+lZjJavcWPx+Pl+fGDAEG yWS5Kpgbwgrzp4lVj0dvUpW0qVs8PXzIFvho6W9mTAUBCPWHs3Tq+Zcn01XCW4epnH0L cVFg==; 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=CnIzoVau; 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-52fd5bee5e5si2031634e87.325.2024.07.28.00.41.56; Sun, 28 Jul 2024 00:41:56 -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=CnIzoVau; 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 730B668D789; Sun, 28 Jul 2024 10:35:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f228.google.com (mail-yw1-f228.google.com [209.85.128.228]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7CE1468D851 for ; Sun, 28 Jul 2024 10:35:09 +0300 (EEST) Received: by mail-yw1-f228.google.com with SMTP id 00721157ae682-65f9e25fffaso11660937b3.3 for ; Sun, 28 Jul 2024 00:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1722152108; x=1722756908; 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=v4nylUEXu+HHOXO9I2wHchVtXDdPGWDmp3viNNVvnsI=; b=CnIzoVauFPrTDaNWSqYuTIVO8CWjK3L1nM6UtlGJn972SolH4RNELCtkXbNe4K1opA VLuSOLsBAwtB5UQtMTO0DdfRczYEYQaPWSHVmEQ4B83ikK2fdFkrTtUCczhJF/LfjAMq /nRF+LTWSz2gEUMo5bMGTcfozvrfSIQqH0Vo2Ms0llYkDi3s9diWE5xxZJuWjhEzbL+d xYMUJJ1eGKCysFLFQBnx71W2znrRimWGDDN0RRlEQ+Bm2WveDSGsH1znoP4AOaNSnPjN W73vhwhY9msgTGCVkW2IwSwdsdzJZXrn5ME7fuyhnrx0mKflP2n7TbjorewCMjDoCRkE ++KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722152108; x=1722756908; 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=v4nylUEXu+HHOXO9I2wHchVtXDdPGWDmp3viNNVvnsI=; b=GYIcBwatxqgN3tlgl4CNs0PeG2depRYBq9kd6Kgw6gqzS5Xksas+EK+E2yhruAD44B aOlQ04mgamXMWXmBOWT26So7dzL8AaMUlE6B8rCXEclnhMGh0QjDx+1THH69fArPvELG KoTsk179rOe0+dMufe6AWMn/aL6NIE61qoR+c4Myidixe17m62lrMVRV6b/STkVij79E 987+uJRWS9dqpT5VEf1LynCU3Fq42l+7E9/pYfZ4qx+Lh6KOgHsR45GUrboB+TZZ9j5e WXjG5ruUz2WB+8OVjRDS0bp/JW9DKpEX8BLgs1Ma7kwVZGPSV5eRT/sKMCgOURevjfSh 1MzQ== X-Gm-Message-State: AOJu0YzV4Pq+kVJ99SWE1KLF7fiJCICQOHf1i6X7Ek2MC68F2GdIUbK1 oII4gWIwX3GvTfV9k3Uzk9OX8Z6VBvVfOTxV7EuXq0qKtEyEa9VbRi/r/XJ+sXWBdtmEmSzQGKF h7yEDaJXjaxaD0Nc+wCJEudLShtJtA3a23xWJdzZL X-Received: by 2002:a05:690c:ec5:b0:65f:8209:3ede with SMTP id 00721157ae682-67a0a7fd7d0mr52230017b3.44.1722152108279; Sun, 28 Jul 2024 00:35:08 -0700 (PDT) Received: from wsx-cc1-001.. (c-76-136-218-80.hsd1.il.comcast.net. [76.136.218.80]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-6756ad425desm5735937b3.61.2024.07.28.00.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 00:35:08 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jul 2024 02:34:43 -0500 Message-Id: <20240728073445.725161-6-marth64@proxyid.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> References: <20240728073445.725161-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] avformat/dvdvideodec: Remove unused headers 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: 5IMNIYg21N9L Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index a908acfa7f..afc7836038 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -44,8 +44,6 @@ #include "libavutil/mem.h" #include "libavutil/opt.h" #include "libavutil/samplefmt.h" -#include "libavutil/time.h" -#include "libavutil/timestamp.h" #include "avformat.h" #include "avio_internal.h" From patchwork Sun Jul 28 07:34:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 50778 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp536598vqi; Sun, 28 Jul 2024 00:36:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWBheGj9mcydXifO7SkJvn7Qc0+Rgle42EXLvcIfKRsHXAorvdSVVi3ajyzpQmmFqBnRtxc4K2fuxGCb1v2JzjdU6eCVPWecSrk0w== X-Google-Smtp-Source: AGHT+IFdNHSjPv+SvNInknpJYt+nFyxNl9FB6D7XamrSNsD4q45wZ4SuS0LJ+A2rqGp5/TEsZIbP X-Received: by 2002:a05:6402:268f:b0:5a2:b867:3bcc with SMTP id 4fb4d7f45d1cf-5b0224cf580mr2581270a12.38.1722152173935; Sun, 28 Jul 2024 00:36:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722152173; cv=none; d=google.com; s=arc-20160816; b=JwUVn/+lsv9giAL9+qwrm2MQoHTF0TbuGdWF+f/tVwdudFzg2cWuVf/I9NIC7VuwwI F2n67YeiobhT3cveyoFT8g6dEK2aDuqpIJkmUzyBWu6UhsCA3z3USOCx+2S8DqKSvTCy /K9BfTvRGUS2JkzYAmw+eaK0HSsIJijC9wI7uHKSAqA+w0vd3MQgw5hkCJ9XdAY5xLtM SRRlDcbyNcJf4VUAPDiwEDP/uceRH2ms2aOdtGAyYi7t5R/4/ONIj4rEn4sSpvBrwssu zu90sL3cXt94G8BvrtZbHSE+CaykdyWmDf8wufxKan0VCTjo+Xt74n+NrLcACuj2gmpL 206w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=ZytdxogZHZyinHVcuIBKEzERz9A315WMj7Z0fYaeznU=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=rtjayCzo1ZLBXhTACZ4yafYM8z772RjP95K2R0m//+6EEpJutUOow3j4/UtBy/X6Pp 44JLUCReG/egG8fkh7Vkz2ywyzuFuvjRc9WNox+sbbLJKRDNg0aD+UzyZx1oZ6t1PVhk iZSi0Hju08fLpGuKu2vZPHq3gngtCrjjRGvUba9T7RSlQZocpTpivkkkgDPZVj7z5fWk 01l3WAuETZ+iuEZgG+fGnMqYyiSc/A9hDbCFIQFafQ4FfCG+1aS/pcn2ZcXQQK/AfRdp ni7bAdPeSFvcHampY7DuidFhbjhMKIIhz6PTncG/rHOX5DknjP7NYQJmfcrtCj9j/iJs yfzw==; 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=Er0KNXiK; 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 4fb4d7f45d1cf-5ac6632fddesi4594039a12.655.2024.07.28.00.36.13; Sun, 28 Jul 2024 00:36:13 -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=Er0KNXiK; 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 20AB968D8DD; Sun, 28 Jul 2024 10:35:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f225.google.com (mail-yw1-f225.google.com [209.85.128.225]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0393868D81A for ; Sun, 28 Jul 2024 10:35:10 +0300 (EEST) Received: by mail-yw1-f225.google.com with SMTP id 00721157ae682-66493332ebfso10038697b3.3 for ; Sun, 28 Jul 2024 00:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1722152108; x=1722756908; 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=zjJQMuocayCO6+sxCbJ3jypnO8vU2IOJ3maqwbNqSj4=; b=Er0KNXiKPzDJYKaNYXF/hS/uF6O4bdyF+/7gu9xv9GiFO0yxdDYMLDnPjusX5mLe/g Gfc+V0te6KKF5dN6OkN2eWHYaNPDof07hXDJ06yA6ut8r9Rqb5mfyu/h/s70antPr1sp Nr+nFn7F4qdNPYNaLIP9o5/8q0g+U+2TS4/UtAxa2jaJt7aGmbosRqtMCkr0Wbp9bCRh Zbvq649R+7+GooiaJRxRVVP5HU9jcdxBBbsa2Sre/zgX4H7cgvnJfKMEs8B7cidHfgJs ZiNbZkkkXthk4DF5JeDu2cJjLamk+54ofBB1SG8+Fry41zHjbQmYjs0pGitNRKuw8xVo VDpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722152108; x=1722756908; 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=zjJQMuocayCO6+sxCbJ3jypnO8vU2IOJ3maqwbNqSj4=; b=XnVSbXlkCjg2QAeos9y9IBBzbxxOoWiYSDa8nOXv6F7PxOEYdGUb/eO2Kr4zfzpzk3 q+vA4ooNgN59lqE3tlvUKUtUVTiHxircj7AIGPbxl+YbvMqjV06RcAFTYTNhjGp+tiWi 6rOPYRh9zu+f4XE/57qa8wy22YvZFxeNiPJA12B+LXdIAJLRuu6pefZO2kPZJSvxsafU XRUq8xJeUbbZaIUB6InPwPTdrvNHeeS20t+QQm2lY1erw2eiqbBU5pSBFXIA9rSgeHI0 VEHmw3h7/y+i5sY1H8Qw3xm9BIsLXPOUHvEGHzRynKXG4VQ/SmRuX+cL4MEFML3YcK2t IPUA== X-Gm-Message-State: AOJu0Yxo/X/kDt0Fv1X38/HX2xKaeU8Zd07NXydMpzhWb8Io2kkaC3lZ Qyttd0HqfeFY1J6QVUQ6cRiHPwREWGG4bIrCQAK+QZL6OV4IIz21Qn+L6S6rTSuqACFCARC580x RDa1avwq4xw+WBxeAW7QvjmDBygYlGT3ycn3H4NUx X-Received: by 2002:a0d:e387:0:b0:66a:b6d2:c184 with SMTP id 00721157ae682-67b7bf994e9mr46083247b3.16.1722152108640; Sun, 28 Jul 2024 00:35:08 -0700 (PDT) Received: from wsx-cc1-001.. (c-76-136-218-80.hsd1.il.comcast.net. [76.136.218.80]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-6756ad425desm5735937b3.61.2024.07.28.00.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 00:35:08 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jul 2024 02:34:44 -0500 Message-Id: <20240728073445.725161-7-marth64@proxyid.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> References: <20240728073445.725161-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] avformat/dvdvideodec: Simplify/clarify logs, comments, and class name 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: 8Id5AAztDCWp Signed-off-by: Marth64 --- libavformat/dvdvideodec.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c index afc7836038..04c5cbea8e 100644 --- a/libavformat/dvdvideodec.c +++ b/libavformat/dvdvideodec.c @@ -21,7 +21,7 @@ /* * See doc/demuxers.texi for a high-level overview. * - * The tactical approach is as follows: + * The tactical approach for title playback is as follows: * 1) Open the volume with dvdread * 2) Analyze the user-requested title and PGC coordinates in the IFO structures * 3) Request playback at the coordinates and chosen angle with dvdnav @@ -565,8 +565,8 @@ static int dvdvideo_play_open(AVFormatContext *s, DVDVideoPlaybackState *state) } if (c->opt_trim && !dvdvideo_is_pgc_promising(s, pgc)) { - av_log(s, AV_LOG_ERROR, "Title %d, PGC %d looks empty (may consist of padding cells), " - "if you want to try anyway, disable the -trim option\n", + av_log(s, AV_LOG_ERROR, "Title %d, PGC %d looks empty (may consist of padding cells); " + "if you want to try anyway, disable the trim option\n", c->opt_title, state->pgcn); return AVERROR_INVALIDDATA; @@ -757,7 +757,7 @@ static int dvdvideo_play_next_ps_block(AVFormatContext *s, DVDVideoPlaybackState if (!state->in_ps) { if (c->opt_trim && !dvdvideo_is_cell_promising(s, state->pgc, state->celln)) { - av_log(s, AV_LOG_INFO, "Skipping padding cell #%d\n", state->celln); + av_log(s, AV_LOG_INFO, "Trimming padding cell #%d\n", state->celln); i = 0; continue; @@ -1175,8 +1175,7 @@ static int dvdvideo_audio_stream_analyze(AVFormatContext *s, audio_attr_t audio_ if (audio_attr.application_mode == 1) { entry->disposition |= AV_DISPOSITION_KARAOKE; - av_log(s, AV_LOG_WARNING, "Extended karaoke metadata is not supported at this time " - "(stream id=%d)\n", startcode); + av_log(s, AV_LOG_WARNING, "Karaoke extensions not supported (stream id=%d)\n", startcode); } if (audio_attr.code_extension == 2) @@ -1770,7 +1769,7 @@ static const AVOption dvdvideo_options[] = { }; static const AVClass dvdvideo_class = { - .class_name = "DVD-Video demuxer", + .class_name = "dvdvideo", .item_name = av_default_item_name, .option = dvdvideo_options, .version = LIBAVUTIL_VERSION_INT From patchwork Sun Jul 28 07:34:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marth64 X-Patchwork-Id: 50781 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp538910vqi; Sun, 28 Jul 2024 00:46:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVwokTMQwLLcWIOSztaSXJAdIpbzE3rq2dABpYpPcRteCRdp1HrUMI4vHAAxh98g+dRb/oiNSmkODUuw8xwHeM6AwKsXWx5E/9SXw== X-Google-Smtp-Source: AGHT+IFUPMoUsXWHbkzoSD10nPByIMrE/vvbvqOXTf5Bj2ghlSRM6KqR01z5GRBZ9mNPIglnOyek X-Received: by 2002:ac2:54b3:0:b0:52c:d7c9:fb14 with SMTP id 2adb3069b0e04-5309b28119fmr2436704e87.34.1722152814647; Sun, 28 Jul 2024 00:46:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722152814; cv=none; d=google.com; s=arc-20160816; b=YAsg2gjk1aaBrbBFhqmk/+Ge5FV1hhDo1q/RslrdFGeZbvodRW6U3eF2xGsNcI+oQz 7JEnxcqBRVJdk7jg/+Z0MZEa8B1g9FTyZriBTapEvIDQk2N3zF8rT133b9eTOVWS9Yx/ O06liZT86+AiPp3WqA2QXVQrYhucpz7RDUnsDB9qQoKpPgYwLAi+EvAijm0nSn5OhT5S jgT1kCMi7mo2HzIEfpWTElaEmOxHEnL7yDTeLzJloUPm6ssTbyrRqLpUeX9I0Y8HfiLX Y+grMkFoGRn0aeU5IFycUNJMjnCsllOJpzy+wctAYBUNd3MpWjXoLqDagg49dI2YdzNl c6ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=xeEqQ1XXPHbZCXdlYWAU4ralUNFcKSC/9OgY105fiLM=; fh=PlWMzmI9LD2qGS7ipLrQl8z0iaQTLQLHzoGuXcBzpCg=; b=eks/d6XOF8zeXWOCjA+vDFWoDMN2wv6De/q8m7sftr6ZKzPwcZw00fXJTl+gT5BPbv I0rVSUSvkkIfks7UiyTwg353rnwhNEK/L1YW/79V95mivS25qQ5fttpe0jinh1IYCodW dyEtRgtIKYAko2foXrRqevMQk7FSRgTa7yeeTscXMM5zdL7qfrpBHW//lMc79GYHA3K8 zQDhXlA1swKik+9403zo/peqOqyQCDyfLWZlzl6xT3S/5xVxC/5ocyO4Ef26na+RL1ru DfV9zuXYZroKxTIHOuxSzpUHv0F9zpZeYLp1npbbsmveHEhds9z4WJFFePNE6wWyl1yx QTJA==; 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=H5QEE8AW; 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-52fd5c05b64si2060186e87.489.2024.07.28.00.46.54; Sun, 28 Jul 2024 00:46:54 -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=H5QEE8AW; 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 7649068D8E8; Sun, 28 Jul 2024 10:35:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f228.google.com (mail-yw1-f228.google.com [209.85.128.228]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8B17168D877 for ; Sun, 28 Jul 2024 10:35:10 +0300 (EEST) Received: by mail-yw1-f228.google.com with SMTP id 00721157ae682-6687f2f0986so8758067b3.0 for ; Sun, 28 Jul 2024 00:35:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxyid.net; s=google; t=1722152109; x=1722756909; 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=ZRr1hmC2Bj7Kvbjo9YXPfKyNVULuVc2bo4aUzFKdjVo=; b=H5QEE8AWhqlmp/q7IQ2waHAxFbuW6MiFbwLybrWCyfv3BI9VzPYktxUc7YAG43DyHM rK3T0LwkZT/VOIsAHyoWQ0CAueveF+yGPvP8Qb3FW96GJ+d0pWoiWmtnaFqw5n4O35KX R5kIvwoI5/5cj0rK2W3pGl2cinbcCoOA1XIarnVx+JFk83gyQhMPrLz+CaVJ6kY+fmlg nZfylZdakmaOjyIjsZGBLtGnVxqfjBDs25rIZUu1eC2qWC+yhe7JqB0b9+V7YfLtqi09 QyZ7j3/UBDnnn3Nly29iEc2Dm8P4CxcgwPFPuP2bFbDJ6pRfJ4Y9lKPeZq1ZPEQ4kV7x lbiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722152109; x=1722756909; 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=ZRr1hmC2Bj7Kvbjo9YXPfKyNVULuVc2bo4aUzFKdjVo=; b=L7Q4W+nBjd+Un4pVntMG9it2QCBu2rkxARUGSlPhsjl5765l4eG0nVmU6MoLC7lYg5 BqFwxzyqxUjSlPbGBs/SFVTA1snPjGnSpjMuD5FPUzfAc4ZCgbxHPSorz09FjGWTybV+ r8gYS0n5A56UfQZVajLY1KzTqFy/fA+FKgUhUiyrGqcmB5KYfBIUpjB07sV9ftD53L65 bIoqjfwGjelLWiGWlS7ITXhvw15ANTzLEpgoSG+TUNAEfu93OtHlnjnnn7UeTBfacUVJ Lp79k3EBCcLbGtxG/4tm8d5RpCocszeVjwFEw+uGmp4a5tfFXM3TpcYxiMzzdRJyAbiD dZpg== X-Gm-Message-State: AOJu0Yzg4aN7o9ser0sHTZg4tQlbPnBGtZEruL8Muv1aA1sOsBNok57n ezsTUGPy074l4Q5QkYcSrlBK6nc9n5v6ixc+ACoZuoegCv8cILhggreN5h7bOYC8epCMJxZTsCS WTma5p+vTFyw6TgY4vMMacVIuxt4kgVef81qvGo6Y X-Received: by 2002:a81:6905:0:b0:65f:93c1:fee9 with SMTP id 00721157ae682-67a05c8b8f9mr49379757b3.9.1722152109112; Sun, 28 Jul 2024 00:35:09 -0700 (PDT) Received: from wsx-cc1-001.. (c-76-136-218-80.hsd1.il.comcast.net. [76.136.218.80]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-6756ad425desm5735937b3.61.2024.07.28.00.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 00:35:09 -0700 (PDT) X-Relaying-Domain: proxyid.net From: Marth64 To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jul 2024 02:34:45 -0500 Message-Id: <20240728073445.725161-8-marth64@proxyid.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240728073445.725161-1-marth64@proxyid.net> References: <20240728073445.725161-1-marth64@proxyid.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] doc/demuxers: update dvdvideodec documentation 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: N8SeSH/n05jJ Signed-off-by: Marth64 --- doc/demuxers.texi | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/demuxers.texi b/doc/demuxers.texi index 04293c4813..d67be0312e 100644 --- a/doc/demuxers.texi +++ b/doc/demuxers.texi @@ -384,7 +384,7 @@ Default is 0, the first language unit. @item menu_vts @var{int} The VTS where the menu lives, or 0 if it is a VMG menu (root-level). -Default is 0, VMG menu. +Default is 1, the menu in the first VTS. @item pgc @var{int} The entry PGC to start playback, in conjunction with @option{pg}. @@ -396,17 +396,16 @@ Default is 0, automatically resolve from value of @option{title}. @item pg @var{int} The entry PG to start playback, in conjunction with @option{pgc}. Alternative to setting @option{title}. -Chapter markers are not supported at this time. -Default is 0, automatically resolve from value of @option{title}, or -start from the beginning (PG 1) of the menu. +This option is ignored without @option{pgc}. +Default is the first PG segment of the PGC (PG 1). @item preindex @var{bool} Enable this to have accurate chapter (PTT) markers and duration measurement, which requires a slow second pass read in order to index the chapter marker -timestamps from NAV packets. This is non-ideal extra work for real optical drives. +timestamps from NAV packets. This also enables chapter markers on menus. +The drawback is that this adds busy work for real optical drives. It is recommended and faster to use this option with a backup of the DVD structure stored on a hard drive. Not compatible with @option{pgc} and @option{pg}. -Not applicable to menus. Default is 0, false. @item trim @var{bool}