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.