r1167 - in trunk/libdvdnav/src: dvdnav.c dvdnav/dvdnav.h vm/vm.c vm/vm.h
Author: nicodvb Date: Mon Feb 2 23:55:58 2009 New Revision: 1167 Log: implement and export dvdnav_get_serial_string(); patch by Matthew Wire devel - mrwire - co - uk. Fixed by Erik Modified: trunk/libdvdnav/src/dvdnav.c trunk/libdvdnav/src/dvdnav/dvdnav.h trunk/libdvdnav/src/vm/vm.c trunk/libdvdnav/src/vm/vm.h Modified: trunk/libdvdnav/src/dvdnav.c ============================================================================== --- trunk/libdvdnav/src/dvdnav.c Mon Jan 12 13:10:32 2009 (r1166) +++ trunk/libdvdnav/src/dvdnav.c Mon Feb 2 23:55:58 2009 (r1167) @@ -825,6 +825,11 @@ dvdnav_status_t dvdnav_get_title_string( return DVDNAV_STATUS_OK; } +dvdnav_status_t dvdnav_get_serial_string(dvdnav_t *this, const char **serial_str) { + (*serial_str) = this->vm->dvd_serial; + return DVDNAV_STATUS_OK; +} + uint8_t dvdnav_get_video_aspect(dvdnav_t *this) { uint8_t retval; Modified: trunk/libdvdnav/src/dvdnav/dvdnav.h ============================================================================== --- trunk/libdvdnav/src/dvdnav/dvdnav.h Mon Jan 12 13:10:32 2009 (r1166) +++ trunk/libdvdnav/src/dvdnav/dvdnav.h Mon Feb 2 23:55:58 2009 (r1167) @@ -537,6 +537,13 @@ dvdnav_status_t dvdnav_spu_language_sele dvdnav_status_t dvdnav_get_title_string(dvdnav_t *self, const char **title_str); /* + * Returns a string containing the serial number of the DVD. + * This has a max of 15 characters and should be more unique than the + * title string. + */ +dvdnav_status_t dvdnav_get_serial_string(dvdnav_t *self, const char **serial_str); + +/* * Get video aspect code. * The aspect code does only change on VTS boundaries. * See the DVDNAV_VTS_CHANGE event. Modified: trunk/libdvdnav/src/vm/vm.c ============================================================================== --- trunk/libdvdnav/src/vm/vm.c Mon Jan 12 13:10:32 2009 (r1166) +++ trunk/libdvdnav/src/vm/vm.c Mon Feb 2 23:55:58 2009 (r1167) @@ -156,7 +156,7 @@ static int os2_open(const char *name, in } #endif -static void dvd_read_name(char *name, const char *device) { +static void dvd_read_name(char *name, char *serial, const char *device) { /* Because we are compiling with _FILE_OFFSET_BITS=64 * all off_t are 64bit. */ @@ -192,6 +192,8 @@ static void dvd_read_name(char *name, co fprintf(MSG_OUT, " "); } } + strncpy(serial, (char*) &data[73], (i-73)); + serial[14] = 0; fprintf(MSG_OUT, "\nlibdvdnav: DVD Title (Alternative): "); for(i=89; i < 128; i++ ) { if((data[i] == 0)) break; @@ -352,7 +354,7 @@ int vm_reset(vm_t *vm, const char *dvdro fprintf(MSG_OUT, "libdvdnav: vm: failed to open/read the DVD\n"); return 0; } - dvd_read_name(vm->dvd_name, dvdroot); + dvd_read_name(vm->dvd_name, vm->dvd_serial, dvdroot); vm->map = remap_loadmap(vm->dvd_name); vm->vmgi = ifoOpenVMGI(vm->dvd); if(!vm->vmgi) { Modified: trunk/libdvdnav/src/vm/vm.h ============================================================================== --- trunk/libdvdnav/src/vm/vm.h Mon Jan 12 13:10:32 2009 (r1166) +++ trunk/libdvdnav/src/vm/vm.h Mon Feb 2 23:55:58 2009 (r1167) @@ -82,6 +82,7 @@ typedef struct { dvd_state_t state; int32_t hop_channel; char dvd_name[50]; + char dvd_serial[15]; remap_t *map; int stopped; } vm_t;
participants (1)
-
nicodvb