1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-28 20:53:54 +02:00
FFmpeg/libavformat
Marth64 a1ae66c827 avformat/dvdvideodec: reset the subdemuxer on discontinuity instead of flushing
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 causes frame drops. 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 and
remove the play_end/segment_started signals and callback pattern.

Note that the timestamps as reported by the NAV packets are known as
"PTMs", so the fields storing the time prior to adjustment are renamed
accordingly. This makes it more clear when we are offsetting the
NAV packet reported timestamps versus what we present as a demuxer.

Signed-off-by: Marth64 <marth64@proxyid.net>
2024-11-16 14:40:51 -06:00
..
riscv
tests
.gitignore
3dostr.c
4xm.c
a64.c
aacdec.c
aadec.c
aaxdec.c
ac3_channel_layout_tab.c
ac3dec.c
ac4dec.c
ac4enc.c
acedec.c
acm.c
act.c
adp.c
ads.c
adtsenc.c
adxdec.c
aeadec.c
aeaenc.c
afc.c
aiff.c
aiff.h
aiffdec.c
aiffenc.c
aixdec.c
allformats.c lavf: add a header for generic-layer interfaces 2024-10-16 16:29:12 +02:00
alp.c
amr.c
amvenc.c
anm.c
apac.c
apc.c
ape.c
apetag.c avformat/apetag: Check APETAGEX 2024-08-28 16:27:54 +02:00
apetag.h
apm.c
apngdec.c
apngenc.c
aptxdec.c
aqtitledec.c
argo_asf.c
argo_asf.h
argo_brp.c avformat/argo_brp: Check that ASF chunk header is completely read 2024-08-28 16:27:56 +02:00
argo_cvg.c
asf_tags.c
asf.c avformat/asf: Check picsize 2024-09-24 15:37:15 +02:00
asf.h
asfcrypt.c
asfcrypt.h
asfdec_f.c
asfdec_o.c avformat/asfdec_o: Check size of index object 2024-07-21 16:40:48 +02:00
asfenc.c
assdec.c
assenc.c
ast.c
ast.h
astdec.c
astenc.c
async.c
au.c
av1.c
av1.h
av1dec.c avformat/av1dec: Better fix for 70872/clusterfuzz-testcase-minimized-ffmpeg_dem_OBU_fuzzer-6005782487826432 2024-08-14 19:05:17 +02:00
avc.c
avc.h
avformat_internal.h lavf: move demuxing-specific fields from FFFormatContext to FormatContextInternal 2024-10-16 16:29:12 +02:00
avformat.c lavf: move demuxing-specific fields from FFFormatContext to FormatContextInternal 2024-10-16 16:29:12 +02:00
avformat.h lavf: deprecate av_format_inject_global_side_data() 2024-10-16 16:46:25 +02:00
avformatres.rc
avi.h
avidec.c
avienc.c
avio_internal.h
avio.c
avio.h
aviobuf.c
avisynth.c avformat/avisynth: move avs_planes* consts into relevant function 2024-08-13 15:09:53 -04:00
avlanguage.c
avlanguage.h
avr.c
avs2dec.c
avs3dec.c
avs.c
bethsoftvid.c
bfi.c
bink.c
binka.c
bintext.c avformat/bintext: Check avio_size() return 2024-07-21 16:40:49 +02:00
bit.c
bluray.c
bmv.c
boadec.c
bonk.c
brstm.c
c93.c
cache.c
caf.c
caf.h
cafdec.c
cafenc.c
cavsvideodec.c
cdg.c
cdxl.c
chromaprint.c
cinedec.c
codec2.c
concat.c
concatdec.c
crcenc.c
crypto.c avformat/crypto: fix variable shadowing 2024-09-13 00:27:35 +02:00
dash.c
dash.h
dashdec.c avformat/dashdec: format open_demux_for_component() 2024-10-13 23:03:21 +08:00
dashenc.c
data_uri.c
dauddec.c
daudenc.c
dca_sample_rate_tab.c
dcstr.c
demux_utils.c lavf: deprecate av_format_inject_global_side_data() 2024-10-16 16:46:25 +02:00
demux.c lavf/flvdec: replace a private option with a field in FFFormatContext 2024-10-16 16:46:29 +02:00
demux.h lavf: replace FFFormatContext.prefer_codec_framerate with FF_INFMT_FLAG 2024-10-16 16:46:29 +02:00
derf.c
dfa.c
dfpwmdec.c
dhav.c
diracdec.c
dnxhddec.c
dovi_isom.c avformat/dovi_isom: implement dv_md_compression 2024-07-28 12:20:07 +02:00
dovi_isom.h
dsfdec.c
dsicin.c
dss.c
dtsdec.c
dtshddec.c
dump.c avformat/iamf: use the new Binaural channel layout 2024-11-13 12:38:04 -03:00
dv.c
dv.h
dvbsub.c
dvbtxt.c
dvdclut.c
dvdclut.h
dvdvideodec.c avformat/dvdvideodec: reset the subdemuxer on discontinuity instead of flushing 2024-11-16 14:40:51 -06:00
dvenc.c
dxa.c
eacdata.c
electronicarts.c avcodec/electronicarts: decode framerate 2024-07-23 06:40:30 +10:00
epafdec.c
evc.c
evc.h
evcdec.c
ffjni.c
ffmeta.h
ffmetadec.c
ffmetaenc.c
fifo.c
file_open.c
file.c avformat/file: guard fd_dup by FD_PROTOCOL or PIPE_PROTOCOL 2024-07-16 22:50:21 +08:00
filmstripdec.c
filmstripenc.c
fitsdec.c
fitsenc.c
flac_picture.c
flac_picture.h
flacdec.c
flacenc_header.c
flacenc.c
flacenc.h
flic.c
flv.h
flvdec.c lavf/flvdec: replace a private option with a field in FFFormatContext 2024-10-16 16:46:29 +02:00
flvenc.c
format.c
framecrcenc.c
framehash.c
frmdec.c
fsb.c
ftp.c
fwse.c
g722.c
g723_1.c
g726.c
g729dec.c
gdv.c
genh.c
gif.c
gifdec.c
golomb_tab.c
gopher.c
gsmdec.c
gxf.c
gxf.h
gxfenc.c
h261dec.c
h263dec.c
h264dec.c
hashenc.c
hca.c
hcom.c
hdsenc.c
hevc.c
hevc.h
hevcdec.c
hls_sample_encryption.c
hls_sample_encryption.h
hls.c avformat/hls: improve comment 2024-11-10 11:20:08 +08:00
hlsenc.c avformat/hlsenc: check return value of avcodec_parameters_copy() 2024-10-13 23:04:20 +08:00
hlsplaylist.c libavformat/hlsplaylist: add subtitle_varname for naming subtitle streams 2024-10-13 23:01:59 +08:00
hlsplaylist.h libavformat/hlsplaylist: add subtitle_varname for naming subtitle streams 2024-10-13 23:01:59 +08:00
hlsproto.c
hnm.c avformat/hnm: Check *chunk_size 2024-07-21 16:41:23 +02:00
http.c
http.h
httpauth.c
httpauth.h
iamf_parse.c avformat/iamf: use the new Binaural channel layout 2024-11-13 12:38:04 -03:00
iamf_parse.h
iamf_reader.c avformat/iamf: use aligned intreadwrite macros where possible 2024-08-07 00:16:21 -03:00
iamf_reader.h
iamf_writer.c avformat/iamf: use the new Binaural channel layout 2024-11-13 12:38:04 -03:00
iamf_writer.h
iamf.c avformat/iamf: use the new Binaural channel layout 2024-11-13 12:38:04 -03:00
iamf.h avformat/iamf: rename Codec Config seek_preroll to audio_roll_distance 2024-07-18 23:27:20 -03:00
iamfdec.c avformat/iamf_parse: ignore Audio Elements with an unsupported type 2024-08-14 23:55:40 -03:00
iamfenc.c
icecast.c
icodec.c
icoenc.c
id3v1.c
id3v1.h
id3v2.c
id3v2.h
id3v2enc.c
idcin.c
idroqdec.c
idroqenc.c
iff.c
ifv.c
ilbc.c avformat/ilbc: Check avio_read() for failure 2024-11-11 01:28:06 +01:00
imf_cpl.c
imf.h
imfdec.c
img2_alias_pix.c
img2_brender_pix.c
img2.c
img2.h
img2dec.c avformat/img2dec: Clear padding data after EOF 2024-08-05 23:17:46 +02:00
img2enc.c avformat/img2enc: Fix integer truncation when frame_pts is enabled 2024-09-29 20:46:42 +08:00
imx.c
ingenientdec.c
internal.h lavf/flvdec: replace a private option with a field in FFFormatContext 2024-10-16 16:46:29 +02:00
ip.c
ip.h
ipfsgateway.c
ipmovie.c
ipudec.c
ircam.c
ircam.h
ircamdec.c
ircamenc.c
isom_tags.c avcodec: deprecate v410 de/encoder 2024-10-12 11:21:14 -03:00
isom.c avformat/isom: make parameters used for loging a pointer to void 2024-08-31 11:11:42 -03:00
isom.h avformat/mov: use an array of pointers for heif_item 2024-11-10 12:04:53 -03:00
iss.c
iv8.c
ivfdec.c
ivfenc.c
jacosubdec.c
jacosubenc.c
jpegtables.c
jpegxl_anim_dec.c avformat/jpegxl_anim_dec: ensure input padding is zeroed 2024-08-05 23:17:46 +02:00
jpegxl_parse.c
jvdec.c
kvag.c
lafdec.c
latmenc.c
lc3.c
libamqp.c
libavformat.v
libgme.c
libmodplug.c
libopenmpt.c
librist.c
librtmp.c
libsmbclient.c
libsrt.c
libssh.c
libzmq.c avformat/libzmq: fix check for zmq protocol prefix 2024-09-02 22:51:17 +02:00
lmlm4.c avformat/lmlm4: Eliminate some AVERROR(EIO) 2024-08-11 13:21:12 +02:00
loasdec.c
log2_tab.c
lrc.c
lrc.h
lrcdec.c
lrcenc.c
luodatdec.c
lvfdec.c
lxfdec.c
m4vdec.c
Makefile
matroska.c
matroska.h
matroskadec.c avformat/matroskadec: Check desc_bytes so bits fit in 64bit 2024-10-09 21:26:47 +02:00
matroskaenc.c
mca.c
mccdec.c avformat/mccdec: Initialize and check rate.den 2024-11-11 01:28:05 +01:00
md5proto.c
metadata.c
metadata.h
mgsts.c
microdvddec.c
microdvdenc.c
mj2kdec.c
mkvtimestamp_v2.c
mlpdec.c
mlvdec.c
mm.c avformat/mm: Check length 2024-07-21 16:41:32 +02:00
mmf.c
mms.c
mms.h
mmsh.c
mmst.c
mods.c
moflex.c
mov_chan.c avformat/mov_chan: add extra checks to channel description count 2024-09-17 15:41:45 -03:00
mov_chan.h
mov_esds.c
mov.c avformat/mov: check that items are allocated before accessing them 2024-11-12 12:23:32 -03:00
movenc_ttml.c
movenc_ttml.h
movenc.c avformat/movenc: Fix ffv1 support 2024-11-16 13:24:16 +01:00
movenc.h
movenccenc.c
movenccenc.h
movenchint.c
mp3dec.c avformat/mp3dec: Check header_filesize 2024-07-21 16:41:41 +02:00
mp3enc.c
mpc8.c
mpc.c
mpeg4audio_sample_rates.c
mpeg.c avformat/mpeg: Check an avio_read() for failure 2024-08-14 18:21:00 +02:00
mpeg.h
mpegaudiotabs.c
mpegenc.c
mpegts.c avformat/mpegts: Initialize predefined_SLConfigDescriptor_seen 2024-10-25 22:46:40 +02:00
mpegts.h
mpegtsenc.c
mpegvideodec.c
mpjpeg.c
mpjpegdec.c
mpl2dec.c
mpsubdec.c
msf.c
msnwc_tcp.c
mspdec.c
mtaf.c
mtv.c
musx.c
mux_utils.c
mux.c lavf: move muxing-specific fields from FFFormatContext to FormatContextInternal 2024-10-16 16:29:12 +02:00
mux.h
mvdec.c avformat/mvdec: Check if name was fully read 2024-08-28 17:38:28 +02:00
mvi.c
mxf.c libavformat/mxf: Add ULs for DNxUncompressed 2024-10-09 18:19:25 +02:00
mxf.h
mxfdec.c avformat/mxfdec: Fix overflow in midpoint computation 2024-10-25 22:46:40 +02:00
mxfenc.c lavf/mxfenc: Use nb_components, not av_pix_fmt_count_planes() 2024-11-08 10:52:04 +01:00
mxg.c
nal.c
nal.h
ncdec.c
network.c avformat/network: use av_err2str to simplify code 2024-09-13 00:26:53 +02:00
network.h
nistspheredec.c avformat/nistspheredec: Clear buffer 2024-11-11 01:28:05 +01:00
nspdec.c
nsvdec.c avformat/nsvdec: Check asize for PCM 2024-07-21 16:41:43 +02:00
nullenc.c
nut.c
nut.h
nutdec.c
nutenc.c
nuv.c
oggdec.c
oggdec.h
oggenc.c
oggparsecelt.c
oggparsedirac.c
oggparseflac.c
oggparseogm.c
oggparseopus.c
oggparseskeleton.c
oggparsespeex.c
oggparsetheora.c
oggparsevorbis.c
oggparsevp8.c
oma.c avformat/oma: Demux oma-encapsulated AAC audio 2024-10-13 13:43:39 +02:00
oma.h avformat/oma: Demux oma-encapsulated AAC audio 2024-10-13 13:43:39 +02:00
omadec.c avformat/oma: Demux oma-encapsulated AAC audio 2024-10-13 13:43:39 +02:00
omaenc.c
options_table.h
options.c lavf: move muxing-specific fields from FFFormatContext to FormatContextInternal 2024-10-16 16:29:12 +02:00
os_support.c
os_support.h
osq.c
paf.c
pcm.c
pcm.h
pcmdec.c
pcmenc.c
pdvdec.c
pjsdec.c
pmpdec.c
pp_bnk.c
prompeg.c
protocols.c
psxstr.c
pva.c
pvfdec.c
qcp.c
qoadec.c
qtpalette.c
qtpalette.h
r3d.c
rangecoder_dec.c
rawdec.c
rawdec.h
rawenc.c
rawenc.h
rawutils.c
rawutils.h
rawvideodec.c
rcwtdec.c
rcwtenc.c
rdt.c
rdt.h
realtextdec.c
redspark.c
replaygain.c
replaygain.h
riff.c avcodec/rv60: RealVideo 6.0 decoder 2024-11-03 10:53:15 +11:00
riff.h
riffdec.c
riffenc.c
rka.c
rl2.c
rm.c avcodec/rv60: RealVideo 6.0 decoder 2024-11-03 10:53:15 +11:00
rm.h
rmdec.c avformat/rmdec: support RMHD file format 2024-11-03 10:53:15 +11:00
rmenc.c
rmsipr.c
rmsipr.h
rpl.c avformat/rpl: check channels 2024-11-11 01:28:05 +01:00
rsd.c
rso.c
rso.h
rsodec.c
rsoenc.c
rtmp.h
rtmpcrypt.c
rtmpcrypt.h
rtmpdh.c
rtmpdh.h
rtmpdigest.c
rtmphttp.c
rtmppkt.c
rtmppkt.h
rtmpproto.c
rtp.c
rtp.h
rtpdec_ac3.c
rtpdec_amr.c
rtpdec_asf.c
rtpdec_dv.c
rtpdec_formats.h
rtpdec_g726.c
rtpdec_h261.c
rtpdec_h263_rfc2190.c
rtpdec_h263.c
rtpdec_h264.c
rtpdec_hevc.c
rtpdec_ilbc.c
rtpdec_jpeg.c
rtpdec_latm.c
rtpdec_mpa_robust.c
rtpdec_mpeg4.c
rtpdec_mpeg12.c
rtpdec_mpegts.c
rtpdec_qcelp.c
rtpdec_qdm2.c
rtpdec_qt.c
rtpdec_rfc4175.c
rtpdec_svq3.c
rtpdec_vc2hq.c
rtpdec_vp8.c
rtpdec_vp9.c
rtpdec_xiph.c
rtpdec.c
rtpdec.h
rtpenc_aac.c
rtpenc_amr.c
rtpenc_chain.c
rtpenc_chain.h
rtpenc_h261.c
rtpenc_h263_rfc2190.c
rtpenc_h263.c
rtpenc_h264_hevc.c
rtpenc_jpeg.c
rtpenc_latm.c
rtpenc_mpegts.c
rtpenc_mpv.c
rtpenc_rfc4175.c
rtpenc_vc2hq.c
rtpenc_vp8.c
rtpenc_vp9.c
rtpenc_xiph.c
rtpenc.c
rtpenc.h
rtpproto.c avformat/rtpproto: free ip filters on open error 2024-08-07 00:59:19 +02:00
rtpproto.h
rtsp.c avformat/rtpdec: fix integer overflow in start_time_realtime calculation 2024-09-23 17:08:33 +02:00
rtsp.h
rtspcodes.h
rtspdec.c
rtspenc.c
s337m.c
samidec.c
sapdec.c avformat/sapdec: check return value of avcodec_parameters_copy() 2024-11-15 20:18:12 -06:00
sapenc.c
sauce.c avformat/sauce: Check avio_size() for failure 2024-07-21 17:02:10 +02:00
sauce.h
sbcdec.c
sbgdec.c
sccdec.c
sccenc.c
scd.c
sctp.c
sdns.c
sdp.c
sdr2.c
sdsdec.c
sdxdec.c
seek.c lavf: add a header for generic-layer interfaces 2024-10-16 16:29:12 +02:00
segafilm.c avformat/segafilm: Set keyframe 2024-08-14 18:20:58 +02:00
segafilmenc.c
segment.c
serdec.c
sga.c
shortendec.c
sierravmd.c
siff.c avformat/siff: Basic pkt_size check 2024-07-21 17:02:11 +02:00
smacker.c
smjpeg.c
smjpeg.h
smjpegdec.c
smjpegenc.c
smoothstreamingenc.c
smush.c
sol.c
sox.h
soxdec.c
soxenc.c
spdif.c
spdif.h
spdifdec.c
spdifenc.c
srtdec.c
srtenc.c
srtp.c
srtp.h
srtpproto.c avformat/srtpproto: pass options to nested protocol 2024-08-07 00:59:19 +02:00
stldec.c
subfile.c
subtitles.c
subtitles.h
subviewer1dec.c
subviewerdec.c
supdec.c
supenc.c
svag.c
svs.c
swf.c
swf.h
swfdec.c
swfenc.c
takdec.c
tcp.c
tedcaptionsdec.c
tee_common.c
tee_common.h
tee.c
teeproto.c
thp.c
tiertexseq.c
tls_gnutls.c
tls_libtls.c
tls_mbedtls.c lavf/tls_mbedtls: restrict TLSv1.3 verification workaround to affected version 2024-09-15 13:50:18 +02:00
tls_openssl.c
tls_schannel.c
tls_securetransport.c
tls.c
tls.h
tmv.c
to_upper4.c
tta.c
ttaenc.c
ttmlenc.c
ttmlenc.h
tty.c avformat/tty: Check avio_size() 2024-07-21 17:02:11 +02:00
txd.c
ty.c avformat/ty: rec_size seems to only need 32bit 2024-07-21 17:02:11 +02:00
udp.c Revert "avformat/udp: Fix temporary buffer race" 2024-07-23 23:21:13 +02:00
uncodedframecrcenc.c
unix.c
url.c
url.h
urldecode.c
urldecode.h
usmdec.c
utils.c avformat/internal: Add ff_get_frame_filename 2024-09-29 20:46:09 +08:00
vag.c
vapoursynth.c avformat/vapoursynth: load library at runtime 2024-08-26 10:30:52 +02:00
vc1dec.c
vc1test.c
vc1testenc.c
version_major.h
version.c
version.h avformat/avformat: add side data to AVStreamGroupTileGrid 2024-09-30 14:36:24 -03:00
vividas.c avformat/vividas: Check avio_read() for failure 2024-11-11 01:28:06 +01:00
vivo.c
voc_packet.c
voc.c
voc.h
vocdec.c
vocenc.c
vorbiscomment.c
vorbiscomment.h
vpcc.c
vpcc.h
vpk.c
vplayerdec.c
vqf.c
vvc.c
vvc.h
vvcdec.c
w64.c
w64.h
wady.c
wavarc.c
wavdec.c avformat/wavdec: Check if there are 16 bytes before testing them 2024-08-05 23:17:45 +02:00
wavenc.c
wc3movie.c
webm_chunk.c
webmdashenc.c
webpenc.c avformat/webpenc: Check filesize in trailer 2024-07-21 17:02:12 +02:00
webvttdec.c
webvttenc.c
westwood_aud.c
westwood_audenc.c
westwood_vqa.c
wsddec.c
wtv_common.c
wtv.h
wtvdec.c avformat/wtvdec: Check length of read mpeg2_descriptor 2024-08-08 19:10:05 +02:00
wtvenc.c
wv.c
wv.h
wvdec.c
wvedec.c
wvenc.c
xa.c
xmd.c
xmv.c avformat/xmv: Check this_packet_size 2024-07-21 17:02:12 +02:00
xvag.c
xwma.c
yop.c
yuv4mpeg.h
yuv4mpegdec.c
yuv4mpegenc.c