Re: [FFmpeg-devel] [PATCH v3] dvdvideo: add DVD-Video demuxer, powered by libdvdnav and libdvdread
Thank you Stefano, I will send updated version soon with also several bug fixes and improvements. On Tue, Jan 23, 2024 at 18:17 Stefano Sabatini wrote: > On date Wednesday 2024-01-10 21:46:38 -0600, Marth64 wrote: > > Fixes for several authoring styles/discs. > > ffmpeg CLI may report wrong output time and show progress strangely for > some discs. > > This is not reproducible prior to `fftools/ffmpeg: convert to a threaded > architecture` > > But, I am looking into it. > > > > Signed-off-by: Marth64 > > --- > > Changelog |1 + > > configure |8 + > > libavformat/Makefile |1 + > > libavformat/allformats.c |1 + > > libavformat/avlanguage.c | 10 +- > > libavformat/dvdvideodec.c | 1001 + > > 6 files changed, 1020 insertions(+), 2 deletions(-) > > create mode 100644 libavformat/dvdvideodec.c > > > > diff --git a/Changelog b/Changelog > > index 5b2899d05b..1b377fed2f 100644 > > --- a/Changelog > > +++ b/Changelog > > @@ -18,6 +18,7 @@ version : > > - lavu/eval: introduce randomi() function in expressions > > - VVC decoder > > - fsync filter > > +- DVD-Video demuxer, powered by libdvdnav and libdvdread > > > > version 6.1: > > - libaribcaption decoder > > diff --git a/configure b/configure > > index e87a09ce83..1f21f4f1c2 100755 > > --- a/configure > > +++ b/configure > > @@ -227,6 +227,8 @@ External library support: > >--enable-libdavs2enable AVS2 decoding via libdavs2 [no] > >--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 > > and libraw1394 [no] > > + --enable-libdvdnav enable libdvdnav, needed for DVD demuxing > [no] > > + --enable-libdvdread enable libdvdread, needed for DVD demuxing > [no] > >--enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] > >--enable-libfliteenable flite (voice synthesis) support via > libflite [no] > >--enable-libfontconfig enable libfontconfig, useful for drawtext > filter [no] > > @@ -1806,6 +1808,8 @@ EXTERNAL_LIBRARY_GPL_LIST=" > > frei0r > > libcdio > > libdavs2 > > +libdvdnav > > +libdvdread > > librubberband > > libvidstab > > libx264 > > @@ -3519,6 +3523,8 @@ dts_demuxer_select="dca_parser" > > dtshd_demuxer_select="dca_parser" > > dv_demuxer_select="dvprofile" > > dv_muxer_select="dvprofile" > > +dvdvideo_demuxer_select="mpegps_demuxer" > > +dvdvideo_demuxer_deps="libdvdnav libdvdread" > > dxa_demuxer_select="riffdec" > > eac3_demuxer_select="ac3_parser" > > evc_demuxer_select="evc_frame_merge_bsf evc_parser" > > @@ -6760,6 +6766,8 @@ enabled libdav1d && require_pkg_config > libdav1d "dav1d >= 0.5.0" "dav1d > > enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= > 1.6.0" davs2.h davs2_decoder_open > > enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 > dc1394/dc1394.h dc1394_new > > enabled libdrm&& check_pkg_config libdrm libdrm xf86drm.h > drmGetVersion > > +enabled libdvdnav && require_pkg_config libdvdnav "dvdnav >= > 6.1.1" dvdnav/dvdnav.h dvdnav_open2 > > +enabled libdvdread&& require_pkg_config libdvdread "dvdread >= > 6.1.2" dvdread/dvd_reader.h DVDOpen2 -ldvdread > > enabled libfdk_aac&& { check_pkg_config libfdk_aac fdk-aac > "fdk-aac/aacenc_lib.h" aacEncOpen || > > { require libfdk_aac > fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac && > > warn "using libfdk without > pkg-config"; } } > > diff --git a/libavformat/Makefile b/libavformat/Makefile > > index 581e378d95..3c1cb21fe2 100644 > > --- a/libavformat/Makefile > > +++ b/libavformat/Makefile > > @@ -192,6 +192,7 @@ OBJS-$(CONFIG_DTS_MUXER) += rawenc.o > > OBJS-$(CONFIG_DV_MUXER) += dvenc.o > > OBJS-$(CONFIG_DVBSUB_DEMUXER)+= dvbsub.o rawdec.o > > OBJS-$(CONFIG_DVBTXT_DEMUXER)+= dvbtxt.o rawdec.o > > +OBJS-$(CONFIG_DVDVIDEO_DEMUXER) += dvdvideodec.o > > OBJS-$(CONFIG_DXA_DEMUXER) += dxa.o > > OBJS-$(CONFIG_EA_CDATA_DEMUXER) += eacdata.o > > OBJS-$(CONFIG_EA_DEMUXER)+= electronicarts.o > > diff --git a/libavformat/allformats.c b/libavformat/allformats.c > > index ce6be5f04d..ea88d4c094 100644 > > --- a/libavformat/allformats.c > > +++ b/libavformat/allformats.c > > @@ -150,6 +150,7 @@ extern const AVInputFormat ff_dv_demuxer; > > extern const FFOutputFormat ff_dv_muxer; > > extern const AVInputFormat ff_dvbsub_demuxer; > > extern const AVInputFormat ff_dvbtxt_demuxer; > > +extern const AVInputFormat ff_dvdvideo_demuxer; > > extern const AVInputFormat ff_dxa_demuxer; > > extern const AVInputFormat ff_ea_demuxer; > > extern const AVInputFormat ff_ea_cdata_demuxer; > > diff --git a/libavformat/avlanguage.c b/libavformat/avlanguage.c > > index 782a58adb2..202d9aa835 100644 > > > ---
Re: [FFmpeg-devel] [PATCH v3] dvdvideo: add DVD-Video demuxer, powered by libdvdnav and libdvdread
On date Wednesday 2024-01-10 21:46:38 -0600, Marth64 wrote: > Fixes for several authoring styles/discs. > ffmpeg CLI may report wrong output time and show progress strangely for some > discs. > This is not reproducible prior to `fftools/ffmpeg: convert to a threaded > architecture` > But, I am looking into it. > > Signed-off-by: Marth64 > --- > Changelog |1 + > configure |8 + > libavformat/Makefile |1 + > libavformat/allformats.c |1 + > libavformat/avlanguage.c | 10 +- > libavformat/dvdvideodec.c | 1001 + > 6 files changed, 1020 insertions(+), 2 deletions(-) > create mode 100644 libavformat/dvdvideodec.c > > diff --git a/Changelog b/Changelog > index 5b2899d05b..1b377fed2f 100644 > --- a/Changelog > +++ b/Changelog > @@ -18,6 +18,7 @@ version : > - lavu/eval: introduce randomi() function in expressions > - VVC decoder > - fsync filter > +- DVD-Video demuxer, powered by libdvdnav and libdvdread > > version 6.1: > - libaribcaption decoder > diff --git a/configure b/configure > index e87a09ce83..1f21f4f1c2 100755 > --- a/configure > +++ b/configure > @@ -227,6 +227,8 @@ External library support: >--enable-libdavs2enable AVS2 decoding via libdavs2 [no] >--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 > and libraw1394 [no] > + --enable-libdvdnav enable libdvdnav, needed for DVD demuxing [no] > + --enable-libdvdread enable libdvdread, needed for DVD demuxing [no] >--enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] >--enable-libfliteenable flite (voice synthesis) support via > libflite [no] >--enable-libfontconfig enable libfontconfig, useful for drawtext filter > [no] > @@ -1806,6 +1808,8 @@ EXTERNAL_LIBRARY_GPL_LIST=" > frei0r > libcdio > libdavs2 > +libdvdnav > +libdvdread > librubberband > libvidstab > libx264 > @@ -3519,6 +3523,8 @@ dts_demuxer_select="dca_parser" > dtshd_demuxer_select="dca_parser" > dv_demuxer_select="dvprofile" > dv_muxer_select="dvprofile" > +dvdvideo_demuxer_select="mpegps_demuxer" > +dvdvideo_demuxer_deps="libdvdnav libdvdread" > dxa_demuxer_select="riffdec" > eac3_demuxer_select="ac3_parser" > evc_demuxer_select="evc_frame_merge_bsf evc_parser" > @@ -6760,6 +6766,8 @@ enabled libdav1d && require_pkg_config > libdav1d "dav1d >= 0.5.0" "dav1d > enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" > davs2.h davs2_decoder_open > enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 > dc1394/dc1394.h dc1394_new > enabled libdrm&& check_pkg_config libdrm libdrm xf86drm.h > drmGetVersion > +enabled libdvdnav && require_pkg_config libdvdnav "dvdnav >= 6.1.1" > dvdnav/dvdnav.h dvdnav_open2 > +enabled libdvdread&& require_pkg_config libdvdread "dvdread >= > 6.1.2" dvdread/dvd_reader.h DVDOpen2 -ldvdread > enabled libfdk_aac&& { check_pkg_config libfdk_aac fdk-aac > "fdk-aac/aacenc_lib.h" aacEncOpen || > { require libfdk_aac fdk-aac/aacenc_lib.h > aacEncOpen -lfdk-aac && > warn "using libfdk without pkg-config"; } } > diff --git a/libavformat/Makefile b/libavformat/Makefile > index 581e378d95..3c1cb21fe2 100644 > --- a/libavformat/Makefile > +++ b/libavformat/Makefile > @@ -192,6 +192,7 @@ OBJS-$(CONFIG_DTS_MUXER) += rawenc.o > OBJS-$(CONFIG_DV_MUXER) += dvenc.o > OBJS-$(CONFIG_DVBSUB_DEMUXER)+= dvbsub.o rawdec.o > OBJS-$(CONFIG_DVBTXT_DEMUXER)+= dvbtxt.o rawdec.o > +OBJS-$(CONFIG_DVDVIDEO_DEMUXER) += dvdvideodec.o > OBJS-$(CONFIG_DXA_DEMUXER) += dxa.o > OBJS-$(CONFIG_EA_CDATA_DEMUXER) += eacdata.o > OBJS-$(CONFIG_EA_DEMUXER)+= electronicarts.o > diff --git a/libavformat/allformats.c b/libavformat/allformats.c > index ce6be5f04d..ea88d4c094 100644 > --- a/libavformat/allformats.c > +++ b/libavformat/allformats.c > @@ -150,6 +150,7 @@ extern const AVInputFormat ff_dv_demuxer; > extern const FFOutputFormat ff_dv_muxer; > extern const AVInputFormat ff_dvbsub_demuxer; > extern const AVInputFormat ff_dvbtxt_demuxer; > +extern const AVInputFormat ff_dvdvideo_demuxer; > extern const AVInputFormat ff_dxa_demuxer; > extern const AVInputFormat ff_ea_demuxer; > extern const AVInputFormat ff_ea_cdata_demuxer; > diff --git a/libavformat/avlanguage.c b/libavformat/avlanguage.c > index 782a58adb2..202d9aa835 100644 > --- a/libavformat/avlanguage.c > +++ b/libavformat/avlanguage.c > @@ -29,7 +29,7 @@ typedef struct LangEntry { > uint16_t next_equivalent; > } LangEntry; > > -static const uint16_t lang_table_counts[] = { 484, 20, 184 }; > +static const uint16_t lang_table_counts[] = { 484, 20, 190 }; > static const uint16_t lang_table_offsets[] = { 0,
Re: [FFmpeg-devel] [PATCH v3] dvdvideo: add DVD-Video demuxer, powered by libdvdnav and libdvdread
Also deleted more redundant code in v3^ On Wed, Jan 10, 2024 at 9:48 PM Marth64 wrote: > Fixes for several authoring styles/discs. > ffmpeg CLI may report wrong output time and show progress strangely for > some discs. > This is not reproducible prior to `fftools/ffmpeg: convert to a threaded > architecture` > But, I am looking into it. > > Signed-off-by: Marth64 > --- > Changelog |1 + > configure |8 + > libavformat/Makefile |1 + > libavformat/allformats.c |1 + > libavformat/avlanguage.c | 10 +- > libavformat/dvdvideodec.c | 1001 + > 6 files changed, 1020 insertions(+), 2 deletions(-) > create mode 100644 libavformat/dvdvideodec.c > > diff --git a/Changelog b/Changelog > index 5b2899d05b..1b377fed2f 100644 > --- a/Changelog > +++ b/Changelog > @@ -18,6 +18,7 @@ version : > - lavu/eval: introduce randomi() function in expressions > - VVC decoder > - fsync filter > +- DVD-Video demuxer, powered by libdvdnav and libdvdread > > version 6.1: > - libaribcaption decoder > diff --git a/configure b/configure > index e87a09ce83..1f21f4f1c2 100755 > --- a/configure > +++ b/configure > @@ -227,6 +227,8 @@ External library support: >--enable-libdavs2enable AVS2 decoding via libdavs2 [no] >--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 > and libraw1394 [no] > + --enable-libdvdnav enable libdvdnav, needed for DVD demuxing [no] > + --enable-libdvdread enable libdvdread, needed for DVD demuxing > [no] >--enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] >--enable-libfliteenable flite (voice synthesis) support via > libflite [no] >--enable-libfontconfig enable libfontconfig, useful for drawtext > filter [no] > @@ -1806,6 +1808,8 @@ EXTERNAL_LIBRARY_GPL_LIST=" > frei0r > libcdio > libdavs2 > +libdvdnav > +libdvdread > librubberband > libvidstab > libx264 > @@ -3519,6 +3523,8 @@ dts_demuxer_select="dca_parser" > dtshd_demuxer_select="dca_parser" > dv_demuxer_select="dvprofile" > dv_muxer_select="dvprofile" > +dvdvideo_demuxer_select="mpegps_demuxer" > +dvdvideo_demuxer_deps="libdvdnav libdvdread" > dxa_demuxer_select="riffdec" > eac3_demuxer_select="ac3_parser" > evc_demuxer_select="evc_frame_merge_bsf evc_parser" > @@ -6760,6 +6766,8 @@ enabled libdav1d && require_pkg_config > libdav1d "dav1d >= 0.5.0" "dav1d > enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" > davs2.h davs2_decoder_open > enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 > dc1394/dc1394.h dc1394_new > enabled libdrm&& check_pkg_config libdrm libdrm xf86drm.h > drmGetVersion > +enabled libdvdnav && require_pkg_config libdvdnav "dvdnav >= > 6.1.1" dvdnav/dvdnav.h dvdnav_open2 > +enabled libdvdread&& require_pkg_config libdvdread "dvdread >= > 6.1.2" dvdread/dvd_reader.h DVDOpen2 -ldvdread > enabled libfdk_aac&& { check_pkg_config libfdk_aac fdk-aac > "fdk-aac/aacenc_lib.h" aacEncOpen || > { require libfdk_aac fdk-aac/aacenc_lib.h > aacEncOpen -lfdk-aac && > warn "using libfdk without pkg-config"; > } } > diff --git a/libavformat/Makefile b/libavformat/Makefile > index 581e378d95..3c1cb21fe2 100644 > --- a/libavformat/Makefile > +++ b/libavformat/Makefile > @@ -192,6 +192,7 @@ OBJS-$(CONFIG_DTS_MUXER) += rawenc.o > OBJS-$(CONFIG_DV_MUXER) += dvenc.o > OBJS-$(CONFIG_DVBSUB_DEMUXER)+= dvbsub.o rawdec.o > OBJS-$(CONFIG_DVBTXT_DEMUXER)+= dvbtxt.o rawdec.o > +OBJS-$(CONFIG_DVDVIDEO_DEMUXER) += dvdvideodec.o > OBJS-$(CONFIG_DXA_DEMUXER) += dxa.o > OBJS-$(CONFIG_EA_CDATA_DEMUXER) += eacdata.o > OBJS-$(CONFIG_EA_DEMUXER)+= electronicarts.o > diff --git a/libavformat/allformats.c b/libavformat/allformats.c > index ce6be5f04d..ea88d4c094 100644 > --- a/libavformat/allformats.c > +++ b/libavformat/allformats.c > @@ -150,6 +150,7 @@ extern const AVInputFormat ff_dv_demuxer; > extern const FFOutputFormat ff_dv_muxer; > extern const AVInputFormat ff_dvbsub_demuxer; > extern const AVInputFormat ff_dvbtxt_demuxer; > +extern const AVInputFormat ff_dvdvideo_demuxer; > extern const AVInputFormat ff_dxa_demuxer; > extern const AVInputFormat ff_ea_demuxer; > extern const AVInputFormat ff_ea_cdata_demuxer; > diff --git a/libavformat/avlanguage.c b/libavformat/avlanguage.c > index 782a58adb2..202d9aa835 100644 > --- a/libavformat/avlanguage.c > +++ b/libavformat/avlanguage.c > @@ -29,7 +29,7 @@ typedef struct LangEntry { > uint16_t next_equivalent; > } LangEntry; > > -static const uint16_t lang_table_counts[] = { 484, 20, 184 }; > +static const uint16_t lang_table_counts[] = { 484, 20, 190 }; > static const uint16_t
[FFmpeg-devel] [PATCH v3] dvdvideo: add DVD-Video demuxer, powered by libdvdnav and libdvdread
Fixes for several authoring styles/discs. ffmpeg CLI may report wrong output time and show progress strangely for some discs. This is not reproducible prior to `fftools/ffmpeg: convert to a threaded architecture` But, I am looking into it. Signed-off-by: Marth64 --- Changelog |1 + configure |8 + libavformat/Makefile |1 + libavformat/allformats.c |1 + libavformat/avlanguage.c | 10 +- libavformat/dvdvideodec.c | 1001 + 6 files changed, 1020 insertions(+), 2 deletions(-) create mode 100644 libavformat/dvdvideodec.c diff --git a/Changelog b/Changelog index 5b2899d05b..1b377fed2f 100644 --- a/Changelog +++ b/Changelog @@ -18,6 +18,7 @@ version : - lavu/eval: introduce randomi() function in expressions - VVC decoder - fsync filter +- DVD-Video demuxer, powered by libdvdnav and libdvdread version 6.1: - libaribcaption decoder diff --git a/configure b/configure index e87a09ce83..1f21f4f1c2 100755 --- a/configure +++ b/configure @@ -227,6 +227,8 @@ External library support: --enable-libdavs2enable AVS2 decoding via libdavs2 [no] --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no] + --enable-libdvdnav enable libdvdnav, needed for DVD demuxing [no] + --enable-libdvdread enable libdvdread, needed for DVD demuxing [no] --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] --enable-libfliteenable flite (voice synthesis) support via libflite [no] --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no] @@ -1806,6 +1808,8 @@ EXTERNAL_LIBRARY_GPL_LIST=" frei0r libcdio libdavs2 +libdvdnav +libdvdread librubberband libvidstab libx264 @@ -3519,6 +3523,8 @@ dts_demuxer_select="dca_parser" dtshd_demuxer_select="dca_parser" dv_demuxer_select="dvprofile" dv_muxer_select="dvprofile" +dvdvideo_demuxer_select="mpegps_demuxer" +dvdvideo_demuxer_deps="libdvdnav libdvdread" dxa_demuxer_select="riffdec" eac3_demuxer_select="ac3_parser" evc_demuxer_select="evc_frame_merge_bsf evc_parser" @@ -6760,6 +6766,8 @@ enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.5.0" "dav1d enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new enabled libdrm&& check_pkg_config libdrm libdrm xf86drm.h drmGetVersion +enabled libdvdnav && require_pkg_config libdvdnav "dvdnav >= 6.1.1" dvdnav/dvdnav.h dvdnav_open2 +enabled libdvdread&& require_pkg_config libdvdread "dvdread >= 6.1.2" dvdread/dvd_reader.h DVDOpen2 -ldvdread enabled libfdk_aac&& { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen || { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac && warn "using libfdk without pkg-config"; } } diff --git a/libavformat/Makefile b/libavformat/Makefile index 581e378d95..3c1cb21fe2 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -192,6 +192,7 @@ OBJS-$(CONFIG_DTS_MUXER) += rawenc.o OBJS-$(CONFIG_DV_MUXER) += dvenc.o OBJS-$(CONFIG_DVBSUB_DEMUXER)+= dvbsub.o rawdec.o OBJS-$(CONFIG_DVBTXT_DEMUXER)+= dvbtxt.o rawdec.o +OBJS-$(CONFIG_DVDVIDEO_DEMUXER) += dvdvideodec.o OBJS-$(CONFIG_DXA_DEMUXER) += dxa.o OBJS-$(CONFIG_EA_CDATA_DEMUXER) += eacdata.o OBJS-$(CONFIG_EA_DEMUXER)+= electronicarts.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index ce6be5f04d..ea88d4c094 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -150,6 +150,7 @@ extern const AVInputFormat ff_dv_demuxer; extern const FFOutputFormat ff_dv_muxer; extern const AVInputFormat ff_dvbsub_demuxer; extern const AVInputFormat ff_dvbtxt_demuxer; +extern const AVInputFormat ff_dvdvideo_demuxer; extern const AVInputFormat ff_dxa_demuxer; extern const AVInputFormat ff_ea_demuxer; extern const AVInputFormat ff_ea_cdata_demuxer; diff --git a/libavformat/avlanguage.c b/libavformat/avlanguage.c index 782a58adb2..202d9aa835 100644 --- a/libavformat/avlanguage.c +++ b/libavformat/avlanguage.c @@ -29,7 +29,7 @@ typedef struct LangEntry { uint16_t next_equivalent; } LangEntry; -static const uint16_t lang_table_counts[] = { 484, 20, 184 }; +static const uint16_t lang_table_counts[] = { 484, 20, 190 }; static const uint16_t lang_table_offsets[] = { 0, 484, 504 }; static const LangEntry lang_table[] = { @@ -539,7 +539,7 @@ static const LangEntry lang_table[] = { /*0501*/ { "slk", 647 }, /*0502*/ { "sqi", 652 }, /*0503*/ { "zho", 686 }, -/*- AV_LANG_ISO639_1 entries (184) -*/ +/*- AV_LANG_ISO639_1