comparison vcd_read_fbsd.h @ 1177:f2516027a346

FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
author arpi_esp
date Thu, 21 Jun 2001 00:06:40 +0000
parents b36fb1ae4b53
children e116beb1ac7b
comparison
equal deleted inserted replaced
1176:229a54d7e338 1177:f2516027a346
2 #include <sys/cdrio.h> 2 #include <sys/cdrio.h>
3 3
4 //=================== VideoCD ========================== 4 //=================== VideoCD ==========================
5 #define CDROM_LEADOUT 0xAA 5 #define CDROM_LEADOUT 0xAA
6 6
7 typedef struct { 7 typedef struct {
8 unsigned char unused; 8 uint8_t sync [12];
9 unsigned char minute; 9 uint8_t header [4];
10 unsigned char second; 10 uint8_t subheader [8];
11 unsigned char frame; 11 uint8_t data [2324];
12 } cdrom_msf; 12 uint8_t spare [4];
13 } cdsector_t;
13 14
14 static struct ioc_read_toc_single_entry vcd_entry; 15 static struct ioc_read_toc_single_entry vcd_entry;
15 16
16 static inline void vcd_set_msf(unsigned int sect){ 17 static inline void vcd_set_msf(unsigned int sect){
17 vcd_entry.entry.addr.msf.frame=sect%75; 18 vcd_entry.entry.addr.msf.frame=sect%75;
74 (int)tocentry.entry.addr.msf.frame 75 (int)tocentry.entry.addr.msf.frame
75 ); 76 );
76 } 77 }
77 } 78 }
78 79
79 static char vcd_buf[VCD_SECTOR_SIZE]; 80 static cdsector_t vcd_buf;
80 81
81 static int vcd_read(int fd,char *mem){ 82 static int vcd_read(int fd,char *mem){
82 memcpy(vcd_buf,&vcd_entry.entry.addr.msf,sizeof(cdrom_msf)); 83 off_t offset = 0;
83 /* if(ioctl(fd,CDROMREADRAW,vcd_buf)==-1) return 0; */ // EOF? 84 if (pread(fd,&vcd_buf,VCD_SECTOR_SIZE,vcd_get_msf()*VCD_SECTOR_SIZE)
84 /* if(ioctl(fd,CDRIOCSETBLOCKSIZE,VCD_SECTOR_SIZE)==-1) return 0; 85 != VCD_SECTOR_SIZE) return 0; // EOF?
85 if (pread(fd,vcd_buf,VCD_SECTOR_SIZE,ntohl(vcd_entry.entry.addr.lba)*VCD_SECTOR_SIZE) != VCD_SECTOR_SIZE) return 0; */ // EOF? 86 offset++;
87
86 vcd_entry.entry.addr.msf.frame++; 88 vcd_entry.entry.addr.msf.frame++;
87 if (vcd_entry.entry.addr.msf.frame==75){ 89 if (vcd_entry.entry.addr.msf.frame==75){
88 vcd_entry.entry.addr.msf.frame=0; 90 vcd_entry.entry.addr.msf.frame=0;
89 vcd_entry.entry.addr.msf.second++; 91 vcd_entry.entry.addr.msf.second++;
90 if (vcd_entry.entry.addr.msf.second==60){ 92 if (vcd_entry.entry.addr.msf.second==60){
91 vcd_entry.entry.addr.msf.second=0; 93 vcd_entry.entry.addr.msf.second=0;
92 vcd_entry.entry.addr.msf.minute++; 94 vcd_entry.entry.addr.msf.minute++;
93 } 95 }
94 } 96 }
95 97 memcpy(mem,vcd_buf.data,VCD_SECTOR_DATA);
96 memcpy(mem,&vcd_buf[VCD_SECTOR_OFFS],VCD_SECTOR_DATA);
97 return VCD_SECTOR_DATA; 98 return VCD_SECTOR_DATA;
98 } 99 }
99 100
100 //================== VCD CACHE ======================= 101 //================== VCD CACHE =======================
101 #ifdef VCD_CACHE 102 #ifdef VCD_CACHE