📄 write_audio.c.htm
字号:
<a class="l" name="52"> 52 </a> }<a class="l" name="53"> 53 </a> <b>if</b> ((<a href="/source/s?defs=ext">ext</a> == <a href="/source/s?defs=NULL">NULL</a>) || ((<a href="/source/s?defs=at">at</a> = <a href="/source/s?defs=get_audio_type">get_audio_type</a>(<a href="/source/s?defs=ext">ext</a>)) == -<span class="n">1</span>)) {<a class="l" name="54"> 54 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="55"> 55 </a> <span class="s">"Cannot understand file extension for %s\n"</span>),<a class="l" name="56"> 56 </a> <a href="/source/s?defs=fname">fname</a>);<a class="l" name="57"> 57 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="58"> 58 </a> }<a class="l" name="59"> 59 </a> } <b>else</b> {<a class="hl" name="60"> 60 </a> <a href="/source/s?defs=at">at</a> = <a href="/source/s?defs=audio_type">audio_type</a>;<a class="l" name="61"> 61 </a> }<a class="l" name="62"> 62 </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="63"> 63 </a> <b>return</b> (<a href="/source/s?defs=open_au_read_stream">open_au_read_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="l" name="64"> 64 </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="65"> 65 </a> <b>return</b> (<a href="/source/s?defs=open_wav_read_stream">open_wav_read_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="l" name="66"> 66 </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="67"> 67 </a> <b>return</b> (<a href="/source/s?defs=open_file_read_stream">open_file_read_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="l" name="68"> 68 </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="69"> 69 </a> <b>return</b> (<a href="/source/s?defs=open_aur_read_stream">open_aur_read_stream</a>(<a href="/source/s?defs=fname">fname</a>));<a class="hl" name="70"> 70 </a> <b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="71"> 71 </a>}<a class="l" name="72"> 72 </a><a class="l" name="73"> 73 </a><b>void</b><a class="l" name="74"> 74 </a><a href="/source/s?defs=write_audio">write_audio</a>(<b>char</b> **<a href="/source/s?defs=argv">argv</a>, <b>int</b> <a href="/source/s?defs=start_argc">start_argc</a>, <b>int</b> <a href="/source/s?defs=argc">argc</a>)<a class="l" name="75"> 75 </a>{<a class="l" name="76"> 76 </a> <a href="/source/s?defs=bstreamhandle">bstreamhandle</a> *<a href="/source/s?defs=h_ptr">h_ptr</a>;<a class="l" name="77"> 77 </a> <b>int</b> i, <a href="/source/s?defs=nfiles">nfiles</a>;<a class="l" name="78"> 78 </a> <b>struct</b> <a href="/source/s?defs=track_info">track_info</a> *<a href="/source/s?defs=ti">ti</a>;<a class="l" name="79"> 79 </a> <a href="/source/s?defs=uint32_t">uint32_t</a> <a href="/source/s?defs=blks_req">blks_req</a>, <a href="/source/s?defs=blks_avail">blks_avail</a>;<a class="hl" name="80"> 80 </a> <a href="/source/s?defs=off_t">off_t</a> <a href="/source/s?defs=fsize">fsize</a>;<a class="l" name="81"> 81 </a><a class="l" name="82"> 82 </a> <span class="c">/* number of tracks to write */</span><a class="l" name="83"> 83 </a> <a href="/source/s?defs=nfiles">nfiles</a> = <a href="/source/s?defs=argc">argc</a> - <a href="/source/s?defs=start_argc">start_argc</a>;<a class="l" name="84"> 84 </a> <a href="/source/s?defs=h_ptr">h_ptr</a> = (<a href="/source/s?defs=bstreamhandle">bstreamhandle</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=nfiles">nfiles</a> * <b>sizeof</b> (<a href="/source/s?defs=bstreamhandle">bstreamhandle</a>));<a class="l" name="85"> 85 </a> <a href="/source/s?defs=blks_req">blks_req</a> = <span class="n">0</span>;<a class="l" name="86"> 86 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=nfiles">nfiles</a>; i++) {<a class="l" name="87"> 87 </a> <a href="/source/s?defs=h_ptr">h_ptr</a>[i] = <a href="/source/s?defs=open_audio">open_audio</a>(<a href="/source/s?defs=argv">argv</a>[<a href="/source/s?defs=start_argc">start_argc</a> + i]);<a class="l" name="88"> 88 </a> <b>if</b> (<a href="/source/s?defs=h_ptr">h_ptr</a>[i] == <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="89"> 89 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Cannot open %s: %s\n"</span>),<a class="hl" name="90"> 90 </a> <a href="/source/s?defs=argv">argv</a>[<a href="/source/s?defs=start_argc">start_argc</a> + i], <a href="/source/s?defs=get_err_str">get_err_str</a>());<a class="l" name="91"> 91 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="92"> 92 </a> }<a class="l" name="93"> 93 </a> (<b>void</b>) (<a href="/source/s?defs=h_ptr">h_ptr</a>[i])-><a href="/source/s?defs=bstr_size">bstr_size</a>(<a href="/source/s?defs=h_ptr">h_ptr</a>[i], &<a href="/source/s?defs=fsize">fsize</a>);<a class="l" name="94"> 94 </a><a class="l" name="95"> 95 </a> <span class="c">/* 2352 bytes per block, 75 blocks per second */</span><a class="l" name="96"> 96 </a> <a href="/source/s?defs=blks_req">blks_req</a> += <span class="n">150</span> + <a href="/source/s?defs=fsize">fsize</a>/<span class="n">2352</span>; <span class="c">/* 2 sec gap per track */</span><a class="l" name="97"> 97 </a> <b>if</b> (<a href="/source/s?defs=fsize">fsize</a> % <span class="n">2352</span>)<a class="l" name="98"> 98 </a> <a href="/source/s?defs=blks_req">blks_req</a>++;<a class="l" name="99"> 99 </a> }<a class="hl" name="100"> 100 </a> (<b>void</b>) <a href="/source/s?defs=check_device">check_device</a>(<a href="/source/s?defs=target">target</a>, <a href="/source/s?defs=CHECK_DEVICE_NOT_READY">CHECK_DEVICE_NOT_READY</a> |<a class="l" name="101"> 101 </a> <a href="/source/s?defs=CHECK_DEVICE_NOT_WRITABLE">CHECK_DEVICE_NOT_WRITABLE</a> | <a href="/source/s?defs=CHECK_MEDIA_IS_NOT_WRITABLE">CHECK_MEDIA_IS_NOT_WRITABLE</a> |<a class="l" name="102"> 102 </a> <a href="/source/s?defs=EXIT_IF_CHECK_FAILED">EXIT_IF_CHECK_FAILED</a>);<a class="l" name="103"> 103 </a><a class="l" name="104"> 104 </a> <span class="c">/* Put the device in track-at-once mode */</span><a class="l" name="105"> 105 </a> <a href="/source/s?defs=write_init">write_init</a>(<a href="/source/s?defs=TRACK_MODE_AUDIO">TRACK_MODE_AUDIO</a>);<a class="l" name="106"> 106 </a> <a href="/source/s?defs=ti">ti</a> = (<b>struct</b> <a href="/source/s?defs=track_info">track_info</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<b>sizeof</b> (*<a href="/source/s?defs=ti">ti</a>));<a class="l" name="107"> 107 </a><a class="l" name="108"> 108 </a> <span class="c">/* Build information for next invisible track, -1 */</span><a class="l" name="109"> 109 </a> <b>if</b> ((<a href="/source/s?defs=build_track_info">build_track_info</a>(<a href="/source/s?defs=target">target</a>, -<span class="n">1</span>, <a href="/source/s?defs=ti">ti</a>) == <span class="n">0</span>) ||<a class="hl" name="110"> 110 </a> ((<a href="/source/s?defs=ti">ti</a>-><a href="/source/s?defs=ti_flags">ti_flags</a> & <a href="/source/s?defs=TI_NWA_VALID">TI_NWA_VALID</a>) == <span class="n">0</span>)) {<a class="l" name="111"> 111 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="112"> 112 </a> <span class="s">"Cannot get writable address for the media.\n"</span>));<a class="l" name="113"> 113 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="114"> 114 </a> }<a class="l" name="115"> 115 </a> <b>if</b> ((<a href="/source/s?defs=blks_avail">blks_avail</a> = <a href="/source/s?defs=get_last_possible_lba">get_last_possible_lba</a>(<a href="/source/s?defs=target">target</a>)) == <span class="n">0</span>) {<a class="l" name="116"> 116 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Unable to determine media capacity. "</span><a class="l" name="117"> 117 </a> <span class="s">"Defaulting to 650 MB (74 minute) disc.\n"</span>));<a class="l" name="118"> 118 </a> <a href="/source/s?defs=blks_avail">blks_avail</a> = <a href="/source/s?defs=MAX_CD_BLKS">MAX_CD_BLKS</a>;<a class="l" name="119"> 119 </a> } <b>else</b> {<a class="hl" name="120"> 120 </a> <span class="c">/* LBA is always one less */</span><a class="l" name="121"> 121 </a> <a href="/source/s?defs=blks_avail">blks_avail</a>++;<a class="l" name="122"> 122 </a> }<a class="l" name="123"> 123 </a> <span class="c">/*<a class="l" name="124"> 124 </a> * Actual number of blocks available based on nwa (next writable<a class="l" name="125"> 125 </a> * address) since there may already be information on the disc.<a class="l" name="126"> 126 </a> */</span><a class="l" name="127"> 127 </a><a class="l" name="128"> 128 </a> <a href="/source/s?defs=blks_avail">blks_avail</a> -= <a href="/source/s?defs=ti">ti</a>-><a href="/source/s?defs=ti_nwa">ti_nwa</a>;<a class="l" name="129"> 129 </a> <b>if</b> (<a href="/source/s?defs=blks_avail">blks_avail</a> < <a href="/source/s?defs=blks_req">blks_req</a>) {<a class="hl" name="130"> 130 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Insufficient space on the media.\n"</span>));<a class="l" name="131"> 131 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="132"> 132 </a> }<a class="l" name="133"> 133 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=nfiles">nfiles</a>; i++) {<a class="l" name="134"> 134 </a> <a href="/source/s?defs=write_next_track">write_next_track</a>(<a href="/source/s?defs=TRACK_MODE_AUDIO">TRACK_MODE_AUDIO</a>, <a href="/source/s?defs=h_ptr">h_ptr</a>[i]);<a class="l" name="135"> 135 </a> <b>if</b> (<a href="/source/s?defs=simulation">simulation</a> && (<a href="/source/s?defs=nfiles">nfiles</a> != <span class="n">1</span>)) {<a class="l" name="136"> 136 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="137"> 137 </a> <span class="s">"Simulation mode : skipping remaining tracks\n"</span>));<a class="l" name="138"> 138 </a> <b>break</b>;<a class="l" name="139"> 139 </a> }<a class="hl" name="140"> 140 </a> }<a class="l" name="141"> 141 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=nfiles">nfiles</a>; i++)<a class="l" name="142"> 142 </a> (<a href="/source/s?defs=h_ptr">h_ptr</a>[i])-><a href="/source/s?defs=bstr_close">bstr_close</a>(<a href="/source/s?defs=h_ptr">h_ptr</a>[i]);<a class="l" name="143"> 143 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=ti">ti</a>);<a class="l" name="144"> 144 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=h_ptr">h_ptr</a>);<a class="l" name="145"> 145 </a><a class="l" name="146"> 146 </a> <a href="/source/s?defs=write_fini">write_fini</a>();<a class="l" name="147"> 147 </a><a class="l" name="148"> 148 </a> <a href="/source/s?defs=fini_device">fini_device</a>(<a href="/source/s?defs=target">target</a>);<a class="l" name="149"> 149 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">0</span>);<a class="hl" name="150"> 150 </a>}<a class="l" name="151"> 151 </a></pre></div><div id="Footer"><p class="Center"><a href="http://www.opensolaris.org/os/project/opengrok/"><img src="/source/default/img/servedby.png" alt="Served by OpenGrok" title="Served by OpenGrok"/></a></p><p class="Center"><a href="http://www.opensolaris.org/os/tou/">Terms of Use</a> |<a href="http://www.sun.com/privacy/">Privacy</a> |<a href="http://www.opensolaris.org/os/trademark/">Trademarks</a> |<a href="http://www.opensolaris.org/os/copyrights/">Copyright Policy</a> |<a href="http://www.opensolaris.org/os/site_guidelines/">Site Guidelines</a> |<a href="http://www.opensolaris.org/os/about/help/">Help</a><br />Your use of this web site or any of its content or software indicates your agreement to be bound by these Terms of Use.<br />Copyright © 1995-2008 Sun Microsystems, Inc.<br /></p><script type="text/javascript" src="http://www.opensolaris.org/js/s_code_remote.js"></script></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -