Mercurial > mplayer.hg
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 |