Mercurial > libdvdnav.hg
comparison vm.c @ 97:c1dff1899bda src
First patch for personalized dvd viewing. I have not tested it yet.
author | jcdutton |
---|---|
date | Tue, 17 Sep 2002 11:00:25 +0000 |
parents | eeabf5a51b2b |
children | f885a4cb7bce |
comparison
equal
deleted
inserted
replaced
96:2fcb4f228308 | 97:c1dff1899bda |
---|---|
31 #include <string.h> | 31 #include <string.h> |
32 #include <stdlib.h> | 32 #include <stdlib.h> |
33 #include <unistd.h> | 33 #include <unistd.h> |
34 #include <inttypes.h> | 34 #include <inttypes.h> |
35 #include <assert.h> | 35 #include <assert.h> |
36 #include <sys/types.h> | |
37 #include <sys/stat.h> | |
38 #include <fcntl.h> | |
36 | 39 |
37 #include <dvdread/ifo_types.h> | 40 #include <dvdread/ifo_types.h> |
38 #include <dvdread/ifo_read.h> | 41 #include <dvdread/ifo_read.h> |
39 | 42 |
40 #include "decoder.h" | 43 #include "decoder.h" |
169 dvd_reader_t *vm_get_dvd_reader(vm_t *vm) { | 172 dvd_reader_t *vm_get_dvd_reader(vm_t *vm) { |
170 if(!vm) | 173 if(!vm) |
171 return NULL; | 174 return NULL; |
172 | 175 |
173 return vm->dvd; | 176 return vm->dvd; |
177 } | |
178 | |
179 void dvd_read_name( vm_t *this, char *devname) { | |
180 int fd, i; | |
181 off64_t off; | |
182 uint8_t data[DVD_VIDEO_LB_LEN]; | |
183 | |
184 /* Read DVD name */ | |
185 fd=open(devname, O_RDONLY); | |
186 if (fd > 0) { | |
187 off = lseek64( fd, 32 * (int64_t) DVD_VIDEO_LB_LEN, SEEK_SET ); | |
188 if( off == ( 32 * (int64_t) DVD_VIDEO_LB_LEN ) ) { | |
189 off = read( fd, data, DVD_VIDEO_LB_LEN ); | |
190 close(fd); | |
191 if (off == ( (int64_t) DVD_VIDEO_LB_LEN )) { | |
192 fprintf( stderr, "VM DVD Title: "); | |
193 for(i=25; i < 73; i++ ) { | |
194 if((data[i] == 0)) break; | |
195 if((data[i] > 32) && (data[i] < 127)) { | |
196 fprintf(stderr, "%c", data[i]); | |
197 } else { | |
198 fprintf(stderr, " "); | |
199 } | |
200 } | |
201 strncpy(&this->dvd_name[0], &data[25], 48); | |
202 /* fprintf(stderr, "TITLE:%s\n",&this->dvd_name[0]); */ | |
203 this->dvd_name[48]=0; | |
204 this->dvd_name_length=strlen(&this->dvd_name[0]); | |
205 fprintf( stderr, "\nVM DVD Serial Number: "); | |
206 for(i=73; i < 89; i++ ) { | |
207 if((data[i] == 0)) break; | |
208 if((data[i] > 32) && (data[i] < 127)) { | |
209 fprintf(stderr, "%c", data[i]); | |
210 } else { | |
211 fprintf(stderr, " "); | |
212 } | |
213 } | |
214 fprintf( stderr, "\nVM DVD Title (Alternative): "); | |
215 for(i=89; i < 128; i++ ) { | |
216 if((data[i] == 0)) break; | |
217 if((data[i] > 32) && (data[i] < 127)) { | |
218 fprintf(stderr, "%c", data[i]); | |
219 } else { | |
220 fprintf(stderr, " "); | |
221 } | |
222 } | |
223 fprintf( stderr, "\n"); | |
224 } else { | |
225 fprintf( stderr, "libdvdread: Can't read name block. Probably not a DVD-ROM device.\n"); | |
226 } | |
227 } else { | |
228 fprintf( stderr, "libdvdread: Can't seek to block %u\n", 32 ); | |
229 } | |
230 close(fd); | |
231 } else { | |
232 fprintf(stderr,"NAME OPEN FAILED\n"); | |
233 } | |
174 } | 234 } |
175 | 235 |
176 int vm_reset(vm_t *vm, char *dvdroot) /* , register_t regs) */ { | 236 int vm_reset(vm_t *vm, char *dvdroot) /* , register_t regs) */ { |
177 /* Setup State */ | 237 /* Setup State */ |
178 memset((vm->state).registers.SPRM, 0, sizeof(uint16_t)*24); | 238 memset((vm->state).registers.SPRM, 0, sizeof(uint16_t)*24); |
220 vm->dvd = DVDOpen(dvdroot); | 280 vm->dvd = DVDOpen(dvdroot); |
221 if(!vm->dvd) { | 281 if(!vm->dvd) { |
222 fprintf(MSG_OUT, "libdvdnav: vm: faild to open/read the DVD\n"); | 282 fprintf(MSG_OUT, "libdvdnav: vm: faild to open/read the DVD\n"); |
223 return -1; | 283 return -1; |
224 } | 284 } |
285 dvd_read_name(vm, dvdroot); | |
286 vm->map = remap_loadmap( vm->dvd_name); | |
225 | 287 |
226 vm->vmgi = ifoOpenVMGI(vm->dvd); | 288 vm->vmgi = ifoOpenVMGI(vm->dvd); |
227 if(!vm->vmgi) { | 289 if(!vm->vmgi) { |
228 fprintf(MSG_OUT, "libdvdnav: vm: faild to read VIDEO_TS.IFO\n"); | 290 fprintf(MSG_OUT, "libdvdnav: vm: faild to read VIDEO_TS.IFO\n"); |
229 return -1; | 291 return -1; |
1924 return pgcit; | 1986 return pgcit; |
1925 } | 1987 } |
1926 | 1988 |
1927 /* | 1989 /* |
1928 * $Log$ | 1990 * $Log$ |
1991 * Revision 1.35 2002/09/17 11:00:22 jcdutton | |
1992 * First patch for personalized dvd viewing. I have not tested it yet. | |
1993 * | |
1929 * Revision 1.34 2002/09/03 07:50:45 jcdutton | 1994 * Revision 1.34 2002/09/03 07:50:45 jcdutton |
1930 * Improve chapter selection functions. | 1995 * Improve chapter selection functions. |
1931 * | 1996 * |
1932 * Revision 1.33 2002/09/02 03:20:01 jcdutton | 1997 * Revision 1.33 2002/09/02 03:20:01 jcdutton |
1933 * Implement proper prev/next chapter/part. | 1998 * Implement proper prev/next chapter/part. |