⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dae.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<a class="l" name="77">     77 </a>	}<a class="l" name="78">     78 </a>	<b>if</b> (<a href="/source/s?defs=at">at</a> == <a href="/source/s?defs=AUDIO_TYPE_SUN">AUDIO_TYPE_SUN</a>)<a class="l" name="79">     79 </a>		<b>return</b> (<a href="/source/s?defs=open_au_write_stream">open_au_write_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="hl" name="80">     80 </a>	<b>if</b> (<a href="/source/s?defs=at">at</a> == <a href="/source/s?defs=AUDIO_TYPE_WAV">AUDIO_TYPE_WAV</a>)<a class="l" name="81">     81 </a>		<b>return</b> (<a href="/source/s?defs=open_wav_write_stream">open_wav_write_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="l" name="82">     82 </a>	<b>if</b> (<a href="/source/s?defs=at">at</a> == <a href="/source/s?defs=AUDIO_TYPE_CDA">AUDIO_TYPE_CDA</a>)<a class="l" name="83">     83 </a>		<b>return</b> (<a href="/source/s?defs=open_file_write_stream">open_file_write_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="l" name="84">     84 </a>	<b>if</b> (<a href="/source/s?defs=at">at</a> == <a href="/source/s?defs=AUDIO_TYPE_AUR">AUDIO_TYPE_AUR</a>)<a class="l" name="85">     85 </a>		<b>return</b> (<a href="/source/s?defs=open_aur_write_stream">open_aur_write_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="l" name="86">     86 </a>	<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="87">     87 </a>}<a class="l" name="88">     88 </a><a class="l" name="89">     89 </a><span class="c">/* ARGSUSED */</span><a class="hl" name="90">     90 </a><b>static</b> <b>void</b><a class="l" name="91">     91 </a><a href="/source/s?defs=extract_signal_handler">extract_signal_handler</a>(<b>int</b> <a href="/source/s?defs=sig">sig</a>, <a href="/source/s?defs=siginfo_t">siginfo_t</a> *<a href="/source/s?defs=info">info</a>, <b>void</b> *<a href="/source/s?defs=context">context</a>)<a class="l" name="92">     92 </a>{<a class="l" name="93">     93 </a>	<a href="/source/s?defs=abort_read">abort_read</a> = <span class="n">1</span>;<a class="l" name="94">     94 </a>}<a class="l" name="95">     95 </a><a class="l" name="96">     96 </a><span class="c">/*<a class="l" name="97">     97 </a> * Older drives use different data buffer and m:s:f channels to transmit audio<a class="l" name="98">     98 </a> * information. These channels may not be in sync with each other with the<a class="l" name="99">     99 </a> * maximum disparity being the size of the data buffer. So handling is needed<a class="hl" name="100">    100 </a> * to keep these two channels in sync.<a class="l" name="101">    101 </a> */</span><a class="l" name="102">    102 </a><a class="l" name="103">    103 </a><b>static</b> <b>int</b><a class="l" name="104">    104 </a><a href="/source/s?defs=handle_jitter">handle_jitter</a>(<a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=buf">buf</a>, <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=last_end">last_end</a>)<a class="l" name="105">    105 </a>{<a class="l" name="106">    106 </a>	<b>int</b> i;<a class="l" name="107">    107 </a>	<b>for</b> (i = <a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a>*(<a href="/source/s?defs=READ_OVERLAP">READ_OVERLAP</a> - <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>); i &gt;= <span class="n">0</span>; i -= <span class="n">4</span>) {<a class="l" name="108">    108 </a>		<b>if</b> (<a href="/source/s?defs=memcmp">memcmp</a>(<a href="/source/s?defs=last_end">last_end</a> - <a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>, <a href="/source/s?defs=buf">buf</a> + i,<a class="l" name="109">    109 </a>		    <a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>) == <span class="n">0</span>) {<a class="hl" name="110">    110 </a>			<b>return</b> (i + (<a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>));<a class="l" name="111">    111 </a>		}<a class="l" name="112">    112 </a>	}<a class="l" name="113">    113 </a>	<b>for</b> (i = <a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a>*(<a href="/source/s?defs=READ_OVERLAP">READ_OVERLAP</a> - <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>);<a class="l" name="114">    114 </a>		i &lt; <span class="n">2</span>*<a href="/source/s?defs=READ_OVERLAP">READ_OVERLAP</a>*<a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a>; i += <span class="n">4</span>) {<a class="l" name="115">    115 </a>		<b>if</b> (<a href="/source/s?defs=memcmp">memcmp</a>(<a href="/source/s?defs=last_end">last_end</a> - <a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>, <a href="/source/s?defs=buf">buf</a> + i,<a class="l" name="116">    116 </a>		    <a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>) == <span class="n">0</span>) {<a class="l" name="117">    117 </a>			<b>return</b> (i + (<a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=BLOCKS_COMPARE">BLOCKS_COMPARE</a>));<a class="l" name="118">    118 </a>		}<a class="l" name="119">    119 </a>	}<a class="hl" name="120">    120 </a>	<b>return</b> (-<span class="n">1</span>);<a class="l" name="121">    121 </a>}<a class="l" name="122">    122 </a><a class="l" name="123">    123 </a><b>int</b><a class="l" name="124">    124 </a><a href="/source/s?defs=read_audio_track">read_audio_track</a>(<a href="/source/s?defs=cd_device">cd_device</a> *<a href="/source/s?defs=dev">dev</a>, <b>struct</b> <a href="/source/s?defs=track_info">track_info</a> *<a href="/source/s?defs=ti">ti</a>, <a href="/source/s?defs=bstreamhandle">bstreamhandle</a> h)<a class="l" name="125">    125 </a>{<a class="l" name="126">    126 </a>	<a href="/source/s?defs=uint32_t">uint32_t</a>	<a href="/source/s?defs=blocks_to_write">blocks_to_write</a>, <a href="/source/s?defs=blocks_to_read">blocks_to_read</a>, <a href="/source/s?defs=blks_to_overlap">blks_to_overlap</a>;<a class="l" name="127">    127 </a>	<a href="/source/s?defs=uint32_t">uint32_t</a>	<a href="/source/s?defs=start_blk">start_blk</a>, <a href="/source/s?defs=end_blk">end_blk</a>, <a href="/source/s?defs=c_blk">c_blk</a>;<a class="l" name="128">    128 </a>	<a href="/source/s?defs=uint32_t">uint32_t</a>	<a href="/source/s?defs=read_burst_size">read_burst_size</a>;<a class="l" name="129">    129 </a>	<a href="/source/s?defs=uchar_t">uchar_t</a>		*<a href="/source/s?defs=tmp">tmp</a>, *<a href="/source/s?defs=buf">buf</a>, *<a href="/source/s?defs=prev">prev</a>, *<a href="/source/s?defs=previous_end">previous_end</a>;<a class="hl" name="130">    130 </a>	<b>int</b>		<a href="/source/s?defs=ret">ret</a>, <a href="/source/s?defs=off">off</a>;<a class="l" name="131">    131 </a>	<b>struct</b> <a href="/source/s?defs=sigaction">sigaction</a>	<a href="/source/s?defs=sv">sv</a>;<a class="l" name="132">    132 </a>	<b>struct</b> <a href="/source/s?defs=sigaction">sigaction</a>	<a href="/source/s?defs=oldsv">oldsv</a>;<a class="l" name="133">    133 </a><a class="l" name="134">    134 </a>	<a href="/source/s?defs=ret">ret</a> = <span class="n">0</span>;<a class="l" name="135">    135 </a>	<a href="/source/s?defs=abort_read">abort_read</a> = <span class="n">0</span>;<a class="l" name="136">    136 </a><a class="l" name="137">    137 </a>	<span class="c">/*<a class="l" name="138">    138 </a>	 * It is good to do small sized <a href="/source/s?path=I/">I</a>/<a href="/source/s?path=I/Os">Os</a> as we have seen many devices<a class="l" name="139">    139 </a>	 * choke with large <a href="/source/s?path=I/">I</a>/<a href="/source/s?path=I/Os">Os</a>. But if the device does not support<a class="hl" name="140">    140 </a>	 * reading accurate CDDA then we have to do overlapped <a href="/source/s?path=I/">I</a>/<a href="/source/s?path=I/Os">Os</a><a class="l" name="141">    141 </a>	 * and reducing size might affect performance. So use small<a class="l" name="142">    142 </a>	 * I/O size if device supports accurate CDDA.<a class="l" name="143">    143 </a>	 */</span><a class="l" name="144">    144 </a>	<b>if</b> (<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_cap">d_cap</a> &amp; <a href="/source/s?defs=DEV_CAP_ACCURATE_CDDA">DEV_CAP_ACCURATE_CDDA</a>) {<a class="l" name="145">    145 </a>		<a href="/source/s?defs=read_burst_size">read_burst_size</a> = <a href="/source/s?defs=SMALL_READ_BURST_SIZE">SMALL_READ_BURST_SIZE</a>;<a class="l" name="146">    146 </a>	} <b>else</b> {<a class="l" name="147">    147 </a>		<a href="/source/s?defs=read_burst_size">read_burst_size</a> = <a href="/source/s?defs=READ_BURST_SIZE">READ_BURST_SIZE</a>;<a class="l" name="148">    148 </a>	}<a class="l" name="149">    149 </a>	<a href="/source/s?defs=buf">buf</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=read_burst_size">read_burst_size</a>);<a class="hl" name="150">    150 </a>	<a href="/source/s?defs=prev">prev</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=BLOCK_SIZE">BLOCK_SIZE</a> * <a href="/source/s?defs=read_burst_size">read_burst_size</a>);<a class="l" name="151">    151 </a>	<a href="/source/s?defs=start_blk">start_blk</a> = <a href="/source/s?defs=ti">ti</a>-&gt;<a href="/source/s?defs=ti_start_address">ti_start_address</a>;<a class="l" name="152">    152 </a>	<a href="/source/s?defs=end_blk">end_blk</a> = <a href="/source/s?defs=ti">ti</a>-&gt;<a href="/source/s?defs=ti_start_address">ti_start_address</a> + <a href="/source/s?defs=ti">ti</a>-&gt;<a href="/source/s?defs=ti_track_size">ti_track_size</a> - <span class="n">1</span>;<a class="l" name="153">    153 </a><a class="l" name="154">    154 </a>	<span class="c">/* Even when we need jitter correction, this will be 0 1st time */</span><a class="l" name="155">    155 </a>	<a href="/source/s?defs=blks_to_overlap">blks_to_overlap</a> = <span class="n">0</span>;<a class="l" name="156">    156 </a>	<a href="/source/s?defs=off">off</a> = <span class="n">0</span>;<a class="l" name="157">    157 </a><a class="l" name="158">    158 </a>	<span class="c">/* set up signal handler to write audio TOC if ^C is pressed */</span><a class="l" name="159">    159 </a>	<a href="/source/s?defs=sv">sv</a>.<a href="/source/s?defs=sa_handler">sa_handler</a> = <a href="/source/s?defs=extract_signal_handler">extract_signal_handler</a>;<a class="hl" name="160">    160 </a>	(<b>void</b>) <a href="/source/s?defs=sigemptyset">sigemptyset</a>(&amp;<a href="/source/s?defs=sv">sv</a>.<a href="/source/s?defs=sa_mask">sa_mask</a>);<a class="l" name="161">    161 </a>	<a href="/source/s?defs=sv">sv</a>.<a href="/source/s?defs=sa_flags">sa_flags</a> = <span class="n">0</span>;<a class="l" name="162">    162 </a>	(<b>void</b>) <a href="/source/s?defs=sigaction">sigaction</a>(<a href="/source/s?defs=SIGINT">SIGINT</a>, &amp;<a href="/source/s?defs=sv">sv</a>, &amp;<a href="/source/s?defs=oldsv">oldsv</a>);<a class="l" name="163">    163 </a><a class="l" name="164">    164 </a>	<b>if</b> ((<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_cap">d_cap</a> &amp; <a href="/source/s?defs=DEV_CAP_EXTRACT_CDDA">DEV_CAP_EXTRACT_CDDA</a>) == <span class="n">0</span>) {<a class="l" name="165">    165 </a>		<a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Audio extraction method unknown for %s\n"</span>),<a class="l" name="166">    166 </a>		    <a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_name">d_name</a> ? <a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_name">d_name</a> : <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"CD drive"</span>));<a class="l" name="167">    167 </a>		<a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="168">    168 </a>	}<a class="l" name="169">    169 </a><a class="hl" name="170">    170 </a>	<span class="c">/* if the speed option given, try to change the speed */</span><a class="l" name="171">    171 </a>	<b>if</b> ((<a href="/source/s?defs=requested_speed">requested_speed</a> != <span class="n">0</span>) &amp;&amp; !<a href="/source/s?defs=cflag">cflag</a>) {<a class="l" name="172">    172 </a>		<b>if</b> (<a href="/source/s?defs=verbose">verbose</a>)<a class="l" name="173">    173 </a>			(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Trying to set speed to %dX.\n"</span>),<a class="l" name="174">    174 </a>			    <a href="/source/s?defs=requested_speed">requested_speed</a>);<a class="l" name="175">    175 </a>		<b>if</b> (<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_speed_ctrl">d_speed_ctrl</a>(<a href="/source/s?defs=dev">dev</a>, <a href="/source/s?defs=SET_READ_SPEED">SET_READ_SPEED</a>,<a class="l" name="176">    176 </a>		    <a href="/source/s?defs=requested_speed">requested_speed</a>) == <span class="n">0</span>) {<a class="l" name="177">    177 </a><a class="l" name="178">    178 </a>			<a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Unable to set speed.\n"</span>));<a class="l" name="179">    179 </a>			<a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="hl" name="180">    180 </a>		}<a class="l" name="181">    181 </a>		<b>if</b> (<a href="/source/s?defs=verbose">verbose</a>) {<a class="l" name="182">    182 </a>			<b>int</b> <a href="/source/s?defs=speed">speed</a>;<a class="l" name="183">    183 </a>			<a href="/source/s?defs=speed">speed</a> = <a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_speed_ctrl">d_speed_ctrl</a>(<a href="/source/s?defs=dev">dev</a>, <a href="/source/s?defs=GET_READ_SPEED">GET_READ_SPEED</a>, <span class="n">0</span>);<a class="l" name="184">    184 </a>			<b>if</b> (<a href="/source/s?defs=speed">speed</a> == <a href="/source/s?defs=requested_speed">requested_speed</a>) {<a class="l" name="185">    185 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Speed set to %dX.\n"</span>),<a class="l" name="186">    186 </a>				    <a href="/source/s?defs=speed">speed</a>);<a class="l" name="187">    187 </a>			} <b>else</b> <b>if</b> (<a href="/source/s?defs=speed">speed</a> == <span class="n">0</span>) {<a class="l" name="188">    188 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Could not obtain "</span><a class="l" name="189">    189 </a>				    <span class="s">"current Read Speed.\n"</span>));<a class="hl" name="190">    190 </a>			} <b>else</b> {<a class="l" name="191">    191 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Speed set to "</span><a class="l" name="192">    192 </a>				    <span class="s">"closest approximation of %dX allowed "</span><a class="l" name="193">    193 </a>				    <span class="s">"by device (%dX).\n"</span>),<a class="l" name="194">    194 </a>				    <a href="/source/s?defs=requested_speed">requested_speed</a>, <a href="/source/s?defs=speed">speed</a>);<a class="l" name="195">    195 </a>			}<a class="l" name="196">    196 </a>		}<a class="l" name="197">    197 </a>	}<a class="l" name="198">    198 </a><a class="l" name="199">    199 </a>	<a href="/source/s?defs=print_n_flush">print_n_flush</a>(<a class="hl" name="200">    200 </a>	    <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Extracting audio from track %d..."</span>), <a href="/source/s?defs=ti">ti</a>-&gt;<a href="/source/s?defs=ti_track_no">ti_track_no</a>);<a class="l" name="201">    201 </a>	<a href="/source/s?defs=init_progress">init_progress</a>();<a class="l" name="202">    202 </a><a class="l" name="203">    203 </a>	<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="204">    204 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"\nStarting: %d Ending: %d\n"</span>,<a class="l" name="205">    205 </a>		    <a href="/source/s?defs=start_blk">start_blk</a>, <a href="/source/s?defs=end_blk">end_blk</a>);<a class="l" name="206">    206 </a><a class="l" name="207">    207 </a>	<a href="/source/s?defs=blocks_to_write">blocks_to_write</a> = <span class="n">0</span>;<a class="l" name="208">    208 </a><a class="l" name="209">    209 </a>	<b>for</b> (<a href="/source/s?defs=c_blk">c_blk</a> = <a href="/source/s?defs=start_blk">start_blk</a>; <a href="/source/s?defs=c_blk">c_blk</a> &lt; <a href="/source/s?defs=end_blk">end_blk</a>; <a href="/source/s?defs=c_blk">c_blk</a> += <a href="/source/s?defs=blocks_to_write">blocks_to_write</a>) {<a class="hl" name="210">    210 </a>		<span class="c">/* update progress indicator */</span><a class="l" name="211">    211 </a>		(<b>void</b>) <a href="/source/s?defs=progress">progress</a>((<a href="/source/s?defs=end_blk">end_blk</a> - <a href="/source/s?defs=start_blk">start_blk</a>),<a class="l" name="212">    212 </a>		    (<a href="/source/s?defs=int64_t">int64_t</a>)(<a href="/source/s?defs=c_blk">c_blk</a> - <a href="/source/s?defs=start_blk">start_blk</a>));<a class="l" name="213">    213 </a>		<a href="/source/s?defs=blocks_to_read">blocks_to_read</a> =  <a href="/source/s?defs=end_blk">end_blk</a> - <a href="/source/s?defs=c_blk">c_blk</a> + <a href="/source/s?defs=blks_to_overlap">blks_to_overlap</a>;<a class="l" name="214">    214 </a><a class="l" name="215">    215 </a>		<span class="c">/*<a class="l" name="216">    216 </a>		 * Make sure we don't read more blocks than the maximum<a class="l" name="217">    217 </a>		 * burst size.<a class="l" name="218">    218 </a>		 */</span><a class="l" name="219">    219 </a><a class="hl" name="220">    220 </a>		<b>if</b> (<a href="/source/s?defs=blocks_to_read">blocks_to_read</a> &gt; <a href="/source/s?defs=read_burst_size">read_burst_size</a>)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -