Here are updates to libdvdcss 1.6.0, libdvdnav 7.0.0 and libdvdread 7.1.1.
Tested with mpv, mplayer and VLC.
libdvdcss
Changes between 1.5.0 and 1.6.0:
--------------------------------
* Add support for CPRM (Content Protection for Recordable Media) decryption
for CPRM-protected DVD media (DVD-RW for example)
* Add dvdcss_get_encryption_type function to the public API
This allows querying the disc's copyright protection system type (CPST)
to detect CSS/CPPM and CPRM protected media
* Update dvdcpxm_setup to allow context reuse via NULL arguments and to
accept a raw CPRM key in place of the MKB
* Improve CPXM/CPPM/CPRM error handling, context lifetime, and cleanup
* Fix CPRM decryption and Darwin CPRM ioctl paths
* Fix CPPM decryption cache teardown and copy-control handling
* Fix OS/2 build issues and add CPRM media ID/MKB pack ioctl support
* Fix FreeBSD and PATH_MAX build issues
* Improve Windows drive opening support
* Add proper Haiku support
Changes between 1.4.3 and 1.5.0:
--------------------------------
* Add support for DVD-Audio disc decryption via libdvdcpxm integration
Add new dvdcpxm.h header for dvdcpxm function calls
Add dvdcpxm_read, dvdcpxm_readv, and dvdcpxm_seek functions
Add initialization and cleanup functions: dvdcpxm_init, dvdcpxm_close
* Switch build system to Meson and remove autotools and Visual Studio files
* Fix public header include paths
* Fix build issues with older compilers and scsi/sg.h detection
* Miscellaneous CI, documentation, and platform cleanups
libdvdnav
libdvdnav (7.0.0)
* add dvdnav_get_volid_string to obtain the volume id of the disc
* add dvdnav_get_number_of_streams API to list tracks
* add dvdnav_set_active_stream API to activate a stream
* add dvdnav_toggle_spu_stream API to enable/disable the current SPU stream
* add dvdnav_get_disk_region_mask API to get the reported version from the disk
* expose dvdnav_jump_to_sector_by_time to the API
* switch build system to Meson (and remove autotools)
* remove obsolete MSVC files
* fix public dvdnav.h includes
* fix undefined shifts and add extra navigation safeguards
* update CI targets, including wasm and newer platform images
* fix crashes and avoid asserts
libdvdread
libdvdread (7.1.1)
* reduce the number of symbols exported to avoid conflicts when linking
* improve CI coverage
libdvdread (7.1.0)
* DVD-Audio support:
* Allow CPRM and CSS decryption support to be available simultaneously
* Add Audio Still Video Set (ASVS) IFO structures and readers
* Add ASVS and SAMG support to public IFO open APIs
* Expose ASVS IFO, backup and menu VOB files
* Improve AOB/VOB stream type handling
* Misc fixes on structures documentation
* DVD-VR support:
* Add DVD-VR IFO parsing (PGIT, PG_GI, PS_GI)
* Add DVDOpenVideoRecording functions
* Add ifoOpenVideoRecording support
* Add CPRM decryption support
* Add DVDProbeType auto-detection for DVD-Video, DVD-Audio and DVD-VR
* Add support for user-defined cells and time maps
* Harden parsing of missing or malformed DVD-VR metadata
* Add DVDOpenFiles for caller-provided virtual filesystem implementations
* Split the internal filesystem implementation into platform-specific helpers
* Improve file and directory handling on Windows, macOS and iOS
* Improve logger fallback behavior when no controlling terminal is available
* Add audio and subpicture code extension enums
* Fixes and hardening:
* Hardened IFO parsing for oversized still video groups
* Fix DVD-Audio ASVS/SAMG fallback handling
* Fix DVD-VR cell entry point byte swapping
* Fix DVDFileSeek validation for non-sector-aligned files
* Fix partial-block size accounting
* Fix resource leaks, null pointer checks and error paths
libdvdread (7.0.1)
* Fix crashes when dvdcss library is not present
libdvdread (7.0.0)
* DVD-Audio support:
* Introduced DVDOpenStreamAudio, DVDOpenAudio for opening DVD-Audio discs
* Added DVD-Audio IFO structs for AMGI, SAMG and ATS
* Added IFO read, print functions for AMGI, SAMG and ATS
* Added dvdcpxm integration from libdvdcss 1.5.0 for encrypted DVD-A Discs
* Switch build system to Meson (and remove autotools build system)
* Use visibility attributes for exported symbols
* Docs and Readme updates
* Add missing stream callback functionality
* Fix public header include paths
* Improve port on Universal Windows Platform
* Misc improvements and solidification for the port on various platforms
Index: converters/libdvdcss/Makefile
===================================================================
RCS file: /cvs/ports/converters/libdvdcss/Makefile,v
retrieving revision 1.34
diff -u -p -u -p -r1.34 Makefile
--- converters/libdvdcss/Makefile 20 Sep 2023 09:53:44 -0000 1.34
+++ converters/libdvdcss/Makefile 7 Nov 2026 05:21:00 -0000
@@ -1,19 +1,18 @@
COMMENT= descramble scrambled DVDs
-VER= 1.4.3
+VER= 1.6.0
DISTNAME= libdvdcss-${VER}
CATEGORIES= converters
SITES= https://download.videolan.org/pub/videolan/libdvdcss/${VER}/
-EXTRACT_SUFX= .tar.bz2
+EXTRACT_SUFX= .tar.xz
-SHARED_LIBS= dvdcss 4.1
+SHARED_LIBS= dvdcss 4.2
HOMEPAGE= https://www.videolan.org/developers/libdvdcss.html
# GPLv2+
PERMIT_PACKAGE= Yes
-CONFIGURE_STYLE= gnu
-CONFIGURE_ARGS= --disable-doc
+MODULES= devel/meson
.include <bsd.port.mk>
Index: converters/libdvdcss/distinfo
===================================================================
RCS file: /cvs/ports/converters/libdvdcss/distinfo,v
retrieving revision 1.20
diff -u -p -u -p -r1.20 distinfo
--- converters/libdvdcss/distinfo 11 Oct 2021 06:11:35 -0000 1.20
+++ converters/libdvdcss/distinfo 7 Nov 2026 05:21:00 -0000
@@ -1,2 +1,2 @@
-SHA256 (libdvdcss-1.4.3.tar.bz2) = IzzJL13AHF06lvWzWCvn1c7lo1pS06CBWHRdPYYHAHk=
-SIZE (libdvdcss-1.4.3.tar.bz2) = 388404
+SHA256 (libdvdcss-1.6.0.tar.xz) = fqVWyEa3v8MtR7QcrlbRhjprbV9wa7Fid41vKYSQl3w=
+SIZE (libdvdcss-1.6.0.tar.xz) = 83640
Index: converters/libdvdcss/patches/patch-src_ioctl_c
===================================================================
RCS file: converters/libdvdcss/patches/patch-src_ioctl_c
diff -N converters/libdvdcss/patches/patch-src_ioctl_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ converters/libdvdcss/patches/patch-src_ioctl_c 7 Nov 2026 05:21:00
-0000
@@ -0,0 +1,135 @@
+- Implement ioctl_ReadCPRMMediaId() and ioctl_ReadCPRMMKBPack() for OpenBSD
+- Fix ioctl_InvalidateAgid() to use DVD_INVALIDATE_AGID with DVD_AUTH
+
+Index: src/ioctl.c
+--- src/ioctl.c.orig
++++ src/ioctl.c
+@@ -90,6 +90,10 @@
+ # include <sys/mman.h>
+ # include <sys/dcmd_cam.h>
+ #endif
++#ifdef HAVE_OPENBSD_DVD_STRUCT
++# include <stdlib.h>
++# include <sys/scsiio.h>
++#endif
+
+ #include "dvdcss/dvdcss.h"
+ #include "libdvdcpxm.h"
+@@ -113,6 +117,8 @@ static void WinInitSPTD ( SCSI_PASS_THROUGH_DIRECT *,
+ static void QNXInitCPT ( CAM_PASS_THRU *, int );
+ #elif defined( __OS2__ )
+ static void OS2InitSDC( struct OS2_ExecSCSICmd *, int );
++#elif defined( HAVE_OPENBSD_DVD_STRUCT )
++static void OpenBSDInitSCSIREQ( scsireq_t *, int );
+ #endif
+
+ /*****************************************************************************
+@@ -935,7 +941,7 @@ int ioctl_InvalidateAgid( int i_fd, int *pi_agid )
+ #if defined( HAVE_LINUX_DVD_STRUCT )
+ dvd_authinfo auth_info = { 0 };
+
+- auth_info.type = DVDCSS_INVALIDATE_AGID;
++ auth_info.type = DVD_INVALIDATE_AGID;
+ auth_info.lsa.agid = *pi_agid;
+
+ i_ret = ioctl( i_fd, DVD_AUTH, &auth_info );
+@@ -1122,6 +1128,24 @@ int ioctl_ReadCPRMMediaId(int i_fd,int *p_agid, uint8_
+ if (i_ret == 0)
+ memcpy(p_data_buffer, p_buffer, CPRM_MEDIA_ID_SIZE);
+
++#elif defined( HAVE_OPENBSD_DVD_STRUCT )
++ scsireq_t sr = { 0 };
++ uint8_t p_buffer[ CPRM_MEDIA_ID_SIZE + 4 ];
++
++ sr.databuf = (caddr_t)p_buffer;
++ sr.datalen = sizeof( p_buffer );
++ OpenBSDInitSCSIREQ( &sr, GPCMD_READ_DVD_STRUCTURE );
++
++ sr.cmd[ 7 ] = CPRM_STRUCT_MEDIA_ID;
++ sr.cmd[ 10 ] = *p_agid << 6;
++
++ i_ret = ioctl( i_fd, SCIOCCOMMAND, &sr );
++ if( i_ret == 0 && sr.retsts != SCCMD_OK )
++ i_ret = -1;
++
++ if( i_ret == 0 )
++ memcpy( p_data_buffer, p_buffer + 4, CPRM_MEDIA_ID_SIZE );
++
+ #else
+ # error "DVD ioctls are unavailable on this system"
+
+@@ -1271,6 +1295,36 @@ int ioctl_ReadCPRMMKBPack(int i_fd, int *p_agid, int m
+ memcpy(p_mkb_pack, p_buffer + 4, CPRM_MKB_PACK_SIZE);
+ }
+
++#elif defined( HAVE_OPENBSD_DVD_STRUCT )
++ scsireq_t sr = { 0 };
++ uint8_t *p_buffer = malloc( CPRM_MKB_PACK_SIZE + 4 );
++
++ if( !p_buffer )
++ return -1;
++
++ sr.databuf = (caddr_t)p_buffer;
++ sr.datalen = CPRM_MKB_PACK_SIZE + 4;
++ OpenBSDInitSCSIREQ( &sr, GPCMD_READ_DVD_STRUCTURE );
++
++ sr.cmd[ 2 ] = (uint8_t)( ( mkb_pack >> 24 ) & 0xff );
++ sr.cmd[ 3 ] = (uint8_t)( ( mkb_pack >> 16 ) & 0xff );
++ sr.cmd[ 4 ] = (uint8_t)( ( mkb_pack >> 8 ) & 0xff );
++ sr.cmd[ 5 ] = (uint8_t)( mkb_pack & 0xff );
++ sr.cmd[ 7 ] = CPRM_STRUCT_MKB;
++ sr.cmd[ 10 ] = *p_agid << 6;
++
++ i_ret = ioctl( i_fd, SCIOCCOMMAND, &sr );
++ if( i_ret == 0 && sr.retsts != SCCMD_OK )
++ i_ret = -1;
++
++ if( i_ret == 0 )
++ {
++ *p_total_packs = p_buffer[ 3 ];
++ memcpy( p_mkb_pack, p_buffer + 4, CPRM_MKB_PACK_SIZE );
++ }
++
++ free( p_buffer );
++
+ #else
+ # error "DVD ioctls are unavailable on this system"
+
+@@ -1858,3 +1912,37 @@ static void OS2InitSDC( struct OS2_ExecSCSICmd *p_sdc,
+ p_sdc->cmd_length = 12;
+ }
+ #endif /* defined( __OS2__ ) */
++
++#if defined( HAVE_OPENBSD_DVD_STRUCT )
++/*****************************************************************************
++ * OpenBSDInitSCSIREQ: initialize a scsireq structure for SCIOCCOMMAND
++ *****************************************************************************
++ * This function initializes an OpenBSD SCSI request structure for future
++ * use, either a read command or a write command. It is used for the
++ * commands the kernel's DVD_READ_STRUCT/DVD_AUTH ioctls do not cover.
++ * SCIOCCOMMAND is only accepted on the raw partition of the cd(4) device.
++
*****************************************************************************/
++static void OpenBSDInitSCSIREQ( scsireq_t *p_sr, int i_type )
++{
++ memset( p_sr->databuf, 0, p_sr->datalen );
++
++ switch( i_type )
++ {
++ case GPCMD_SEND_KEY:
++ p_sr->flags = SCCMD_WRITE;
++ break;
++
++ case GPCMD_READ_DVD_STRUCTURE:
++ case GPCMD_REPORT_KEY:
++ p_sr->flags = SCCMD_READ;
++ break;
++ }
++
++ p_sr->cmd[ 0 ] = i_type;
++ p_sr->cmd[ 8 ] = (p_sr->datalen >> 8) & 0xff;
++ p_sr->cmd[ 9 ] = p_sr->datalen & 0xff;
++ p_sr->cmdlen = 12;
++ p_sr->senselen = SENSEBUFLEN;
++ p_sr->timeout = 5000; /* milliseconds */
++}
++#endif /* defined( HAVE_OPENBSD_DVD_STRUCT ) */
Index: converters/libdvdcss/pkg/PLIST
===================================================================
RCS file: /cvs/ports/converters/libdvdcss/pkg/PLIST,v
retrieving revision 1.13
diff -u -p -u -p -r1.13 PLIST
--- converters/libdvdcss/pkg/PLIST 11 Mar 2022 18:27:03 -0000 1.13
+++ converters/libdvdcss/pkg/PLIST 7 Nov 2026 05:21:00 -0000
@@ -1,13 +1,12 @@
include/dvdcss/
+include/dvdcss/dvdcpxm.h
include/dvdcss/dvdcss.h
include/dvdcss/version.h
@static-lib lib/libdvdcss.a
-lib/libdvdcss.la
@lib lib/libdvdcss.so.${LIBdvdcss_VERSION}
lib/pkgconfig/libdvdcss.pc
share/doc/libdvdcss/
share/doc/libdvdcss/AUTHORS
share/doc/libdvdcss/COPYING
-share/doc/libdvdcss/ChangeLog
share/doc/libdvdcss/NEWS
-share/doc/libdvdcss/README
+share/doc/libdvdcss/README.md
Index: multimedia/libdvdnav/Makefile
===================================================================
RCS file: /cvs/ports/multimedia/libdvdnav/Makefile,v
retrieving revision 1.33
diff -u -p -u -p -r1.33 Makefile
--- multimedia/libdvdnav/Makefile 17 Oct 2024 10:50:03 -0000 1.33
+++ multimedia/libdvdnav/Makefile 7 Nov 2026 05:21:00 -0000
@@ -1,11 +1,11 @@
COMMENT= DVD navigation library
-VER= 6.1.1
+VER= 7.0.0
DISTNAME= libdvdnav-${VER}
EPOCH= 0
CATEGORIES= multimedia
SITES= https://download.videolan.org/pub/videolan/libdvdnav/${VER}/
-EXTRACT_SUFX= .tar.bz2
+EXTRACT_SUFX= .tar.xz
SHARED_LIBS= dvdnav 7.2
@@ -14,10 +14,10 @@ HOMEPAGE= http://dvdnav.mplayerhq.hu/
# GPLv2+
PERMIT_PACKAGE= Yes
-WANTLIB= dvdread>=9.0 pthread
+WANTLIB= dvdread>=9.0
-LIB_DEPENDS= devel/libdvdread>=6.1.2
+LIB_DEPENDS= devel/libdvdread>=7.1.1
-CONFIGURE_STYLE= gnu
+MODULES= devel/meson
.include <bsd.port.mk>
Index: multimedia/libdvdnav/distinfo
===================================================================
RCS file: /cvs/ports/multimedia/libdvdnav/distinfo,v
retrieving revision 1.13
diff -u -p -u -p -r1.13 distinfo
--- multimedia/libdvdnav/distinfo 11 Oct 2021 06:11:31 -0000 1.13
+++ multimedia/libdvdnav/distinfo 7 Nov 2026 05:21:00 -0000
@@ -1,2 +1,2 @@
-SHA256 (libdvdnav-6.1.1.tar.bz2) = wZGnR1lH0yP/doDPksD7G+gjdwGIXzdlbGTQTpjRjUg=
-SIZE (libdvdnav-6.1.1.tar.bz2) = 367606
+SHA256 (libdvdnav-7.0.0.tar.xz) = oqGPWtNtEzx0v5EGtkRYBvolOwkUGkY5JVA5S2R7Ih4=
+SIZE (libdvdnav-7.0.0.tar.xz) = 85132
Index: multimedia/libdvdnav/patches/patch-misc_dvdnav_pc_in
===================================================================
RCS file: multimedia/libdvdnav/patches/patch-misc_dvdnav_pc_in
diff -N multimedia/libdvdnav/patches/patch-misc_dvdnav_pc_in
--- multimedia/libdvdnav/patches/patch-misc_dvdnav_pc_in 11 Mar 2022
19:39:21 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,10 +0,0 @@
-Index: misc/dvdnav.pc.in
---- misc/dvdnav.pc.in.orig
-+++ misc/dvdnav.pc.in
-@@ -9,4 +9,5 @@ Version: @VERSION@
-
- Requires.private: dvdread >= @DVDREAD_MIN_VERSION@
- Cflags: -I${includedir} @THREAD_CFLAGS@
--Libs: -L${libdir} -ldvdnav @THREAD_LIBS@
-+Libs: -L${libdir} -ldvdnav
-+Libs.private: @THREAD_LIBS@
Index: multimedia/libdvdnav/pkg/PLIST
===================================================================
RCS file: /cvs/ports/multimedia/libdvdnav/pkg/PLIST,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 PLIST
--- multimedia/libdvdnav/pkg/PLIST 11 Mar 2022 19:39:21 -0000 1.8
+++ multimedia/libdvdnav/pkg/PLIST 7 Nov 2026 05:21:00 -0000
@@ -4,12 +4,11 @@ include/dvdnav/dvdnav.h
include/dvdnav/dvdnav_events.h
include/dvdnav/version.h
@static-lib lib/libdvdnav.a
-lib/libdvdnav.la
@lib lib/libdvdnav.so.${LIBdvdnav_VERSION}
lib/pkgconfig/dvdnav.pc
share/doc/libdvdnav/
share/doc/libdvdnav/AUTHORS
share/doc/libdvdnav/COPYING
share/doc/libdvdnav/ChangeLog
-share/doc/libdvdnav/README
+share/doc/libdvdnav/README.md
share/doc/libdvdnav/TODO
Index: devel/libdvdread/Makefile
===================================================================
RCS file: /cvs/ports/devel/libdvdread/Makefile,v
retrieving revision 1.39
diff -u -p -u -p -r1.39 Makefile
--- devel/libdvdread/Makefile 17 Oct 2024 10:50:02 -0000 1.39
+++ devel/libdvdread/Makefile 7 Nov 2026 05:21:00 -0000
@@ -1,12 +1,12 @@
COMMENT = accessing DVD files
-VER = 6.1.3
+VER = 7.1.1
DISTNAME = libdvdread-${VER}
CATEGORIES = devel
SITES =
https://download.videolan.org/pub/videolan/libdvdread/${VER}/
-EXTRACT_SUFX = .tar.bz2
+EXTRACT_SUFX = .tar.xz
-SHARED_LIBS = dvdread 9.0
+SHARED_LIBS = dvdread 9.1
HOMEPAGE = http://dvdnav.mplayerhq.hu/
@@ -20,7 +20,6 @@ WANTLIB = dvdcss
# dlopen'd
LIB_DEPENDS = converters/libdvdcss>=1.4.3
-CONFIGURE_STYLE = gnu
-CONFIGURE_ARGS =--disable-apidoc
+MODULES= devel/meson
.include <bsd.port.mk>
Index: devel/libdvdread/distinfo
===================================================================
RCS file: /cvs/ports/devel/libdvdread/distinfo,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 distinfo
--- devel/libdvdread/distinfo 17 Nov 2022 06:44:30 -0000 1.16
+++ devel/libdvdread/distinfo 7 Nov 2026 05:21:00 -0000
@@ -1,2 +1,2 @@
-SHA256 (libdvdread-6.1.3.tar.bz2) =
zjVFSZeiCMvlDpEjLw5z+xrDRxllgToTuHMKjxihU2k=
-SIZE (libdvdread-6.1.3.tar.bz2) = 395439
+SHA256 (libdvdread-7.1.1.tar.xz) = oNR4dlSL7IBndLv42/ILsZuhOUZDgxVrMuuOWZFbkKk=
+SIZE (libdvdread-7.1.1.tar.xz) = 102460
Index: devel/libdvdread/pkg/PLIST
===================================================================
RCS file: /cvs/ports/devel/libdvdread/pkg/PLIST,v
retrieving revision 1.11
diff -u -p -u -p -r1.11 PLIST
--- devel/libdvdread/pkg/PLIST 17 Nov 2022 06:44:30 -0000 1.11
+++ devel/libdvdread/pkg/PLIST 7 Nov 2026 05:21:00 -0000
@@ -1,5 +1,7 @@
include/dvdread/
+include/dvdread/attributes.h
include/dvdread/bitreader.h
+include/dvdread/dvd_filesystem.h
include/dvdread/dvd_reader.h
include/dvdread/dvd_udf.h
include/dvdread/ifo_print.h
@@ -10,13 +12,10 @@ include/dvdread/nav_read.h
include/dvdread/nav_types.h
include/dvdread/version.h
@static-lib lib/libdvdread.a
-lib/libdvdread.la
@lib lib/libdvdread.so.${LIBdvdread_VERSION}
lib/pkgconfig/dvdread.pc
share/doc/libdvdread/
share/doc/libdvdread/AUTHORS
share/doc/libdvdread/COPYING
-share/doc/libdvdread/ChangeLog
share/doc/libdvdread/NEWS
share/doc/libdvdread/README.md
-share/doc/libdvdread/TODO