# HG changeset patch # User jcdutton # Date 1032260425 0 # Node ID c1dff1899bda016aa8c18e47ab002818d7923c56 # Parent 2fcb4f228308407b9fb0940eefdd2f278ea89ce2 First patch for personalized dvd viewing. I have not tested it yet. diff -r 2fcb4f228308 -r c1dff1899bda Makefile.am --- a/Makefile.am Tue Sep 17 10:47:02 2002 +0000 +++ b/Makefile.am Tue Sep 17 11:00:25 2002 +0000 @@ -4,13 +4,13 @@ libdvdnav_la_SOURCES = decoder.c dvdnav.c vm.c vmcmd.c \ read_cache.c navigation.c highlight.c \ - searching.c settings.c + searching.c settings.c remap.c libdvdnav_la_LDFLAGS = $(DVDREAD_LIBS) $(THREAD_LIBS) \ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) # -release $(DVDNAV_MAJOR).$(DVDNAV_MINOR).$(DVDNAV_SUB) include_HEADERS = decoder.h dvdnav.h dvdnav_events.h \ - dvdnav_internal.h vm.h vmcmd.h read_cache.h dvd_types.h + dvdnav_internal.h vm.h vmcmd.h read_cache.h dvd_types.h remap.h ### # Install header files (default=$includedir/xine) diff -r 2fcb4f228308 -r c1dff1899bda dvdnav.c --- a/dvdnav.c Tue Sep 17 10:47:02 2002 +0000 +++ b/dvdnav.c Tue Sep 17 11:00:25 2002 +0000 @@ -40,6 +40,8 @@ #include #include +#include "remap.h" + /* * NOTE: * All NLCK_*() function are not mutex locked, this made them reusable in @@ -784,6 +786,14 @@ /* Perform the jump if necessary (this is always a * VOBU boundary). */ + if (this->vm->map) { + this->vobu.vobu_next = remap_block( this->vm->map, + this->vm->state.domain, this->vm->state.TTN_REG, + this->vm->state.pgN, + this->vobu.vobu_start, this->vobu.vobu_next); + } + + //result = DVDReadBlocks(this->file, this->vobu.vobu_start + this->vobu.vobu_next, 1, buf); result = dvdnav_read_cache_block(this->cache, this->vobu.vobu_start + this->vobu.vobu_next, 1, buf); @@ -1000,6 +1010,9 @@ /* * $Log$ + * Revision 1.36 2002/09/17 11:00:21 jcdutton + * First patch for personalized dvd viewing. I have not tested it yet. + * * Revision 1.35 2002/09/05 12:55:05 mroi * fix memleaks in dvdnav_open * diff -r 2fcb4f228308 -r c1dff1899bda vm.c --- a/vm.c Tue Sep 17 10:47:02 2002 +0000 +++ b/vm.c Tue Sep 17 11:00:25 2002 +0000 @@ -33,6 +33,9 @@ #include #include #include +#include +#include +#include #include #include @@ -173,6 +176,63 @@ return vm->dvd; } +void dvd_read_name( vm_t *this, char *devname) { + int fd, i; + off64_t off; + uint8_t data[DVD_VIDEO_LB_LEN]; + + /* Read DVD name */ + fd=open(devname, O_RDONLY); + if (fd > 0) { + off = lseek64( fd, 32 * (int64_t) DVD_VIDEO_LB_LEN, SEEK_SET ); + if( off == ( 32 * (int64_t) DVD_VIDEO_LB_LEN ) ) { + off = read( fd, data, DVD_VIDEO_LB_LEN ); + close(fd); + if (off == ( (int64_t) DVD_VIDEO_LB_LEN )) { + fprintf( stderr, "VM DVD Title: "); + for(i=25; i < 73; i++ ) { + if((data[i] == 0)) break; + if((data[i] > 32) && (data[i] < 127)) { + fprintf(stderr, "%c", data[i]); + } else { + fprintf(stderr, " "); + } + } + strncpy(&this->dvd_name[0], &data[25], 48); + /* fprintf(stderr, "TITLE:%s\n",&this->dvd_name[0]); */ + this->dvd_name[48]=0; + this->dvd_name_length=strlen(&this->dvd_name[0]); + fprintf( stderr, "\nVM DVD Serial Number: "); + for(i=73; i < 89; i++ ) { + if((data[i] == 0)) break; + if((data[i] > 32) && (data[i] < 127)) { + fprintf(stderr, "%c", data[i]); + } else { + fprintf(stderr, " "); + } + } + fprintf( stderr, "\nVM DVD Title (Alternative): "); + for(i=89; i < 128; i++ ) { + if((data[i] == 0)) break; + if((data[i] > 32) && (data[i] < 127)) { + fprintf(stderr, "%c", data[i]); + } else { + fprintf(stderr, " "); + } + } + fprintf( stderr, "\n"); + } else { + fprintf( stderr, "libdvdread: Can't read name block. Probably not a DVD-ROM device.\n"); + } + } else { + fprintf( stderr, "libdvdread: Can't seek to block %u\n", 32 ); + } + close(fd); + } else { + fprintf(stderr,"NAME OPEN FAILED\n"); + } +} + int vm_reset(vm_t *vm, char *dvdroot) /* , register_t regs) */ { /* Setup State */ memset((vm->state).registers.SPRM, 0, sizeof(uint16_t)*24); @@ -222,6 +282,8 @@ fprintf(MSG_OUT, "libdvdnav: vm: faild to open/read the DVD\n"); return -1; } + dvd_read_name(vm, dvdroot); + vm->map = remap_loadmap( vm->dvd_name); vm->vmgi = ifoOpenVMGI(vm->dvd); if(!vm->vmgi) { @@ -1926,6 +1988,9 @@ /* * $Log$ + * Revision 1.35 2002/09/17 11:00:22 jcdutton + * First patch for personalized dvd viewing. I have not tested it yet. + * * Revision 1.34 2002/09/03 07:50:45 jcdutton * Improve chapter selection functions. * diff -r 2fcb4f228308 -r c1dff1899bda vm.h --- a/vm.h Tue Sep 17 10:47:02 2002 +0000 +++ b/vm.h Tue Sep 17 11:00:25 2002 +0000 @@ -27,6 +27,7 @@ #define VM_H_INCLUDED #include "decoder.h" +#include "remap.h" #include /* DOMAIN enum */ @@ -87,6 +88,9 @@ dvd_state_t state; int badness_counter; int32_t hop_channel; + char dvd_name[50]; + int dvd_name_length; + remap_t *map; } vm_t;