annotate stream/vcd_read_fbsd.h @ 27894:d06d8e459ae1

Use pthreads for the cache on Cygwin, since _beginthread is not available and the previous CreateThread method would probably leak memory here, too. Also pthreads seems to be the official Cygwin threading API.
author reimar
date Sat, 15 Nov 2008 19:08:50 +0000
parents 7ee4ae1648e6
children b4cbeff5153e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 26012
diff changeset
1 #ifndef MPLAYER_VCD_READ_FBSD_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 26012
diff changeset
2 #define MPLAYER_VCD_READ_FBSD_H
26012
04f59a060070 Add missing multiple inclusion guards.
diego
parents: 25873
diff changeset
3
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
4 #include <sys/types.h>
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
5 #include <inttypes.h>
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
6 #include "libavutil/intreadwrite.h"
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
7 #include <sys/cdio.h>
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
8 #if defined(__NetBSD__) || defined(__OpenBSD__)
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
9 #define VCD_NETBSD 1
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
10 #endif
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
11 #ifdef VCD_NETBSD
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
12 #include <sys/scsiio.h>
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
13 #define TOCADDR(te) ((te).data->addr)
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
14 #define READ_TOC CDIOREADTOCENTRYS
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
15 #else
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
16 #include <sys/cdrio.h>
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
17 #define TOCADDR(te) ((te).entry.addr)
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
18 #define READ_TOC CDIOREADTOCENTRY
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
19 #endif
26184
7ee4ae1648e6 Add missing header #includes to fix 'make checkheaders'.
diego
parents: 26029
diff changeset
20 #include "mp_msg.h"
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
21
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
22 //=================== VideoCD ==========================
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
23 #define CDROM_LEADOUT 0xAA
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
24
1177
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
25 typedef struct {
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
26 uint8_t sync [12];
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
27 uint8_t header [4];
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
28 uint8_t subheader [8];
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
29 uint8_t data [2324];
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
30 uint8_t spare [4];
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
31 } cdsector_t;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
32
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
33 #ifdef VCD_NETBSD
23859
df48923d6325 Fix several 100l
reimar
parents: 23858
diff changeset
34 typedef struct ioc_read_toc_entry vcd_tocentry;
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
35 #else
23859
df48923d6325 Fix several 100l
reimar
parents: 23858
diff changeset
36 typedef struct ioc_read_toc_single_entry vcd_tocentry;
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
37 #endif
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
38
9887
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
39 typedef struct mp_vcd_priv_st {
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
40 int fd;
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
41 vcd_tocentry entry;
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
42 #ifdef VCD_NETBSD
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
43 struct cd_toc_entry entry_data;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
44 #else
9887
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
45 cdsector_t buf;
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
46 #endif
25411
aef6ff061c9a Caching toc header in vcd private structure for later use.
ulion
parents: 23862
diff changeset
47 struct ioc_toc_header tochdr;
9887
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
48 } mp_vcd_priv_t;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
49
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
50 static inline void
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
51 vcd_set_msf(mp_vcd_priv_t* vcd, unsigned int sect)
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
52 {
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
53 #ifdef VCD_NETBSD
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
54 vcd->entry.data = &vcd->entry_data;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
55 #endif
23862
a20ea1dd0812 Fix MSF -> sector conversion being 150 sectors of
reimar
parents: 23861
diff changeset
56 sect += 150;
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
57 TOCADDR(vcd->entry).msf.frame = sect % 75;
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
58 sect = sect / 75;
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
59 TOCADDR(vcd->entry).msf.second = sect % 60;
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
60 sect = sect / 60;
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
61 TOCADDR(vcd->entry).msf.minute = sect;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
62 }
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
63
23852
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
64 static inline void
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
65 vcd_inc_msf(mp_vcd_priv_t* vcd)
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
66 {
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
67 #ifdef VCD_NETBSD
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
68 vcd->entry.data = &vcd->entry_data;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
69 #endif
23852
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
70 TOCADDR(vcd->entry).msf.frame++;
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
71 if (TOCADDR(vcd->entry).msf.frame==75){
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
72 TOCADDR(vcd->entry).msf.frame=0;
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
73 TOCADDR(vcd->entry).msf.second++;
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
74 if (TOCADDR(vcd->entry).msf.second==60){
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
75 TOCADDR(vcd->entry).msf.second=0;
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
76 TOCADDR(vcd->entry).msf.minute++;
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
77 }
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
78 }
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
79 }
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
80
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
81 static inline unsigned int
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
82 vcd_get_msf(mp_vcd_priv_t* vcd)
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
83 {
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
84 #ifdef VCD_NETBSD
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
85 vcd->entry.data = &vcd->entry_data;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
86 #endif
23847
773e6c50d1b8 TOCADDR macro as first step to common *BSD vcd reading code
reimar
parents: 19271
diff changeset
87 return TOCADDR(vcd->entry).msf.frame +
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
88 (TOCADDR(vcd->entry).msf.second +
23862
a20ea1dd0812 Fix MSF -> sector conversion being 150 sectors of
reimar
parents: 23861
diff changeset
89 TOCADDR(vcd->entry).msf.minute * 60) * 75 - 150;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
90 }
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
91
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
92 /**
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
93 * \brief read a TOC entry
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
94 * \param fd device to read from
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
95 * \param dst buffer to read data into
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
96 * \param nr track number to read info for
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
97 * \return 1 on success, 0 on failure
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
98 */
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
99 static int
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
100 read_toc_entry(mp_vcd_priv_t *vcd, int nr)
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
101 {
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
102 vcd->entry.address_format = CD_MSF_FORMAT;
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
103 #ifdef VCD_NETBSD
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
104 vcd->entry.data_len = sizeof(struct cd_toc_entry);
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
105 vcd->entry.data = &vcd->entry_data;
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
106 vcd->entry.starting_track = nr;
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
107 #else
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
108 vcd->entry.track = nr;
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
109 #endif
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
110 if (ioctl(vcd->fd, READ_TOC, &vcd->entry) == -1) {
23858
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
111 mp_msg(MSGT_OPEN,MSGL_ERR,"read CDROM toc entry: %s\n",strerror(errno));
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
112 return 0;
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
113 }
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
114 return 1;
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
115 }
85cb783c723c Factor out some common code
reimar
parents: 23857
diff changeset
116
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
117 int
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
118 vcd_seek_to_track(mp_vcd_priv_t* vcd, int track)
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
119 {
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
120 if (!read_toc_entry(vcd, track))
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
121 return -1;
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
122 return VCD_SECTOR_DATA * vcd_get_msf(vcd);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
123 }
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
124
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
125 int
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
126 vcd_get_track_end(mp_vcd_priv_t* vcd, int track)
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
127 {
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
128 if (!read_toc_entry(vcd,
25411
aef6ff061c9a Caching toc header in vcd private structure for later use.
ulion
parents: 23862
diff changeset
129 track < vcd->tochdr.ending_track ? track + 1 : CDROM_LEADOUT))
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
130 return -1;
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
131 return VCD_SECTOR_DATA * vcd_get_msf(vcd);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
132 }
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
133
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
134 mp_vcd_priv_t*
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
135 vcd_read_toc(int fd)
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
136 {
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
137 struct ioc_toc_header tochdr;
9887
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
138 mp_vcd_priv_t* vcd;
23861
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
139 int i, last_startsect;
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
140 if (ioctl(fd, CDIOREADTOCHEADER, &tochdr) == -1) {
9887
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
141 mp_msg(MSGT_OPEN,MSGL_ERR,"read CDROM toc header: %s\n",strerror(errno));
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
142 return NULL;
d862231858d5 Make the vcd API fully reentrant.
albeu
parents: 7406
diff changeset
143 }
18237
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 16547
diff changeset
144 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VCD_START_TRACK=%d\n", tochdr.starting_track);
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 16547
diff changeset
145 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VCD_END_TRACK=%d\n", tochdr.ending_track);
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
146 vcd = malloc(sizeof(mp_vcd_priv_t));
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
147 vcd->fd = fd;
25411
aef6ff061c9a Caching toc header in vcd private structure for later use.
ulion
parents: 23862
diff changeset
148 vcd->tochdr = tochdr;
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
149 for (i = tochdr.starting_track; i <= tochdr.ending_track + 1; i++) {
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
150 if (!read_toc_entry(vcd,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
151 i <= tochdr.ending_track ? i : CDROM_LEADOUT)) {
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
152 free(vcd);
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
153 return NULL;
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
154 }
23851
6dbeddab0b45 More VCD cosmetics
reimar
parents: 23849
diff changeset
155
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
156 if (i <= tochdr.ending_track)
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
157 mp_msg(MSGT_OPEN,MSGL_INFO,"track %02d: adr=%d ctrl=%d format=%d %02d:%02d:%02d\n",
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
158 #ifdef VCD_NETBSD
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
159 (int)vcd->entry.starting_track,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
160 (int)vcd->entry.data->addr_type,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
161 (int)vcd->entry.data->control,
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
162 #else
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
163 (int)vcd->entry.track,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
164 (int)vcd->entry.entry.addr_type,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
165 (int)vcd->entry.entry.control,
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
166 #endif
23860
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
167 (int)vcd->entry.address_format,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
168 (int)TOCADDR(vcd->entry).msf.minute,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
169 (int)TOCADDR(vcd->entry).msf.second,
866b72d264a8 Some more *BSD vcd_read simplification
reimar
parents: 23859
diff changeset
170 (int)TOCADDR(vcd->entry).msf.frame
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
171 );
16547
aa15d627a00b Prints the numbers of start and end tracks and MSF length for each
gpoirier
parents: 9899
diff changeset
172
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
173 if (mp_msg_test(MSGT_IDENTIFY, MSGL_INFO))
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
174 {
23861
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
175 int startsect = vcd_get_msf(vcd);
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
176 if (i > tochdr.starting_track)
16547
aa15d627a00b Prints the numbers of start and end tracks and MSF length for each
gpoirier
parents: 9899
diff changeset
177 {
23861
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
178 // convert duraion to MSF
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
179 vcd_set_msf(vcd, startsect - last_startsect);
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
180 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
181 "ID_VCD_TRACK_%d_MSF=%02d:%02d:%02d\n",
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
182 i - 1,
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
183 TOCADDR(vcd->entry).msf.minute,
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
184 TOCADDR(vcd->entry).msf.second,
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
185 TOCADDR(vcd->entry).msf.frame);
16547
aa15d627a00b Prints the numbers of start and end tracks and MSF length for each
gpoirier
parents: 9899
diff changeset
186 }
23861
5d8097aa11cc Simplify track length calculation
reimar
parents: 23860
diff changeset
187 last_startsect = startsect;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
188 }
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
189 }
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
190 return vcd;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
191 }
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
192
23849
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
193 static int
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
194 vcd_read(mp_vcd_priv_t* vcd, char *mem)
2911a78219a8 Cosmetics to reduce diff between Free- and netBSD vcd stuff
reimar
parents: 23847
diff changeset
195 {
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
196 #ifdef VCD_NETBSD
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
197 struct scsireq sc;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
198 int lba = vcd_get_msf(vcd);
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
199 int blocks;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
200 int rc;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
201
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
202 blocks = 1;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
203
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
204 memset(&sc, 0, sizeof(sc));
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
205 sc.cmd[0] = 0xBE;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
206 sc.cmd[1] = 5 << 2; // mode2/form2
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
207 AV_WB32(&sc.cmd[2], lba);
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
208 AV_WB24(&sc.cmd[6], blocks);
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
209 sc.cmd[9] = 1 << 4; // user data only
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
210 sc.cmd[10] = 0; // no subchannel
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
211 sc.cmdlen = 12;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
212 sc.databuf = (caddr_t) mem;
25873
cf37007e1817 vcd_read must read exactly VCD_SECTOR_DATA bytes.
reimar
parents: 25411
diff changeset
213 sc.datalen = VCD_SECTOR_DATA;
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
214 sc.senselen = sizeof(sc.sense);
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
215 sc.flags = SCCMD_READ;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
216 sc.timeout = 10000;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
217 rc = ioctl(vcd->fd, SCIOCCOMMAND, &sc);
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
218 if (rc == -1) {
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
219 mp_msg(MSGT_STREAM,MSGL_ERR,"SCIOCCOMMAND: %s\n",strerror(errno));
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
220 return -1;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
221 }
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
222 if (sc.retsts || sc.error) {
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
223 mp_msg(MSGT_STREAM,MSGL_ERR,"scsi command failed: status %d error %d\n",
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
224 sc.retsts,sc.error);
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
225 return -1;
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
226 }
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
227 #else
23851
6dbeddab0b45 More VCD cosmetics
reimar
parents: 23849
diff changeset
228 if (pread(vcd->fd,&vcd->buf,VCD_SECTOR_SIZE,vcd_get_msf(vcd)*VCD_SECTOR_SIZE)
6dbeddab0b45 More VCD cosmetics
reimar
parents: 23849
diff changeset
229 != VCD_SECTOR_SIZE) return 0; // EOF?
1177
f2516027a346 FreeBSD patch by Vladimir Kushnir <vkushnir@Alfacom.net>
arpi_esp
parents: 1038
diff changeset
230
23857
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
231 memcpy(mem,vcd->buf.data,VCD_SECTOR_DATA);
d5223bab4b92 Somewhat unified *BSD vcd reading
reimar
parents: 23856
diff changeset
232 #endif
23852
5982ecb1dcdf vcd_inc_msf function also for freebsd vcd_read
reimar
parents: 23851
diff changeset
233 vcd_inc_msf(vcd);
23851
6dbeddab0b45 More VCD cosmetics
reimar
parents: 23849
diff changeset
234 return VCD_SECTOR_DATA;
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
235 }
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents:
diff changeset
236
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 26012
diff changeset
237 #endif /* MPLAYER_VCD_READ_FBSD_H */