diff options
author | adam <adam@pkgsrc.org> | 2011-08-09 20:53:15 +0000 |
---|---|---|
committer | adam <adam@pkgsrc.org> | 2011-08-09 20:53:15 +0000 |
commit | 844303b4c51d9707ec850c69b79d17831019bdb5 (patch) | |
tree | 8fad4f41b4613fc2fc430ab8efe0fec9cf2648e7 | |
parent | 9b4f94cc460e5d05a1e9625fb43bf8d398496210 (diff) | |
download | pkgsrc-844303b4c51d9707ec850c69b79d17831019bdb5.tar.gz |
Provide DVDFileStat functions needed for dvdbackup 0.4.1
-rw-r--r-- | multimedia/libdvdread/Makefile | 12 | ||||
-rw-r--r-- | multimedia/libdvdread/buildlink3.mk | 6 | ||||
-rw-r--r-- | multimedia/libdvdread/distinfo | 4 | ||||
-rw-r--r-- | multimedia/libdvdread/patches/patch-src_dvd_reader.c | 194 | ||||
-rw-r--r-- | multimedia/libdvdread/patches/patch-src_dvd_reader.h | 49 |
5 files changed, 256 insertions, 9 deletions
diff --git a/multimedia/libdvdread/Makefile b/multimedia/libdvdread/Makefile index 6fce5dae1f4..09fefbbb32a 100644 --- a/multimedia/libdvdread/Makefile +++ b/multimedia/libdvdread/Makefile @@ -1,6 +1,7 @@ -# $NetBSD: Makefile,v 1.19 2009/01/14 22:28:05 jmcneill Exp $ +# $NetBSD: Makefile,v 1.20 2011/08/09 20:53:15 adam Exp $ DISTNAME= libdvdread-4.1.3 +PKGREVISION= 1 CATEGORIES= multimedia MASTER_SITES= http://www.mplayerhq.hu/MPlayer/releases/dvdnav/ EXTRACT_SUFX= .tar.bz2 @@ -8,15 +9,16 @@ EXTRACT_SUFX= .tar.bz2 MAINTAINER= pkgsrc-users@NetBSD.org HOMEPAGE= http://www.mplayerhq.hu/ COMMENT= DVD access library +LICENSE= gnu-gpl-v2 PKG_INSTALLATION_TYPES= overwrite pkgviews PKG_DESTDIR_SUPPORT= user-destdir -GNU_CONFIGURE= yes -USE_TOOLS+= gmake autoconf automake aclocal autoreconf -USE_LIBTOOL= yes +USE_LIBTOOL= yes +USE_TOOLS+= aclocal autoconf automake autoreconf gmake +GNU_CONFIGURE= yes -MESSAGE_SUBST+= PKGBASE=${PKGBASE:Q} +MESSAGE_SUBST+= PKGBASE=${PKGBASE} pre-configure: cd ${WRKSRC} && autoreconf -vi diff --git a/multimedia/libdvdread/buildlink3.mk b/multimedia/libdvdread/buildlink3.mk index 8be064eb411..4095849f5c5 100644 --- a/multimedia/libdvdread/buildlink3.mk +++ b/multimedia/libdvdread/buildlink3.mk @@ -1,12 +1,12 @@ -# $NetBSD: buildlink3.mk,v 1.10 2009/03/20 19:25:04 joerg Exp $ +# $NetBSD: buildlink3.mk,v 1.11 2011/08/09 20:53:15 adam Exp $ BUILDLINK_TREE+= libdvdread .if !defined(LIBDVDREAD_BUILDLINK3_MK) LIBDVDREAD_BUILDLINK3_MK:= -BUILDLINK_API_DEPENDS.libdvdread+= libdvdread>=4.1.3 -BUILDLINK_ABI_DEPENDS.libdvdread+= libdvdread>=4.1.3 +BUILDLINK_API_DEPENDS.libdvdread+= libdvdread>=4.1.3nb1 +BUILDLINK_ABI_DEPENDS.libdvdread+= libdvdread>=4.1.3nb1 BUILDLINK_PKGSRCDIR.libdvdread?= ../../multimedia/libdvdread .endif # LIBDVDREAD_BUILDLINK3_MK diff --git a/multimedia/libdvdread/distinfo b/multimedia/libdvdread/distinfo index 83e9e140757..c06d1c2b27b 100644 --- a/multimedia/libdvdread/distinfo +++ b/multimedia/libdvdread/distinfo @@ -1,6 +1,8 @@ -$NetBSD: distinfo,v 1.17 2009/02/23 11:09:27 wiz Exp $ +$NetBSD: distinfo,v 1.18 2011/08/09 20:53:15 adam Exp $ SHA1 (libdvdread-4.1.3.tar.bz2) = fc4c7ba3e49929191e057b435bc4f867583ea8d5 RMD160 (libdvdread-4.1.3.tar.bz2) = 60e802494bf64e019d6ccfcf42a17dd03e29a382 Size (libdvdread-4.1.3.tar.bz2) = 96899 bytes SHA1 (patch-aa) = 455fae91eba6262713cbc86f9a56b090cb6f8acf +SHA1 (patch-src_dvd_reader.c) = 7def0ada927cb17ace73d5ae78adc959cc495a62 +SHA1 (patch-src_dvd_reader.h) = f2461aa7cffab9a5c910b3fb4dbaf9d14b23624c diff --git a/multimedia/libdvdread/patches/patch-src_dvd_reader.c b/multimedia/libdvdread/patches/patch-src_dvd_reader.c new file mode 100644 index 00000000000..cceb0a461f5 --- /dev/null +++ b/multimedia/libdvdread/patches/patch-src_dvd_reader.c @@ -0,0 +1,194 @@ +$NetBSD: patch-src_dvd_reader.c,v 1.1 2011/08/09 20:53:15 adam Exp $ + +Provide DVDFileStat functions; patch from http://dvdbackup.sourceforge.net/ + +--- src/dvd_reader.c.orig 2008-09-06 21:55:51.000000000 +0000 ++++ src/dvd_reader.c +@@ -889,6 +889,187 @@ void DVDCloseFile( dvd_file_t *dvd_file + } + } + ++static int DVDFileStatVOBUDF(dvd_reader_t *dvd, int title, ++ int menu, dvd_stat_t *statbuf) ++{ ++ char filename[ MAX_UDF_FILE_NAME_LEN ]; ++ uint32_t size; ++ off_t tot_size; ++ off_t parts_size[9]; ++ int nr_parts = 0; ++ int n; ++ ++ if( title == 0 ) { ++ sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" ); ++ } else { ++ sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, menu ? 0 : 1 ); ++ } ++ if(!UDFFindFile( dvd, filename, &size )) { ++ return -1; ++ } ++ tot_size = size; ++ nr_parts = 1; ++ parts_size[0] = size; ++ ++ if( !menu ) { ++ int cur; ++ ++ for( cur = 2; cur < 10; cur++ ) { ++ sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, cur ); ++ if( !UDFFindFile( dvd, filename, &size ) ) { ++ break; ++ } ++ parts_size[nr_parts] = size; ++ tot_size += size; ++ nr_parts++; ++ } ++ } ++ ++ statbuf->size = tot_size; ++ statbuf->nr_parts = nr_parts; ++ for(n = 0; n < nr_parts; n++) { ++ statbuf->parts_size[n] = parts_size[n]; ++ } ++ return 0; ++} ++ ++ ++static int DVDFileStatVOBPath( dvd_reader_t *dvd, int title, ++ int menu, dvd_stat_t *statbuf ) ++{ ++ char filename[ MAX_UDF_FILE_NAME_LEN ]; ++ char full_path[ PATH_MAX + 1 ]; ++ struct stat fileinfo; ++ off_t tot_size; ++ off_t parts_size[9]; ++ int nr_parts = 0; ++ int n; ++ ++ ++ ++ if( title == 0 ) { ++ sprintf( filename, "VIDEO_TS.VOB" ); ++ } else { ++ sprintf( filename, "VTS_%02d_%d.VOB", title, menu ? 0 : 1 ); ++ } ++ if( !findDVDFile( dvd, filename, full_path ) ) { ++ return -1; ++ } ++ ++ if( stat( full_path, &fileinfo ) < 0 ) { ++ fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename ); ++ return -1; ++ } ++ ++ ++ tot_size = fileinfo.st_size; ++ nr_parts = 1; ++ parts_size[0] = fileinfo.st_size; ++ ++ if( !menu ) { ++ int cur; ++ ++ for( cur = 2; cur < 10; cur++ ) { ++ ++ sprintf( filename, "VTS_%02d_%d.VOB", title, cur ); ++ if( !findDVDFile( dvd, filename, full_path ) ) { ++ break; ++ } ++ ++ if( stat( full_path, &fileinfo ) < 0 ) { ++ fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename ); ++ break; ++ } ++ ++ parts_size[nr_parts] = fileinfo.st_size; ++ tot_size += parts_size[nr_parts]; ++ nr_parts++; ++ } ++ } ++ ++ statbuf->size = tot_size; ++ statbuf->nr_parts = nr_parts; ++ for(n = 0; n < nr_parts; n++) { ++ statbuf->parts_size[n] = parts_size[n]; ++ } ++ return 0; ++} ++ ++ ++int DVDFileStat(dvd_reader_t *dvd, int titlenum, ++ dvd_read_domain_t domain, dvd_stat_t *statbuf) ++{ ++ char filename[ MAX_UDF_FILE_NAME_LEN ]; ++ char full_path[ PATH_MAX + 1 ]; ++ struct stat fileinfo; ++ uint32_t size; ++ ++ /* Check arguments. */ ++ if( dvd == NULL || titlenum < 0 ) { ++ errno = EINVAL; ++ return -1; ++ } ++ ++ switch( domain ) { ++ case DVD_READ_INFO_FILE: ++ if( titlenum == 0 ) { ++ sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" ); ++ } else { ++ sprintf( filename, "/VIDEO_TS/VTS_%02i_0.IFO", titlenum ); ++ } ++ break; ++ case DVD_READ_INFO_BACKUP_FILE: ++ if( titlenum == 0 ) { ++ sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" ); ++ } else { ++ sprintf( filename, "/VIDEO_TS/VTS_%02i_0.BUP", titlenum ); ++ } ++ break; ++ case DVD_READ_MENU_VOBS: ++ if( dvd->isImageFile ) { ++ return DVDFileStatVOBUDF( dvd, titlenum, 1, statbuf ); ++ } else { ++ return DVDFileStatVOBPath( dvd, titlenum, 1, statbuf ); ++ } ++ break; ++ case DVD_READ_TITLE_VOBS: ++ if( titlenum == 0 ) { ++ return -1; ++ } ++ if( dvd->isImageFile ) { ++ return DVDFileStatVOBUDF( dvd, titlenum, 0, statbuf ); ++ } else { ++ return DVDFileStatVOBPath( dvd, titlenum, 0, statbuf ); ++ } ++ break; ++ default: ++ fprintf( stderr, "libdvdread: Invalid domain for file stat.\n" ); ++ errno = EINVAL; ++ return -1; ++ } ++ ++ if( dvd->isImageFile ) { ++ if( UDFFindFile( dvd, filename, &size ) ) { ++ statbuf->size = size; ++ statbuf->nr_parts = 1; ++ statbuf->parts_size[0] = size; ++ return 0; ++ } ++ } else { ++ if( findDVDFile( dvd, filename, full_path ) ) { ++ if( stat( full_path, &fileinfo ) < 0 ) { ++ fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename ); ++ } else { ++ statbuf->size = fileinfo.st_size; ++ statbuf->nr_parts = 1; ++ statbuf->parts_size[0] = statbuf->size; ++ return 0; ++ } ++ } ++ } ++ return -1; ++} ++ + /* Internal, but used from dvd_udf.c */ + int UDFReadBlocksRaw( dvd_reader_t *device, uint32_t lb_number, + size_t block_count, unsigned char *data, diff --git a/multimedia/libdvdread/patches/patch-src_dvd_reader.h b/multimedia/libdvdread/patches/patch-src_dvd_reader.h new file mode 100644 index 00000000000..aa6b87486e1 --- /dev/null +++ b/multimedia/libdvdread/patches/patch-src_dvd_reader.h @@ -0,0 +1,49 @@ +$NetBSD: patch-src_dvd_reader.h,v 1.1 2011/08/09 20:53:15 adam Exp $ + +Provide DVDFileStat functions; patch from http://dvdbackup.sourceforge.net/ + +--- src/dvd_reader.h.orig 2008-09-06 21:55:51.000000000 +0000 ++++ src/dvd_reader.h +@@ -115,6 +115,42 @@ typedef enum { + } dvd_read_domain_t; + + /** ++ * ++ */ ++typedef struct { ++ off_t size; /**< Total size of file in bytes */ ++ int nr_parts; /**< Number of file parts */ ++ off_t parts_size[9]; /**< Size of each part in bytes */ ++} dvd_stat_t; ++ ++/** ++ * Stats a file on the DVD given the title number and domain. ++ * The information about the file is stored in a dvd_stat_t ++ * which contains information about the size of the file and ++ * the number of parts in case of a multipart file and the respective ++ * sizes of the parts. ++ * A multipart file is for instance VTS_02_1.VOB, VTS_02_2.VOB, VTS_02_3.VOB ++ * The size of VTS_02_1.VOB will be stored in stat->parts_size[0], ++ * VTS_02_2.VOB in stat->parts_size[1], ... ++ * The total size (sum of all parts) is stored in stat->size and ++ * stat->nr_parts will hold the number of parts. ++ * Only DVD_READ_TITLE_VOBS (VTS_??_[1-9].VOB) can be multipart files. ++ * ++ * This function is only of use if you want to get the size of each file ++ * in the filesystem. These sizes are not needed to use any other ++ * functions in libdvdread. ++ * ++ * @param dvd A dvd read handle. ++ * @param titlenum Which Video Title Set should be used, VIDEO_TS is 0. ++ * @param domain Which domain. ++ * @param stat Pointer to where the result is stored. ++ * @return If successful 0, otherwise -1. ++ * ++ * int DVDFileStat(dvd, titlenum, domain, stat); ++ */ ++int DVDFileStat(dvd_reader_t *, int, dvd_read_domain_t, dvd_stat_t *); ++ ++/** + * Opens a file on the DVD given the title number and domain. + * + * If the title number is 0, the video manager information is opened |