File: encoding_8c-example.html

package info (click to toggle)
libkate 0.4.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,680 kB
  • sloc: ansic: 11,059; sh: 4,930; yacc: 2,358; python: 767; javascript: 407; lex: 363; makefile: 263
file content (182 lines) | stat: -rw-r--r-- 15,857 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libkate: encoding.c</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">libkate<span id="projectnumber">&#160;0.4.3</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',false,false,'search.php','Search');
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div class="header">
  <div class="headertitle"><div class="title">encoding.c</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/*</span></div>
<div class="line"><span class="comment">  This shows the steps necessary to encode a Kate stream.</span></div>
<div class="line"><span class="comment">  For clarity, error checking is omitted.</span></div>
<div class="line"><span class="comment">  */</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;ogg/ogg.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &quot;common.h&quot;</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">/* All the libkate API is available from the main kate header file: */</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="oggkate_8h.html">kate/oggkate.h</a>&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">/*</span></div>
<div class="line"><span class="comment">  We want to control when Ogg pages are output, as Kate is a discontinuous</span></div>
<div class="line"><span class="comment">  codec, so we don&#39;t know when the next event will happen, hence the need</span></div>
<div class="line"><span class="comment">  to create a page for every event.</span></div>
<div class="line"><span class="comment">  */</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> flush_page(ogg_stream_state *os)</div>
<div class="line">{</div>
<div class="line">  ogg_page og;</div>
<div class="line">  <span class="keywordflow">while</span> (1) {</div>
<div class="line">    <span class="keywordtype">int</span> ret=ogg_stream_flush(os,&amp;og);</div>
<div class="line">    <span class="keywordflow">if</span> (ret==0) <span class="keywordflow">break</span>;</div>
<div class="line">    fwrite(og.header,1,og.header_len,stdout);</div>
<div class="line">    fwrite(og.body,1,og.body_len,stdout);</div>
<div class="line">  }</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main()</div>
<div class="line">{</div>
<div class="line">  <span class="comment">/* We need an Ogg stream to write to */</span></div>
<div class="line"> </div>
<div class="line">  ogg_stream_state os;</div>
<div class="line">  ogg_packet op;</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/*</span></div>
<div class="line"><span class="comment">    First, a kate_info structure needs to be created and setup for the stream to create.</span></div>
<div class="line"><span class="comment">    A kate_comment structure also has to be created.</span></div>
<div class="line"><span class="comment">    Information from both of these will get encoded into the stream headers.</span></div>
<div class="line"><span class="comment">    Last, we also need a kate_state structure, which will be initialized later.</span></div>
<div class="line"><span class="comment">    */</span></div>
<div class="line"> </div>
<div class="line">  <a id="_a0" name="_a0"></a><a class="code hl_struct" href="structkate__info.html">kate_info</a> ki;</div>
<div class="line">  <a id="_a1" name="_a1"></a><a class="code hl_struct" href="structkate__comment.html">kate_comment</a> kc;</div>
<div class="line">  <a id="_a2" name="_a2"></a><a class="code hl_struct" href="structkate__state.html">kate_state</a> k;</div>
<div class="line"> </div>
<div class="line">  <a id="a3" name="a3"></a><a class="code hl_function" href="group__info.html#gab9031b2c167954bc7d754b30774f0241">kate_info_init</a>(&amp;ki);</div>
<div class="line">  <a id="a4" name="a4"></a><a class="code hl_function" href="group__comments.html#ga4f717746ed53e557e57bb1e2b40dbd84">kate_comment_init</a>(&amp;kc);</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/*</span></div>
<div class="line"><span class="comment">    The most important part of the kate_info structure on encoding is the granule</span></div>
<div class="line"><span class="comment">    encoding information, which describes how granules and time are mapped.</span></div>
<div class="line"><span class="comment">    Here, we map one granule to one millisecond.</span></div>
<div class="line"><span class="comment">   */</span></div>
<div class="line"> </div>
<div class="line">  ki.<a id="a5" name="a5"></a><a class="code hl_variable" href="structkate__info.html#a1bf457732577344fa6d0f035d30d1e13">granule_shift</a>=32;</div>
<div class="line">  ki.<a id="a6" name="a6"></a><a class="code hl_variable" href="structkate__info.html#a7eb196702d96e5676b27838cadfd6acf">gps_numerator</a>=1000;</div>
<div class="line">  ki.<a id="a7" name="a7"></a><a class="code hl_variable" href="structkate__info.html#a00c2253966d5a22cc3e56f4f98dd4995">gps_denominator</a>=1;</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/* With that done, we can initialize libkate for encoding, and initialize libogg as well: */</span></div>
<div class="line"> </div>
<div class="line">  <a id="a8" name="a8"></a><a class="code hl_function" href="group__encoding.html#ga0a7588d43b22fd5ef6e0a88ed7245210">kate_encode_init</a>(&amp;k,&amp;ki);</div>
<div class="line">  ogg_stream_init(&amp;os,0x12345678);</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/* for the benefit of windows, which mangles data otherwise */</span></div>
<div class="line">  set_binary_file(stdout);</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/*</span></div>
<div class="line"><span class="comment">    Before you can create events, headers need to be sent. Here, we&#39;ll just send</span></div>
<div class="line"><span class="comment">    the headers directly, but you will usually want to add regions, styles, etc to</span></div>
<div class="line"><span class="comment">    the headers before doing so:</span></div>
<div class="line"><span class="comment">    */</span></div>
<div class="line"> </div>
<div class="line">  <span class="keywordflow">while</span> (<a id="a9" name="a9"></a><a class="code hl_function" href="oggkate_8h.html#ac9f5a00fc71e781a8c18bccb12c3f9f7">kate_ogg_encode_headers</a>(&amp;k,&amp;kc,&amp;op)==0) {</div>
<div class="line">    ogg_stream_packetin(&amp;os,&amp;op);</div>
<div class="line">    ogg_packet_clear(&amp;op);</div>
<div class="line">  }</div>
<div class="line">  flush_page(&amp;os);</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/*</span></div>
<div class="line"><span class="comment">    Events can now be created, and we&#39;ll just create and send a single one here,</span></div>
<div class="line"><span class="comment">    starting at time 10 seconds, and stopping at time 15 seconds.</span></div>
<div class="line"><span class="comment">    */</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#define text &quot;Hello, world!&quot;</span></div>
<div class="line">  <a id="a10" name="a10"></a><a class="code hl_function" href="oggkate_8h.html#aa66db5293b6c4afa2fbbf536d0d1e4dd">kate_ogg_encode_text</a>(&amp;k,10.0,15.0,text,strlen(text)+1,&amp;op);</div>
<div class="line">  ogg_stream_packetin(&amp;os,&amp;op);</div>
<div class="line">  ogg_packet_clear(&amp;op);</div>
<div class="line">  flush_page(&amp;os);</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/*</span></div>
<div class="line"><span class="comment">    When we&#39;re done, we can tell libkate so an &quot;end of stream&quot; packet will be generated,</span></div>
<div class="line"><span class="comment">    and clear the resources we&#39;ve been using:</span></div>
<div class="line"><span class="comment">    */</span></div>
<div class="line"> </div>
<div class="line">  <a id="a11" name="a11"></a><a class="code hl_function" href="oggkate_8h.html#a28a9b117b4051ed02c761f279d5c34ee">kate_ogg_encode_finish</a>(&amp;k,-1,&amp;op);</div>
<div class="line">  ogg_stream_packetin(&amp;os,&amp;op);</div>
<div class="line">  ogg_packet_clear(&amp;op);</div>
<div class="line">  flush_page(&amp;os);</div>
<div class="line">  ogg_stream_clear(&amp;os);</div>
<div class="line">  <a id="a12" name="a12"></a><a class="code hl_function" href="kate_8h.html#a8617b44c49f19262a9e03c0dcb45d971">kate_clear</a>(&amp;k);</div>
<div class="line">  <a id="a13" name="a13"></a><a class="code hl_function" href="group__info.html#gaa8ba295f7925e8926ed46510c28be60d">kate_info_clear</a>(&amp;ki);</div>
<div class="line">  <a id="a14" name="a14"></a><a class="code hl_function" href="group__comments.html#ga92e532be93459a5b1d6835b64c1129da">kate_comment_clear</a>(&amp;kc);</div>
<div class="line"> </div>
<div class="line">  <span class="comment">/*</span></div>
<div class="line"><span class="comment">    That&#39;s it, we now have created a full kate stream. You may now want to decode it,</span></div>
<div class="line"><span class="comment">    or multiplex it with a Theora video, etc.</span></div>
<div class="line"><span class="comment">    */</span></div>
<div class="line"> </div>
<div class="line">  <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="ttc" id="agroup__comments_html_ga4f717746ed53e557e57bb1e2b40dbd84"><div class="ttname"><a href="group__comments.html#ga4f717746ed53e557e57bb1e2b40dbd84">kate_comment_init</a></div><div class="ttdeci">int kate_comment_init(kate_comment *kc)</div><div class="ttdef"><b>Definition:</b> kate_comment.c:29</div></div>
<div class="ttc" id="agroup__comments_html_ga92e532be93459a5b1d6835b64c1129da"><div class="ttname"><a href="group__comments.html#ga92e532be93459a5b1d6835b64c1129da">kate_comment_clear</a></div><div class="ttdeci">int kate_comment_clear(kate_comment *kc)</div><div class="ttdef"><b>Definition:</b> kate_comment.c:48</div></div>
<div class="ttc" id="agroup__encoding_html_ga0a7588d43b22fd5ef6e0a88ed7245210"><div class="ttname"><a href="group__encoding.html#ga0a7588d43b22fd5ef6e0a88ed7245210">kate_encode_init</a></div><div class="ttdeci">int kate_encode_init(kate_state *k, kate_info *ki)</div><div class="ttdef"><b>Definition:</b> kate_encode.c:36</div></div>
<div class="ttc" id="agroup__info_html_gaa8ba295f7925e8926ed46510c28be60d"><div class="ttname"><a href="group__info.html#gaa8ba295f7925e8926ed46510c28be60d">kate_info_clear</a></div><div class="ttdeci">int kate_info_clear(kate_info *ki)</div><div class="ttdef"><b>Definition:</b> kate_info.c:539</div></div>
<div class="ttc" id="agroup__info_html_gab9031b2c167954bc7d754b30774f0241"><div class="ttname"><a href="group__info.html#gab9031b2c167954bc7d754b30774f0241">kate_info_init</a></div><div class="ttdeci">int kate_info_init(kate_info *ki)</div><div class="ttdef"><b>Definition:</b> kate_info.c:29</div></div>
<div class="ttc" id="akate_8h_html_a8617b44c49f19262a9e03c0dcb45d971"><div class="ttname"><a href="kate_8h.html#a8617b44c49f19262a9e03c0dcb45d971">kate_clear</a></div><div class="ttdeci">int kate_clear(kate_state *k)</div><div class="ttdef"><b>Definition:</b> kate.c:74</div></div>
<div class="ttc" id="aoggkate_8h_html"><div class="ttname"><a href="oggkate_8h.html">oggkate.h</a></div></div>
<div class="ttc" id="aoggkate_8h_html_a28a9b117b4051ed02c761f279d5c34ee"><div class="ttname"><a href="oggkate_8h.html#a28a9b117b4051ed02c761f279d5c34ee">kate_ogg_encode_finish</a></div><div class="ttdeci">int kate_ogg_encode_finish(kate_state *k, kate_float t, ogg_packet *op)</div><div class="ttdef"><b>Definition:</b> kate_ogg.c:193</div></div>
<div class="ttc" id="aoggkate_8h_html_aa66db5293b6c4afa2fbbf536d0d1e4dd"><div class="ttname"><a href="oggkate_8h.html#aa66db5293b6c4afa2fbbf536d0d1e4dd">kate_ogg_encode_text</a></div><div class="ttdeci">int kate_ogg_encode_text(kate_state *k, kate_float start_time, kate_float stop_time, const char *text, size_t sz, ogg_packet *op)</div><div class="ttdef"><b>Definition:</b> kate_ogg.c:75</div></div>
<div class="ttc" id="aoggkate_8h_html_ac9f5a00fc71e781a8c18bccb12c3f9f7"><div class="ttname"><a href="oggkate_8h.html#ac9f5a00fc71e781a8c18bccb12c3f9f7">kate_ogg_encode_headers</a></div><div class="ttdeci">int kate_ogg_encode_headers(kate_state *k, kate_comment *kc, ogg_packet *op)</div><div class="ttdef"><b>Definition:</b> kate_ogg.c:54</div></div>
<div class="ttc" id="astructkate__comment_html"><div class="ttname"><a href="structkate__comment.html">kate_comment</a></div><div class="ttdef"><b>Definition:</b> kate.h:347</div></div>
<div class="ttc" id="astructkate__info_html"><div class="ttname"><a href="structkate__info.html">kate_info</a></div><div class="ttdef"><b>Definition:</b> kate.h:274</div></div>
<div class="ttc" id="astructkate__info_html_a00c2253966d5a22cc3e56f4f98dd4995"><div class="ttname"><a href="structkate__info.html#a00c2253966d5a22cc3e56f4f98dd4995">kate_info::gps_denominator</a></div><div class="ttdeci">kate_uint32_t gps_denominator</div><div class="ttdef"><b>Definition:</b> kate.h:287</div></div>
<div class="ttc" id="astructkate__info_html_a1bf457732577344fa6d0f035d30d1e13"><div class="ttname"><a href="structkate__info.html#a1bf457732577344fa6d0f035d30d1e13">kate_info::granule_shift</a></div><div class="ttdeci">unsigned char granule_shift</div><div class="ttdef"><b>Definition:</b> kate.h:283</div></div>
<div class="ttc" id="astructkate__info_html_a7eb196702d96e5676b27838cadfd6acf"><div class="ttname"><a href="structkate__info.html#a7eb196702d96e5676b27838cadfd6acf">kate_info::gps_numerator</a></div><div class="ttdeci">kate_uint32_t gps_numerator</div><div class="ttdef"><b>Definition:</b> kate.h:286</div></div>
<div class="ttc" id="astructkate__state_html"><div class="ttname"><a href="structkate__state.html">kate_state</a></div><div class="ttdef"><b>Definition:</b> kate.h:336</div></div>
</div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>