Merge commit 'upstream/0.0.24' into debian
Sjoerd Simons
13 years ago
0 | commit 7fca1a7b94c572fe7430937270cfbeadde80f587 | |
1 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
2 | Date: Thu Feb 10 20:24:58 2011 +0000 | |
3 | ||
4 | Version 0.0.24 | |
5 | ||
6 | commit 4e38065f498be2f780afa34cce58ca6319832485 | |
7 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
8 | Date: Thu Feb 10 20:16:30 2011 +0000 | |
9 | ||
10 | tests: Rtcp test doesn't make sense in raw | |
11 | ||
12 | commit 0933f2a4c79f1c632f1239dc75b6ba2aef9361dc | |
13 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
14 | Date: Thu Feb 10 20:08:26 2011 +0000 | |
15 | ||
16 | rtp: add default prefs to EXTRA_DIST | |
17 | ||
18 | commit b208a2b2e305ffa042b038fe2b769e2291d3bcf0 | |
19 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
20 | Date: Thu Feb 10 20:01:49 2011 +0000 | |
21 | ||
22 | tests: Fix another race in tests | |
23 | ||
24 | commit 3bbcc8456ef905e20d043b35487015a88f262b38 | |
25 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
26 | Date: Thu Feb 10 19:58:38 2011 +0000 | |
27 | ||
28 | nicestream: Skip Nice errors if the component has never been ready | |
29 | ||
30 | commit afc31f00f87a35c83b1ba6623bb49e35225beca3 | |
31 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
32 | Date: Thu Feb 10 19:52:12 2011 +0000 | |
33 | ||
34 | nicestream: Fix small leak | |
35 | ||
36 | commit 21f5f608c3ab6d6a15de3d584dd11731b7cef108 | |
37 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
38 | Date: Thu Feb 10 19:47:27 2011 +0000 | |
39 | ||
40 | nicestream: Sort ipv4 addresses first | |
41 | ||
42 | commit bc1fe3674aba764d9c8ac58f5d7d0aa4f57a772b | |
43 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
44 | Date: Thu Feb 10 17:26:12 2011 +0000 | |
45 | ||
46 | utils: Fix doc string | |
47 | ||
48 | commit 4bef5ac11bcc9b29838e395e20b4e97e21deb83c | |
49 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
50 | Date: Tue Jan 25 16:02:52 2011 -0500 | |
51 | ||
52 | utils: the keyfile stuff already checks the user dirs | |
53 | ||
54 | commit 7091068c01ae9667cd3df048a9b2221e1d819617 | |
55 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
56 | Date: Tue Jan 25 14:56:20 2011 -0500 | |
57 | ||
58 | utils: Pass the element directly instead of its factory name | |
59 | ||
60 | commit 0601247f77918d5164d9437b39958488d0c8137e | |
61 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
62 | Date: Tue Jan 25 14:51:35 2011 -0500 | |
63 | ||
64 | utils: Check default properties/codecs in user data dir too | |
65 | ||
66 | commit 9fbf87263e6987f1cb3815c1f3f59d0bc81d5e18 | |
67 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
68 | Date: Mon Jan 3 21:29:52 2011 -0500 | |
69 | ||
70 | rtp: Add default-element-properties | |
71 | ||
72 | commit 6fd2080695ff480afff472bc702736f701a32926 | |
73 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
74 | Date: Mon Jan 3 21:25:12 2011 -0500 | |
75 | ||
76 | utils: Add function to get default element properties | |
77 | ||
78 | commit 937a7024d94cd49c7f0f4b7e67f93a077c04b0eb | |
79 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
80 | Date: Mon Jan 3 21:12:47 2011 -0500 | |
81 | ||
82 | rtp: Add default codec preferences | |
83 | ||
84 | commit 995bc91e11e0cdc387c382fb40ee0342d460b165 | |
85 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
86 | Date: Mon Jan 3 21:06:58 2011 -0500 | |
87 | ||
88 | utils: Add function to get default codec preferences | |
89 | ||
90 | commit a6b21cf32800ac89328ed7d2dafc5cb5921db042 | |
91 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
92 | Date: Wed Feb 9 14:32:40 2011 +0000 | |
93 | ||
94 | raw: Don't delete non-generated files | |
95 | ||
96 | commit 12f411d74cd6806e822b26595ca3c994664c1419 | |
97 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
98 | Date: Thu Feb 3 16:08:01 2011 +0000 | |
99 | ||
100 | Remove the temporary socket directory after usage | |
101 | ||
102 | commit f7eaafac336e7a0d4bd3095ed23cfc46104adb9c | |
103 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
104 | Date: Wed Feb 2 18:54:06 2011 +0000 | |
105 | ||
106 | nicetransmitter: Place the local socket in the tmp dir | |
107 | ||
108 | Don't hardcode /tmp, instead use g_get_tmp_dir to potentialy get it from | |
109 | the environment, but falling back to /tmp | |
110 | ||
111 | commit bcf2e5601e8a6fc5952546f0645314c22c157c8f | |
112 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
113 | Date: Wed Feb 2 18:50:25 2011 +0000 | |
114 | ||
115 | nicetransmitter: Add documentation for create-local-candidates | |
116 | ||
117 | commit f31e4f1f81fdbe4e92e3a46aab871496d9cba448 | |
118 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
119 | Date: Wed Feb 2 18:34:29 2011 +0000 | |
120 | ||
121 | nicetransmitter: Add an option for the transmitter to pick the local side | |
122 | ||
123 | commit 735a9afb2ff464f63e7cc09123b1e48b3019dc5b | |
124 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
125 | Date: Sun Jan 30 19:09:13 2011 -0600 | |
126 | ||
127 | rawconference: This is really meant to be called on the stream. | |
128 | ||
129 | commit 9dcf389fe180d043dd5c0a3f01a00712a16ff82d | |
130 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
131 | Date: Mon Jan 31 18:55:35 2011 +0000 | |
132 | ||
133 | nicetrans: Only emit local-candidate after gathering | |
134 | ||
135 | Unfortunately libnice doesn't currently support doing connectivity | |
136 | checks untill it has finished gathering. If we send a remote peer our | |
137 | candidates before finishing gathering they can start sending us | |
138 | connectivity checks before we're ready for them... | |
139 | ||
140 | So instead sends the local candidates in one batch when gathering is | |
141 | finished, so we'll be ready for the connectivity checks. | |
142 | ||
143 | commit 4de2ee6cf7c7a921fe586bac2ddcd96762bf1cde | |
144 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
145 | Date: Fri Jan 28 18:18:01 2011 -0500 | |
146 | ||
147 | rawconf: Put the whole caps into the encoding_name in codecs | |
148 | ||
149 | commit 71241041866f1f88f9332c6d4e523c78fadf63cb | |
150 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
151 | Date: Fri Jan 28 16:22:21 2011 -0600 | |
152 | ||
153 | rawconference: Make FsRawStream codec doc visible. | |
154 | ||
155 | commit 05469ae14cbb244bb5fab0423e0f2974d643cbba | |
156 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
157 | Date: Thu Jan 27 22:25:23 2011 -0500 | |
158 | ||
159 | docs: Improve the title | |
160 | ||
161 | commit 1c7e76e591a2428fac220de7782ebcdc5a6a4660 | |
162 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
163 | Date: Thu Jan 27 22:22:08 2011 -0500 | |
164 | ||
165 | docs: Add docs for the raw plugin | |
166 | ||
167 | commit 8c7bce8df1812735a70a4d1fa070b539ee4fed8a | |
168 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
169 | Date: Thu Jan 27 22:00:00 2011 -0500 | |
170 | ||
171 | raw: Remove trailing whitespace | |
172 | ||
173 | commit 3af48c2c25b23e635d3e5058dfca24028d393d33 | |
174 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
175 | Date: Thu Jan 27 21:57:52 2011 -0500 | |
176 | ||
177 | raw: Simplify session notification of new stream codecs | |
178 | ||
179 | commit 5a0d0be465413d30b6ddcb18ff56279550d56560 | |
180 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
181 | Date: Thu Jan 27 21:52:46 2011 -0500 | |
182 | ||
183 | rawstream: Simplify set_remote_codecs | |
184 | ||
185 | commit 1640a0df00f2065b3317c365cda7f407f9d3d317 | |
186 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
187 | Date: Thu Jan 27 21:50:44 2011 -0500 | |
188 | ||
189 | cuseless | |
190 | ||
191 | commit 16917a0ce3cbf129c5da55453ee93ffe26638d5c | |
192 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
193 | Date: Thu Jan 27 21:38:25 2011 -0500 | |
194 | ||
195 | rawsession: Codec has already been validated | |
196 | ||
197 | commit 22fae947afa44962f80815bf218bd7eeaec34f7b | |
198 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
199 | Date: Thu Jan 27 21:33:22 2011 -0500 | |
200 | ||
201 | raw: Don't check for stuff in the codecs that is meaningless for raw | |
202 | ||
203 | commit 93157d2029372249c157b70b52eaf44ef089b0dd | |
204 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
205 | Date: Wed Jan 26 01:50:23 2011 -0600 | |
206 | ||
207 | rawconference: Add a test with the shm transmitter. | |
208 | ||
209 | commit 249546141263e6d5cb0b6c271fe75de3d5ac6697 | |
210 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
211 | Date: Thu Jan 20 22:54:58 2011 -0600 | |
212 | ||
213 | rawconference: Remove stream from session in stream's dispose. | |
214 | ||
215 | There's a chance that removing the stream when the session has it | |
216 | weak-reffed can be called from a streaming thread. This can cause | |
217 | it to crash and/or deadlock. This patch changes the stream to | |
218 | call the remove_stream function in the session in its dispose | |
219 | function. The stream already protects itself from being disposed | |
220 | in a streaming thread and therefore prevents the crash/deadlock. | |
221 | ||
222 | commit a71ce2e1e578838576956436fbd5696c44c446b3 | |
223 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
224 | Date: Wed Jan 19 22:25:30 2011 -0600 | |
225 | ||
226 | rawconference: Use local conference variable. | |
227 | ||
228 | commit 1182d5e54502576080bbb71aaaba1720a93de237 | |
229 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
230 | Date: Mon Jan 17 21:51:04 2011 -0500 | |
231 | ||
232 | tests: Split the rtpconf extra init into separate callbacks for stream and conf | |
233 | ||
234 | commit 88b8af0b7022f0414f2039a34779545535eda0d8 | |
235 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
236 | Date: Mon Jan 17 21:36:37 2011 -0500 | |
237 | ||
238 | tests: Split the rawconf extra init into separate callbacks for stream and conf | |
239 | ||
240 | commit 299f9bca316e5dc0edbc124783e2d2cbdfc684cd | |
241 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
242 | Date: Mon Jan 17 21:04:59 2011 -0600 | |
243 | ||
244 | rawconference: Remove weak_ref when done. | |
245 | ||
246 | commit 0d995759f2cbe8e4d807609da5925c4475eff190 | |
247 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
248 | Date: Thu Jan 13 23:28:50 2011 -0600 | |
249 | ||
250 | rawconference: Dispose FsRawStream in a separate thread if needed. | |
251 | ||
252 | commit ddebdd5331edc9bfb9bc7a6fc31cc52c0207fe28 | |
253 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
254 | Date: Thu Jan 13 23:22:27 2011 -0600 | |
255 | ||
256 | rawconference: Add fs_raw_conference_is_internal_thread. | |
257 | ||
258 | commit 5aeb5bb3b477a7c55e99cb112d1bcd0c752d4982 | |
259 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
260 | Date: Thu Jan 13 23:07:50 2011 -0600 | |
261 | ||
262 | rawconference: Fix trailing whitespace. | |
263 | ||
264 | commit 3fc1903dd11d04a432c97a388b96e50e6c02c262 | |
265 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
266 | Date: Thu Jan 6 18:37:07 2011 -0600 | |
267 | ||
268 | rawconference: Correct an error message. | |
269 | ||
270 | commit 1dc1ec9b5dcc3b93bb63807f20cce07ee57628d3 | |
271 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
272 | Date: Thu Jan 6 16:03:07 2011 -0600 | |
273 | ||
274 | rawconference: Wait to add the transmitter's gst-sink until sending. | |
275 | ||
276 | commit 01be250a04dc4e46a5c76ca7d995e602b0c3410e | |
277 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
278 | Date: Wed Dec 22 20:03:45 2010 -0600 | |
279 | ||
280 | rawconference: Dispose of objects in a single place in new_stream. | |
281 | ||
282 | commit c02711cccf1c468dae4c88b0523ad8d711ce0ef5 | |
283 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
284 | Date: Wed Dec 22 19:06:57 2010 -0600 | |
285 | ||
286 | rawconference: blocking_id will always be 0 here. | |
287 | ||
288 | commit cdb408a99c72ccaabbfaeb850fcfe13ff34ee911 | |
289 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
290 | Date: Wed Dec 22 19:03:01 2010 -0600 | |
291 | ||
292 | rawconference: Remove transmitter-pad from the public API. | |
293 | ||
294 | commit ede1c36fc2ca0657e23575f68a0a32fd2a0baf38 | |
295 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
296 | Date: Wed Dec 22 16:33:13 2010 -0600 | |
297 | ||
298 | rawconference: Correctly use g_value_set_boxed instead of _take_boxed. | |
299 | ||
300 | commit 89aaa3f9c93a5c83f0418e49641c44f8c3a95498 | |
301 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
302 | Date: Wed Dec 22 16:12:42 2010 -0600 | |
303 | ||
304 | rawconference: Use macro instead of g_mutex_lock directly. | |
305 | ||
306 | This patch creates and uses FS_RAW_SESSION_LOCK and _UNLOCK and | |
307 | FS_RAW_STREAM_LOCK and _UNLOCK to improve the ability to debug | |
308 | mutexes. | |
309 | ||
310 | commit 92b2c0152b6654dce6ecd26e9dce2638703b1185 | |
311 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
312 | Date: Wed Dec 22 15:45:03 2010 -0600 | |
313 | ||
314 | rawconference: Add @author to the files I made. | |
315 | ||
316 | commit d40a53ff1fd9fe42ed58e407501400f91d8b75ed | |
317 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
318 | Date: Thu Jan 6 18:38:39 2011 -0600 | |
319 | ||
320 | rawconference: Misc style and error checking fixes to Sjoerd's commits. | |
321 | ||
322 | commit 252365baec664f29c8683f3db9de4e9c39eb40ab | |
323 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
324 | Date: Tue Dec 21 19:15:52 2010 +0000 | |
325 | ||
326 | When adding streams, sync the element states with the parent element | |
327 | ||
328 | commit 400e1e243ea53f3fb8948a251ec5884655f46603 | |
329 | Author: Sjoerd Simons <sjoerd.simons@collabora.co.uk> | |
330 | Date: Tue Dec 21 19:15:31 2010 +0000 | |
331 | ||
332 | When removing a stream, make the valve drop packets again | |
333 | ||
334 | commit ac7b28bc5b7e2d23d21ff63c93bc114a33d6359c | |
335 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
336 | Date: Fri Dec 10 16:17:11 2010 -0600 | |
337 | ||
338 | rawconference: Change signature of function to avoid collision. | |
339 | ||
340 | This patch changes the signature of fs_codec_to_gst_caps to | |
341 | fs_raw_codec_to_gst_caps to avoid colliding with a function of | |
342 | the same name in the FsRtpConference plugin. | |
343 | ||
344 | commit 81786172cafa99550ba56c327bf46afdba0a8401 | |
345 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
346 | Date: Thu Dec 9 23:16:23 2010 -0600 | |
347 | ||
348 | rawconference: Keep reference to GstObjects in FsRawStream. | |
349 | ||
350 | commit 3884313398786472d0dbb76f81d1551efbaed31b | |
351 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
352 | Date: Thu Dec 9 23:15:16 2010 -0600 | |
353 | ||
354 | rawconference: Actually store the src_pad in FsRawStream. | |
355 | ||
356 | commit adfaa7d3c677e0dc39f309b8d204c66376664a88 | |
357 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
358 | Date: Thu Dec 9 23:00:02 2010 -0600 | |
359 | ||
360 | rawconference: Remove unused member from FsRawStream private struct. | |
361 | ||
362 | commit 403faf6cb341fb3c39ff4445c4b84924b1d003c4 | |
363 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
364 | Date: Thu Dec 9 22:47:12 2010 -0600 | |
365 | ||
366 | rawconference: Improve locking in FsRawStream. | |
367 | ||
368 | commit d4483ffff8ec363fb7ad4c0cda5e2e7540496559 | |
369 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
370 | Date: Thu Dec 9 22:25:52 2010 -0600 | |
371 | ||
372 | rawconference: Simplify FsRawSession dispose a little. | |
373 | ||
374 | commit b0a31fffcd29b3bf10ebc5094edeaef58bd18a62 | |
375 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
376 | Date: Thu Dec 9 22:17:44 2010 -0600 | |
377 | ||
378 | rawconference: Hold references to GstObjects in FsRawSession. | |
379 | ||
380 | commit c5b911455c60d7dadaeae571d7cb840daae0d7c5 | |
381 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
382 | Date: Thu Dec 9 21:49:22 2010 -0600 | |
383 | ||
384 | rawconference: Improve FsRawSession's locking. | |
385 | ||
386 | commit b8b318ec394c534c1d01b9a2a3d12c08130f3aa1 | |
387 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
388 | Date: Thu Dec 9 21:06:35 2010 -0600 | |
389 | ||
390 | rawconference: Remove elements from bin if sync_state_with_parent fails. | |
391 | ||
392 | commit 2343da21a899c50e21582eea83fab87250f4b906 | |
393 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
394 | Date: Thu Dec 9 20:18:36 2010 -0600 | |
395 | ||
396 | rawconference: Simplify a little of removing streams. | |
397 | ||
398 | commit af89d1294910c65ee52399e9d4959bbe70d9fe22 | |
399 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
400 | Date: Thu Dec 9 19:59:45 2010 -0600 | |
401 | ||
402 | rawconference: Simplify FsRawSession's dispose function. | |
403 | ||
404 | commit 731a7f97898ee904079922b13504b6b9fd188062 | |
405 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
406 | Date: Thu Dec 9 19:52:32 2010 -0600 | |
407 | ||
408 | rawconference: Remove redundant gst_element_sync_with_parent call. | |
409 | ||
410 | commit dca8eee64d96bd3fcfeca63441a9f574f09a1852 | |
411 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
412 | Date: Thu Dec 9 18:59:17 2010 -0600 | |
413 | ||
414 | rawconference: Fix implemention of FsRawSession's current-send-codec. | |
415 | ||
416 | commit 3764477bb2e3442d8296c2dc2b51c7151b924807 | |
417 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
418 | Date: Thu Dec 9 17:35:45 2010 -0600 | |
419 | ||
420 | rawconference: Store FsRawSession codecs and notify on change. | |
421 | ||
422 | commit 7d49655cf293b40249533cb67842ae7cb7dfe024 | |
423 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
424 | Date: Wed Dec 8 21:10:39 2010 -0600 | |
425 | ||
426 | rawconference: Fix potential double-free. | |
427 | ||
428 | commit 79305183c8cd77634b524cae0f43bacd107e01cb | |
429 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
430 | Date: Wed Dec 8 20:41:47 2010 -0600 | |
431 | ||
432 | rawconference: Deactivate pad after removing from bin. | |
433 | ||
434 | commit 497995e1f217ad7a4d1e78aab6eb73dbf3d51ec1 | |
435 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
436 | Date: Wed Dec 8 20:32:44 2010 -0600 | |
437 | ||
438 | rawconference: Remove unneeded variable and just return value. | |
439 | ||
440 | commit ac35328ca4c2c6d8f6bda415a8ca2d37f4c1dcf1 | |
441 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
442 | Date: Tue Dec 7 22:52:03 2010 -0600 | |
443 | ||
444 | rawconference: Fix copy/paste errors. | |
445 | ||
446 | commit 946d4d96a472805a267b7c43cadbb742e7911622 | |
447 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
448 | Date: Tue Dec 7 22:45:20 2010 -0600 | |
449 | ||
450 | rawconference: Use correct pad template. | |
451 | ||
452 | commit 0b5a485f339760a64739042e1d5217af85f19622 | |
453 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
454 | Date: Tue Dec 7 16:32:08 2010 -0600 | |
455 | ||
456 | rawconference: Fix disposed testcase. | |
457 | ||
458 | commit 4cb2235dfeb99e3e9712b08927ff6d188523e9db | |
459 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
460 | Date: Tue Dec 7 16:27:53 2010 -0600 | |
461 | ||
462 | rawconference: Free transmitter src and sink when removing streams. | |
463 | ||
464 | commit 793adf54314b05d610ea8e7a893d44c83b6b3994 | |
465 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
466 | Date: Tue Dec 7 16:26:04 2010 -0600 | |
467 | ||
468 | rawconference: Set the correct error in fs_raw_session_new_stream. | |
469 | ||
470 | commit 4d33116c5be131431bc41b24f3ac70cdab55d557 | |
471 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
472 | Date: Mon Dec 6 19:36:56 2010 -0600 | |
473 | ||
474 | rawconference: Fix base test. FsRawConference doesn't generate codecs. | |
475 | ||
476 | commit 19bcab0f5eac23018ef8b9a1519d406e641ed4f7 | |
477 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
478 | Date: Fri Dec 3 19:53:58 2010 -0600 | |
479 | ||
480 | rawconference: Use optional_parameters for codec properties. | |
481 | ||
482 | commit 976455ddaa78bbfa1bce2bee6e9b6819ec852a95 | |
483 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
484 | Date: Thu Dec 2 15:29:14 2010 -0600 | |
485 | ||
486 | rawconference: Abstract converting FsCodec to GstCaps. | |
487 | ||
488 | commit aa0f00a35e9f62570c5448fc0a21ac1f2dc655c3 | |
489 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
490 | Date: Thu Dec 2 12:15:22 2010 -0600 | |
491 | ||
492 | rawconference: Add tests for FsRawConference plugin. | |
493 | ||
494 | This patch adds tests for the FsRawConference plugin. Virtually | |
495 | all of the code is from the FsRtpConference plugin testsuite. | |
496 | ||
497 | commit fbc01a45ad847a3f4564ba5453e135ac238b6e64 | |
498 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
499 | Date: Thu Dec 2 11:08:22 2010 -0600 | |
500 | ||
501 | rawconference: Add data probe and src_pad_added emission. | |
502 | ||
503 | commit 06c964515fd8811451be5c81732cf7b6196164ac | |
504 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
505 | Date: Thu Dec 2 11:01:19 2010 -0600 | |
506 | ||
507 | rawconference: Set capsfilter caps when set_remote_codecs is called. | |
508 | ||
509 | commit dbdca89b1e97cf97aadee885d10e1d9c79b871ff | |
510 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
511 | Date: Thu Dec 2 10:59:39 2010 -0600 | |
512 | ||
513 | rawconference: Plug memory leak. | |
514 | ||
515 | commit 7529cdce2d5a32c5d53b9e6d4cdd5c757e77c940 | |
516 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
517 | Date: Thu Dec 2 10:58:19 2010 -0600 | |
518 | ||
519 | rawconference: Set initial valve drop settings after creation. | |
520 | ||
521 | commit 34a2b8146decafb206ca616081e2d76616d85485 | |
522 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
523 | Date: Thu Dec 2 10:56:06 2010 -0600 | |
524 | ||
525 | rawconference: Set ST's "sending" property when setting "direction". | |
526 | ||
527 | commit 8589287d2125f772ff4371c113ae629cb7ad1e4a | |
528 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
529 | Date: Thu Dec 2 10:48:35 2010 -0600 | |
530 | ||
531 | rawconference: Set booleans instead of bitmasked integers. | |
532 | ||
533 | commit ae0e46b054f3ae6c660e6c2a7acae780a79039ae | |
534 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
535 | Date: Thu Dec 2 09:59:07 2010 -0600 | |
536 | ||
537 | rawconference: Fix some GstElement refcount issues. | |
538 | ||
539 | commit 8c9aee835102cc55450cdbe8e7786f203b2615fe | |
540 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
541 | Date: Thu Dec 2 09:47:39 2010 -0600 | |
542 | ||
543 | rawconference: Implement FsRawSession's remote codec handler. | |
544 | ||
545 | commit 6a28aca56d1d7ef5849888b69085797546e06d59 | |
546 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
547 | Date: Thu Dec 2 09:46:06 2010 -0600 | |
548 | ||
549 | rawconference: Implement FsRawSession's codecs properties. | |
550 | ||
551 | Implement the FsRawSession's "codecs" and "codecs-without-config" | |
552 | properties. | |
553 | ||
554 | commit bd9b9c1a7dfcc298324fe9e4cd08b26d20ac8b18 | |
555 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
556 | Date: Thu Dec 2 09:44:08 2010 -0600 | |
557 | ||
558 | rawconference: Link the FsRawSession's capsfilter and transmitter_sink. | |
559 | ||
560 | commit 652fd46887658b751b8f10f2a0db72f2dfbb1d55 | |
561 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
562 | Date: Thu Dec 2 09:16:48 2010 -0600 | |
563 | ||
564 | rawconference: Free the FsRawSession's FsTransmitter. | |
565 | ||
566 | commit 7a69ac1b61e25eeec54b224e20ac2baa24d3bbea | |
567 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
568 | Date: Wed Nov 24 02:02:01 2010 -0600 | |
569 | ||
570 | rawconference: Add to FsConference and partially link transmitter. | |
571 | ||
572 | commit e225019df1fd66150e0ea56479ee845989f6aa1a | |
573 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
574 | Date: Tue Nov 23 23:18:26 2010 -0600 | |
575 | ||
576 | rawconference: Fix getting an out of range warning on a gboolean value. | |
577 | ||
578 | commit 8701fe7fa56f9b3d67c78e748b1f1f85476c382b | |
579 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
580 | Date: Tue Nov 23 01:31:19 2010 -0600 | |
581 | ||
582 | rawconference: Fix some type issues in fs_raw_session_new_stream. | |
583 | ||
584 | commit 4e029fecdc46be0557f7d42964f180dbb7117552 | |
585 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
586 | Date: Thu Nov 18 23:10:33 2010 -0600 | |
587 | ||
588 | rawconference: Improve setting the direction. | |
589 | ||
590 | commit 4f0087e0c99238c0119768b18b4561d80b872296 | |
591 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
592 | Date: Wed Nov 17 21:57:42 2010 -0600 | |
593 | ||
594 | rawconference: Implement the remote-codecs FsRawStream property. | |
595 | ||
596 | commit b70363090e2bebf8ac74bce981df8427af3fca36 | |
597 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
598 | Date: Mon Nov 15 23:05:43 2010 -0600 | |
599 | ||
600 | rawconference: Implement fs_raw_stream_set_remote_codecs. | |
601 | ||
602 | commit 063f2638f987b7898dc4d7f2bc4c928098d0bdb1 | |
603 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
604 | Date: Sun Nov 14 18:09:03 2010 -0600 | |
605 | ||
606 | rawconference: Create and connect FsStreamTransmitter signal handlers. | |
607 | ||
608 | commit 1e382ae597944c970358d2d4c5f42ef777f09afb | |
609 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
610 | Date: Fri Nov 12 14:53:28 2010 -0600 | |
611 | ||
612 | rawconference: Implement fs_raw_stream_set_remote_candidates. | |
613 | ||
614 | commit 667925eb8248482570ae0ec8f0f76446fac5f631 | |
615 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
616 | Date: Thu Nov 11 21:23:11 2010 -0600 | |
617 | ||
618 | rawconference: Remove fs_raw_stream_set_tos_locked. | |
619 | ||
620 | commit 8fef272dfa18140118befe4563692fef3e204b74 | |
621 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
622 | Date: Thu Nov 11 21:22:12 2010 -0600 | |
623 | ||
624 | rawconference: Add FsStreamTransmitter. | |
625 | ||
626 | commit f2e97b099d8b108f63bb64f7ad74df41daa19d8d | |
627 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
628 | Date: Thu Nov 11 20:00:19 2010 -0600 | |
629 | ||
630 | rawconference: Implement fs_raw_session_get_stream_transmitter_type. | |
631 | ||
632 | commit f9d4f972c4cf584668c561aa7be4a1ef873e28a7 | |
633 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
634 | Date: Thu Nov 11 19:45:33 2010 -0600 | |
635 | ||
636 | rawconference: Add FsTransmitter member. | |
637 | ||
638 | commit 31974c06037c24d8a92c82494d473a5ac86242f1 | |
639 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
640 | Date: Thu Nov 11 17:50:54 2010 -0600 | |
641 | ||
642 | rawconference: Add FsRawStream class files. | |
643 | ||
644 | commit 547c2091e4e92666f22f48b13be0127def0c9bb6 | |
645 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
646 | Date: Fri Nov 5 22:07:33 2010 -0500 | |
647 | ||
648 | rawconference: Add capsfilter to the session pipeline. | |
649 | ||
650 | commit 6d5546215bc20ed576ac10ec0abe35579530b69b | |
651 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
652 | Date: Fri Nov 5 20:35:21 2010 -0500 | |
653 | ||
654 | rawconference: Add an id to FsRawSessions and support creating them. | |
655 | ||
656 | commit ba067d5b954e119a68d113558d8d2ab630f9ab28 | |
657 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
658 | Date: Thu Nov 4 20:44:14 2010 -0500 | |
659 | ||
660 | rawconference: Implement fs_raw_conference_list_transmitters. | |
661 | ||
662 | commit 84060f78d4e2c1f31dc7e047446698dbd4d15b12 | |
663 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
664 | Date: Thu Nov 4 20:26:03 2010 -0500 | |
665 | ||
666 | rawconference: Add the FsRawSession class. | |
667 | ||
668 | These files have been copied directly from the FsMsnSession class | |
669 | and have simply been renamed. More modifications will be needed. | |
670 | P.S. The section documentation has also been altered to better | |
671 | suit the FsRawSession class. | |
672 | ||
673 | commit 66d044279d23b7fdf01f125c1c2d42aeb17b9dbb | |
674 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
675 | Date: Mon Nov 1 17:38:24 2010 -0500 | |
676 | ||
677 | rawconference: Remove cname from FsRawParticipant. | |
678 | ||
679 | commit 24e9a7184e18850b172bc7d218900308ccf5619e | |
680 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
681 | Date: Sat Oct 30 22:37:47 2010 -0500 | |
682 | ||
683 | rawconference: Add FsRawParticipant. | |
684 | ||
685 | commit 0418bc34a1cdb701062a3bb5f2a44a4afd0a43f5 | |
686 | Author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
687 | Date: Sat Oct 30 21:50:14 2010 -0500 | |
688 | ||
689 | rawconference: Add base FsRawConference class and plugin structure. | |
690 | ||
691 | commit 22774302f3aadba3f1df976aec4462779d4f147f | |
692 | Author: Olivier Crête <olivier.crete@collabora.co.uk> | |
693 | Date: Thu Jan 20 21:57:31 2011 -0500 | |
694 | ||
695 | Version 0.0.23.1 | |
696 | ||
0 | 697 | commit 680b46c8a3ac3b782f07a9c82f90cb145eaae7ba |
1 | 698 | Author: Olivier Crête <olivier.crete@collabora.co.uk> |
2 | 699 | Date: Thu Jan 20 21:40:17 2011 -0500 |
4 | 4 | |
5 | 5 | /* Farsight2 license */ |
6 | 6 | #undef FS2_LICENSE |
7 | ||
8 | /* Farsight2 major.minor version */ | |
9 | #undef FS2_MAJORMINOR | |
7 | 10 | |
8 | 11 | /* The path were plugins are installed and search by default */ |
9 | 12 | #undef FS2_PLUGIN_PATH |
0 | 0 | #! /bin/sh |
1 | 1 | # Guess values for system-dependent variables and create Makefiles. |
2 | # Generated by GNU Autoconf 2.66 for Farsight2 0.0.23. | |
2 | # Generated by GNU Autoconf 2.66 for Farsight2 0.0.24. | |
3 | 3 | # |
4 | 4 | # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=Farsight>. |
5 | 5 | # |
562 | 562 | # Identity of this package. |
563 | 563 | PACKAGE_NAME='Farsight2' |
564 | 564 | PACKAGE_TARNAME='farsight2' |
565 | PACKAGE_VERSION='0.0.23' | |
566 | PACKAGE_STRING='Farsight2 0.0.23' | |
565 | PACKAGE_VERSION='0.0.24' | |
566 | PACKAGE_STRING='Farsight2 0.0.24' | |
567 | 567 | PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=Farsight' |
568 | 568 | PACKAGE_URL='' |
569 | 569 | |
1450 | 1450 | # Omit some internal or obsolete options to make the list less imposing. |
1451 | 1451 | # This message is too long to be a string in the A/UX 3.1 sh. |
1452 | 1452 | cat <<_ACEOF |
1453 | \`configure' configures Farsight2 0.0.23 to adapt to many kinds of systems. | |
1453 | \`configure' configures Farsight2 0.0.24 to adapt to many kinds of systems. | |
1454 | 1454 | |
1455 | 1455 | Usage: $0 [OPTION]... [VAR=VALUE]... |
1456 | 1456 | |
1520 | 1520 | |
1521 | 1521 | if test -n "$ac_init_help"; then |
1522 | 1522 | case $ac_init_help in |
1523 | short | recursive ) echo "Configuration of Farsight2 0.0.23:";; | |
1523 | short | recursive ) echo "Configuration of Farsight2 0.0.24:";; | |
1524 | 1524 | esac |
1525 | 1525 | cat <<\_ACEOF |
1526 | 1526 | |
1691 | 1691 | test -n "$ac_init_help" && exit $ac_status |
1692 | 1692 | if $ac_init_version; then |
1693 | 1693 | cat <<\_ACEOF |
1694 | Farsight2 configure 0.0.23 | |
1694 | Farsight2 configure 0.0.24 | |
1695 | 1695 | generated by GNU Autoconf 2.66 |
1696 | 1696 | |
1697 | 1697 | Copyright (C) 2010 Free Software Foundation, Inc. |
2163 | 2163 | This file contains any messages produced by compilers while |
2164 | 2164 | running configure, to aid debugging if configure makes a mistake. |
2165 | 2165 | |
2166 | It was created by Farsight2 $as_me 0.0.23, which was | |
2166 | It was created by Farsight2 $as_me 0.0.24, which was | |
2167 | 2167 | generated by GNU Autoconf 2.66. Invocation command line was |
2168 | 2168 | |
2169 | 2169 | $ $0 $@ |
2983 | 2983 | |
2984 | 2984 | # Define the identity of the package. |
2985 | 2985 | PACKAGE='farsight2' |
2986 | VERSION='0.0.23' | |
2986 | VERSION='0.0.24' | |
2987 | 2987 | |
2988 | 2988 | |
2989 | 2989 | cat >>confdefs.h <<_ACEOF |
3025 | 3025 | |
3026 | 3026 | |
3027 | 3027 | |
3028 | PACKAGE_VERSION_MAJOR=$(echo 0.0.23 | cut -d'.' -f1) | |
3029 | PACKAGE_VERSION_MINOR=$(echo 0.0.23 | cut -d'.' -f2) | |
3030 | PACKAGE_VERSION_MICRO=$(echo 0.0.23 | cut -d'.' -f3) | |
3028 | PACKAGE_VERSION_MAJOR=$(echo 0.0.24 | cut -d'.' -f1) | |
3029 | PACKAGE_VERSION_MINOR=$(echo 0.0.24 | cut -d'.' -f2) | |
3030 | PACKAGE_VERSION_MICRO=$(echo 0.0.24 | cut -d'.' -f3) | |
3031 | 3031 | |
3032 | 3032 | |
3033 | 3033 | |
3038 | 3038 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 |
3039 | 3039 | $as_echo_n "checking nano version... " >&6; } |
3040 | 3040 | |
3041 | NANO=$(echo 0.0.23 | cut -d'.' -f4) | |
3041 | NANO=$(echo 0.0.24 | cut -d'.' -f4) | |
3042 | 3042 | |
3043 | 3043 | if test x"$NANO" = x || test "x$NANO" = "x0" ; then |
3044 | 3044 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 |
3154 | 3154 | FS2_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR |
3155 | 3155 | |
3156 | 3156 | |
3157 | cat >>confdefs.h <<_ACEOF | |
3158 | #define FS2_MAJORMINOR "$FS2_MAJORMINOR" | |
3159 | _ACEOF | |
3160 | ||
3161 | ||
3157 | 3162 | GST_MAJORMINOR=0.10 |
3158 | 3163 | |
3159 | 3164 | |
3164 | 3169 | |
3165 | 3170 | |
3166 | 3171 | |
3167 | FS2_CURRENT=5 | |
3168 | FS2_REVISION=3 | |
3169 | FS2_AGE=5 | |
3170 | FS2_LIBVERSION=5:3:5 | |
3172 | FS2_CURRENT=6 | |
3173 | FS2_REVISION=0 | |
3174 | FS2_AGE=6 | |
3175 | FS2_LIBVERSION=6:0:6 | |
3171 | 3176 | |
3172 | 3177 | |
3173 | 3178 | |
11551 | 11556 | |
11552 | 11557 | |
11553 | 11558 | FS2_PLUGINS_ALL=" \ |
11559 | fsrawconference \ | |
11554 | 11560 | fsrtpconference \ |
11555 | 11561 | fsmsnconference \ |
11556 | 11562 | funnel \ |
15325 | 15331 | fi |
15326 | 15332 | |
15327 | 15333 | |
15328 | ac_config_files="$ac_config_files Makefile farsight2.pc common/Makefile common/m4/Makefile common-modified/Makefile gst/Makefile gst/fsrtpconference/Makefile gst/fsmsnconference/Makefile gst/funnel/Makefile gst/rtcpfilter/Makefile gst/videoanyrate/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/farsight/Makefile transmitters/Makefile transmitters/rawudp/Makefile transmitters/multicast/Makefile transmitters/nice/Makefile transmitters/shm/Makefile tests/Makefile tests/check/Makefile tests/rtp/Makefile examples/Makefile examples/gui/Makefile examples/commandline/Makefile docs/Makefile docs/libs/Makefile docs/plugins/Makefile docs/version.entities python/Makefile m4/Makefile" | |
15334 | ac_config_files="$ac_config_files Makefile farsight2.pc common/Makefile common/m4/Makefile common-modified/Makefile gst/Makefile gst/fsrawconference/Makefile gst/fsrtpconference/Makefile gst/fsmsnconference/Makefile gst/funnel/Makefile gst/rtcpfilter/Makefile gst/videoanyrate/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/farsight/Makefile transmitters/Makefile transmitters/rawudp/Makefile transmitters/multicast/Makefile transmitters/nice/Makefile transmitters/shm/Makefile tests/Makefile tests/check/Makefile tests/rtp/Makefile examples/Makefile examples/gui/Makefile examples/commandline/Makefile docs/Makefile docs/libs/Makefile docs/plugins/Makefile docs/version.entities python/Makefile m4/Makefile" | |
15329 | 15335 | |
15330 | 15336 | cat >confcache <<\_ACEOF |
15331 | 15337 | # This file is a shell script that caches the results of configure |
15938 | 15944 | # report actual input values of CONFIG_FILES etc. instead of their |
15939 | 15945 | # values after options handling. |
15940 | 15946 | ac_log=" |
15941 | This file was extended by Farsight2 $as_me 0.0.23, which was | |
15947 | This file was extended by Farsight2 $as_me 0.0.24, which was | |
15942 | 15948 | generated by GNU Autoconf 2.66. Invocation command line was |
15943 | 15949 | |
15944 | 15950 | CONFIG_FILES = $CONFIG_FILES |
16004 | 16010 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 |
16005 | 16011 | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" |
16006 | 16012 | ac_cs_version="\\ |
16007 | Farsight2 config.status 0.0.23 | |
16013 | Farsight2 config.status 0.0.24 | |
16008 | 16014 | configured by $0, generated by GNU Autoconf 2.66, |
16009 | 16015 | with options \\"\$ac_cs_config\\" |
16010 | 16016 | |
16396 | 16402 | "common/m4/Makefile") CONFIG_FILES="$CONFIG_FILES common/m4/Makefile" ;; |
16397 | 16403 | "common-modified/Makefile") CONFIG_FILES="$CONFIG_FILES common-modified/Makefile" ;; |
16398 | 16404 | "gst/Makefile") CONFIG_FILES="$CONFIG_FILES gst/Makefile" ;; |
16405 | "gst/fsrawconference/Makefile") CONFIG_FILES="$CONFIG_FILES gst/fsrawconference/Makefile" ;; | |
16399 | 16406 | "gst/fsrtpconference/Makefile") CONFIG_FILES="$CONFIG_FILES gst/fsrtpconference/Makefile" ;; |
16400 | 16407 | "gst/fsmsnconference/Makefile") CONFIG_FILES="$CONFIG_FILES gst/fsmsnconference/Makefile" ;; |
16401 | 16408 | "gst/funnel/Makefile") CONFIG_FILES="$CONFIG_FILES gst/funnel/Makefile" ;; |
4 | 4 | dnl initialize autoconf |
5 | 5 | dnl releases only do -Wall, cvs and prerelease does -Werror too |
6 | 6 | dnl use a three digit version number for releases, and four for cvs/prerelease |
7 | AC_INIT(Farsight2, 0.0.23, | |
7 | AC_INIT(Farsight2, 0.0.24, | |
8 | 8 | https://bugs.freedesktop.org/enter_bug.cgi?product=Farsight, |
9 | 9 | farsight2) |
10 | 10 | |
36 | 36 | dnl our libraries and install dirs use major.minor as a version |
37 | 37 | FS2_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR |
38 | 38 | AC_SUBST(FS2_MAJORMINOR) |
39 | AC_DEFINE_UNQUOTED(FS2_MAJORMINOR, "$FS2_MAJORMINOR", | |
40 | [Farsight2 major.minor version]) | |
39 | 41 | |
40 | 42 | GST_MAJORMINOR=0.10 |
41 | 43 | AC_SUBST(GST_MAJORMINOR) |
49 | 51 | dnl - interfaces added -> increment AGE |
50 | 52 | dnl - interfaces removed -> AGE = 0 |
51 | 53 | dnl sets FS2_LT_LDFLAGS |
52 | AS_LIBTOOL(FS2, 5, 3, 5) | |
54 | AS_LIBTOOL(FS2, 6, 0, 6) | |
53 | 55 | |
54 | 56 | dnl FIXME: this macro doesn't actually work; |
55 | 57 | dnl the generated libtool script has no support for the listed tags. |
104 | 106 | |
105 | 107 | dnl these are all the gst plug-ins, compilable without additional libs |
106 | 108 | FS2_PLUGINS_ALL=" \ |
109 | fsrawconference \ | |
107 | 110 | fsrtpconference \ |
108 | 111 | fsmsnconference \ |
109 | 112 | funnel \ |
389 | 392 | common/m4/Makefile |
390 | 393 | common-modified/Makefile |
391 | 394 | gst/Makefile |
395 | gst/fsrawconference/Makefile | |
392 | 396 | gst/fsrtpconference/Makefile |
393 | 397 | gst/fsmsnconference/Makefile |
394 | 398 | gst/funnel/Makefile |
33 | 33 | <title>Farsight Utility Functions and Objects</title> |
34 | 34 | <xi:include href="xml/fs-element-added-notifier.xml"/> |
35 | 35 | <xi:include href="xml/fs-interfaces.xml"/> |
36 | <xi:include href="xml/fs-utils.xml"/> | |
36 | 37 | </chapter> |
37 | 38 | </part> |
38 | 39 | <part> |
259 | 259 | fs_interfaces_get_local_interfaces |
260 | 260 | fs_interfaces_get_local_ips |
261 | 261 | </SECTION> |
262 | ||
263 | <SECTION> | |
264 | <FILE>fs-utils</FILE> | |
265 | <INCLUDE>gst/farsight/fs-utils.h</INCLUDE> | |
266 | fs_utils_get_default_codec_preferences | |
267 | fs_utils_get_default_element_properties | |
268 | </SECTION> |
91 | 91 | of type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><span class="type">GST_MESSAGE_ELEMENT</span></a> sent over the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a>. |
92 | 92 | </p> |
93 | 93 | <div class="refsect2" title='The "farsight-error" message'> |
94 | <a name="id459650"></a><h3>The "<code class="literal">farsight-error</code>" message</h3> | |
94 | <a name="id538257"></a><h3>The "<code class="literal">farsight-error</code>" message</h3> | |
95 | 95 | <div class="informalexample"> |
96 | 96 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
97 | 97 | <tbody> |
110 | 110 | of type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><span class="type">GST_MESSAGE_ELEMENT</span></a> sent over the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a>. |
111 | 111 | </p> |
112 | 112 | <div class="refsect2" title='The "farsight-new-local-candidate" message'> |
113 | <a name="id539458"></a><h3>The "<code class="literal">farsight-new-local-candidate</code>" message</h3> | |
113 | <a name="id618070"></a><h3>The "<code class="literal">farsight-new-local-candidate</code>" message</h3> | |
114 | 114 | <div class="informalexample"> |
115 | 115 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
116 | 116 | <tbody> |
130 | 130 | </div> |
131 | 131 | <hr> |
132 | 132 | <div class="refsect2" title='The "farsight-local-candidates-prepared" message'> |
133 | <a name="id539494"></a><h3>The "<code class="literal">farsight-local-candidates-prepared</code>" message</h3> | |
133 | <a name="id618106"></a><h3>The "<code class="literal">farsight-local-candidates-prepared</code>" message</h3> | |
134 | 134 | <div class="informalexample"> |
135 | 135 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
136 | 136 | <tbody> |
149 | 149 | </div> |
150 | 150 | <hr> |
151 | 151 | <div class="refsect2" title='The "farsight-new-active-candidate-pair" message'> |
152 | <a name="id539524"></a><h3>The "<code class="literal">farsight-new-active-candidate-pair</code>" message</h3> | |
152 | <a name="id618135"></a><h3>The "<code class="literal">farsight-new-active-candidate-pair</code>" message</h3> | |
153 | 153 | <div class="informalexample"> |
154 | 154 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
155 | 155 | <tbody> |
175 | 175 | </div> |
176 | 176 | <hr> |
177 | 177 | <div class="refsect2" title='The "farsight-recv-codecs-changed" message'> |
178 | <a name="id539568"></a><h3>The "<code class="literal">farsight-recv-codecs-changed</code>" message</h3> | |
178 | <a name="id618180"></a><h3>The "<code class="literal">farsight-recv-codecs-changed</code>" message</h3> | |
179 | 179 | <div class="informalexample"> |
180 | 180 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
181 | 181 | <tbody> |
200 | 200 | </div> |
201 | 201 | <hr> |
202 | 202 | <div class="refsect2" title='The "farsight-component-state-changed" message'> |
203 | <a name="id539632"></a><h3>The "<code class="literal">farsight-component-state-changed</code>" message</h3> | |
203 | <a name="id618243"></a><h3>The "<code class="literal">farsight-component-state-changed</code>" message</h3> | |
204 | 204 | <div class="informalexample"> |
205 | 205 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
206 | 206 | <tbody> |
20 | 20 | </tr></table> |
21 | 21 | <div class="chapter" title="Farsight GStreamer Interfaces"> |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id460098"></a>Farsight GStreamer Interfaces</h2></div></div></div> | |
23 | <a name="id538708"></a>Farsight GStreamer Interfaces</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl><dt> |
25 | 25 | <span class="refentrytitle"><a href="FsConference.html">FsConference</a></span><span class="refpurpose"> — Interface for farsight conference elements</span> |
26 | 26 | </dt></dl></div> |
20 | 20 | </tr></table> |
21 | 21 | <div class="chapter" title="Farsight Core Library"> |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id460109"></a>Farsight Core Library</h2></div></div></div> | |
23 | <a name="id538718"></a>Farsight Core Library</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl> |
25 | 25 | <dt> |
26 | 26 | <span class="refentrytitle"><a href="FsParticipant.html">FsParticipant</a></span><span class="refpurpose"> — A participant in a conference</span> |
20 | 20 | </tr></table> |
21 | 21 | <div class="chapter" title="Farsight Utility Functions and Objects"> |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id465337"></a>Farsight Utility Functions and Objects</h2></div></div></div> | |
23 | <a name="id543946"></a>Farsight Utility Functions and Objects</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl> |
25 | 25 | <dt> |
26 | 26 | <span class="refentrytitle"><a href="FsElementAddedNotifier.html">FsElementAddedNotifier</a></span><span class="refpurpose"> — Recursive element addition notifier</span> |
27 | 27 | </dt> |
28 | 28 | <dt> |
29 | 29 | <span class="refentrytitle"><a href="farsight2-libs-Network-interfaces-discovery.html">Network interfaces discovery</a></span><span class="refpurpose"> — Utility functions to discover local network interfaces</span> |
30 | </dt> | |
31 | <dt> | |
32 | <span class="refentrytitle"><a href="farsight2-libs-fs-utils.html">fs-utils</a></span><span class="refpurpose"> — Miscellaneous useful functions</span> | |
30 | 33 | </dt> |
31 | 34 | </dl></div> |
32 | 35 | </div> |
20 | 20 | </tr></table> |
21 | 21 | <div class="chapter" title="Farsight Classes Base Implementations"> |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id465359"></a>Farsight Classes Base Implementations</h2></div></div></div> | |
23 | <a name="id543972"></a>Farsight Classes Base Implementations</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl><dt> |
25 | 25 | <span class="refentrytitle"><a href="FsBaseConference.html">FsBaseConference</a></span><span class="refpurpose"> — Base class for Farsight Conference Gstreamer Elements</span> |
26 | 26 | </dt></dl></div> |
20 | 20 | </tr></table> |
21 | 21 | <div class="chapter" title="Farsight Transmitter Classes"> |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id465370"></a>Farsight Transmitter Classes</h2></div></div></div> | |
23 | <a name="id543984"></a>Farsight Transmitter Classes</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl> |
25 | 25 | <dt> |
26 | 26 | <span class="refentrytitle"><a href="FsTransmitter.html">FsTransmitter</a></span><span class="refpurpose"> — A transmitter object linked to a session</span> |
20 | 20 | </tr></table> |
21 | 21 | <div class="chapter" title="Farsight Plugins Infrastructure"> |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id465386"></a>Farsight Plugins Infrastructure</h2></div></div></div> | |
23 | <a name="id539664"></a>Farsight Plugins Infrastructure</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl><dt> |
25 | 25 | <span class="refentrytitle"><a href="farsight2-libs-FsPlugin.html">FsPlugin</a></span><span class="refpurpose"> — A class for defining Farsight plugins</span> |
26 | 26 | </dt></dl></div> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Reference Manual"> |
7 | 7 | <link rel="up" href="ch03.html" title="Farsight Utility Functions and Objects"> |
8 | 8 | <link rel="prev" href="FsElementAddedNotifier.html" title="FsElementAddedNotifier"> |
9 | <link rel="next" href="pt02.html" title="Part II. Classes used to implement Farsight plugins"> | |
9 | <link rel="next" href="farsight2-libs-fs-utils.html" title="fs-utils"> | |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
17 | 17 | <td><a accesskey="u" href="ch03.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> |
18 | 18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
19 | 19 | <th width="100%" align="center">Farsight2 Reference Manual</th> |
20 | <td><a accesskey="n" href="pt02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
20 | <td><a accesskey="n" href="farsight2-libs-fs-utils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | 21 | </tr> |
22 | 22 | <tr><td colspan="5" class="shortcuts"> |
23 | 23 | <a href="#farsight2-libs-Network-interfaces-discovery.synopsis" class="shortcut">Top</a> |
121 | 121 | of type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><span class="type">GST_MESSAGE_ELEMENT</span></a> sent over the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a>. |
122 | 122 | </p> |
123 | 123 | <div class="refsect2" title='The "farsight-send-codec-changed" message'> |
124 | <a name="id517534"></a><h3>The "<code class="literal">farsight-send-codec-changed</code>" | |
124 | <a name="id596143"></a><h3>The "<code class="literal">farsight-send-codec-changed</code>" | |
125 | 125 | message</h3> |
126 | 126 | <div class="informalexample"> |
127 | 127 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
147 | 147 | </div> |
148 | 148 | <hr> |
149 | 149 | <div class="refsect2" title='The "farsight-codecs-changed" message'> |
150 | <a name="id517594"></a><h3>The "<code class="literal">farsight-codecs-changed</code>" | |
150 | <a name="id596203"></a><h3>The "<code class="literal">farsight-codecs-changed</code>" | |
151 | 151 | message</h3> |
152 | 152 | <div class="informalexample"> |
153 | 153 | <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
0 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
1 | <html> | |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
4 | <title>fs-utils</title> | |
5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> | |
6 | <link rel="home" href="index.html" title="Farsight2 Reference Manual"> | |
7 | <link rel="up" href="ch03.html" title="Farsight Utility Functions and Objects"> | |
8 | <link rel="prev" href="farsight2-libs-Network-interfaces-discovery.html" title="Network interfaces discovery"> | |
9 | <link rel="next" href="pt02.html" title="Part II. Classes used to implement Farsight plugins"> | |
10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> | |
11 | <link rel="stylesheet" href="style.css" type="text/css"> | |
12 | </head> | |
13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> | |
15 | <tr valign="middle"> | |
16 | <td><a accesskey="p" href="farsight2-libs-Network-interfaces-discovery.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
17 | <td><a accesskey="u" href="ch03.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> | |
19 | <th width="100%" align="center">Farsight2 Reference Manual</th> | |
20 | <td><a accesskey="n" href="pt02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | </tr> | |
22 | <tr><td colspan="5" class="shortcuts"> | |
23 | <a href="#farsight2-libs-fs-utils.synopsis" class="shortcut">Top</a> | |
24 | | | |
25 | <a href="#farsight2-libs-fs-utils.description" class="shortcut">Description</a> | |
26 | </td></tr> | |
27 | </table> | |
28 | <div class="refentry" title="fs-utils"> | |
29 | <a name="farsight2-libs-fs-utils"></a><div class="titlepage"></div> | |
30 | <div class="refnamediv"><table width="100%"><tr> | |
31 | <td valign="top"> | |
32 | <h2><span class="refentrytitle"><a name="farsight2-libs-fs-utils.top_of_page"></a>fs-utils</span></h2> | |
33 | <p>fs-utils — Miscellaneous useful functions</p> | |
34 | </td> | |
35 | <td valign="top" align="right"></td> | |
36 | </tr></table></div> | |
37 | <div class="refsynopsisdiv" title="Synopsis"> | |
38 | <a name="farsight2-libs-fs-utils.synopsis"></a><h2>Synopsis</h2> | |
39 | <pre class="synopsis"> | |
40 | #include <gst/farsight/fs-utils.h> | |
41 | ||
42 | <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * <a class="link" href="farsight2-libs-fs-utils.html#fs-utils-get-default-codec-preferences" title="fs_utils_get_default_codec_preferences ()">fs_utils_get_default_codec_preferences</a> | |
43 | (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>); | |
44 | <a href="http://library.gnome.org/devel/glib/unstable/glib-Key-value-file-parser.html#GKeyFile"><span class="returnvalue">GKeyFile</span></a> * <a class="link" href="farsight2-libs-fs-utils.html#fs-utils-get-default-element-properties" title="fs_utils_get_default_element_properties ()">fs_utils_get_default_element_properties</a> | |
45 | (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>); | |
46 | </pre> | |
47 | </div> | |
48 | <div class="refsect1" title="Description"> | |
49 | <a name="farsight2-libs-fs-utils.description"></a><h2>Description</h2> | |
50 | </div> | |
51 | <div class="refsect1" title="Details"> | |
52 | <a name="farsight2-libs-fs-utils.details"></a><h2>Details</h2> | |
53 | <div class="refsect2" title="fs_utils_get_default_codec_preferences ()"> | |
54 | <a name="fs-utils-get-default-codec-preferences"></a><h3>fs_utils_get_default_codec_preferences ()</h3> | |
55 | <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * fs_utils_get_default_codec_preferences | |
56 | (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre> | |
57 | <p> | |
58 | These default codec preferences should work with the elements that are | |
59 | available in the main GStreamer element repositories. | |
60 | They should be suitable for standards based protocols like SIP or XMPP. | |
61 | </p> | |
62 | <div class="variablelist"><table border="0"> | |
63 | <col align="left" valign="top"> | |
64 | <tbody> | |
65 | <tr> | |
66 | <td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td> | |
67 | <td>Element for which to fetch default codec preferences | |
68 | </td> | |
69 | </tr> | |
70 | <tr> | |
71 | <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> | |
72 | <td> The default codec preferences for this plugin, | |
73 | this <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> should be freed with <a class="link" href="farsight2-libs-FsCodec.html#fs-codec-list-destroy" title="fs_codec_list_destroy ()"><code class="function">fs_codec_list_destroy()</code></a> | |
74 | </td> | |
75 | </tr> | |
76 | </tbody> | |
77 | </table></div> | |
78 | </div> | |
79 | <hr> | |
80 | <div class="refsect2" title="fs_utils_get_default_element_properties ()"> | |
81 | <a name="fs-utils-get-default-element-properties"></a><h3>fs_utils_get_default_element_properties ()</h3> | |
82 | <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Key-value-file-parser.html#GKeyFile"><span class="returnvalue">GKeyFile</span></a> * fs_utils_get_default_element_properties | |
83 | (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre> | |
84 | <p> | |
85 | This function produces a <a href="http://library.gnome.org/devel/glib/unstable/glib-Key-value-file-parser.html#GKeyFile"><span class="type">GKeyFile</span></a> that can be fed to | |
86 | <a class="link" href="FsElementAddedNotifier.html#fs-element-added-notifier-set-properties-from-keyfile" title="fs_element_added_notifier_set_properties_from_keyfile ()"><code class="function">fs_element_added_notifier_set_properties_from_keyfile()</code></a>. If no | |
87 | default properties have been found, it will return <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. | |
88 | </p> | |
89 | <div class="variablelist"><table border="0"> | |
90 | <col align="left" valign="top"> | |
91 | <tbody> | |
92 | <tr> | |
93 | <td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td> | |
94 | <td>Element for which to fetch default element properties | |
95 | </td> | |
96 | </tr> | |
97 | <tr> | |
98 | <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> | |
99 | <td> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Key-value-file-parser.html#GKeyFile"><span class="type">GKeyFile</span></a> containing the default element properties for this | |
100 | element or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if no properties were found. Caller must free | |
101 | the <a href="http://library.gnome.org/devel/glib/unstable/glib-Key-value-file-parser.html#GKeyFile"><span class="type">GKeyFile</span></a> when he is done. | |
102 | </td> | |
103 | </tr> | |
104 | </tbody> | |
105 | </table></div> | |
106 | </div> | |
107 | </div> | |
108 | </div> | |
109 | <div class="footer"> | |
110 | <hr> | |
111 | Generated by GTK-Doc V1.15</div> | |
112 | </body> | |
113 | </html>⏎ |
15 | 15 | <sub name="Farsight Utility Functions and Objects" link="ch03.html"> |
16 | 16 | <sub name="FsElementAddedNotifier" link="FsElementAddedNotifier.html"/> |
17 | 17 | <sub name="Network interfaces discovery" link="farsight2-libs-Network-interfaces-discovery.html"/> |
18 | <sub name="fs-utils" link="farsight2-libs-fs-utils.html"/> | |
18 | 19 | </sub> |
19 | 20 | </sub> |
20 | 21 | <sub name="Classes used to implement Farsight plugins" link="pt02.html"> |
31 | 32 | </sub> |
32 | 33 | </chapters> |
33 | 34 | <functions> |
34 | <function name="The "farsight-error" message" link="FsConference.html#id459650"/> | |
35 | <function name="The "farsight-error" message" link="FsConference.html#id538257"/> | |
35 | 36 | <function name="FsConference" link="FsConference.html#FsConference-struct"/> |
36 | 37 | <function name="fs_conference_new_session ()" link="FsConference.html#fs-conference-new-session"/> |
37 | 38 | <function name="fs_conference_new_participant ()" link="FsConference.html#fs-conference-new-participant"/> |
44 | 45 | <function name="FS_PARTICIPANT_DATA_UNLOCK()" link="FsParticipant.html#FS-PARTICIPANT-DATA-UNLOCK:CAPS"/> |
45 | 46 | <function name="The "cname" property" link="FsParticipant.html#FsParticipant--cname"/> |
46 | 47 | <function name="The "error" signal" link="FsParticipant.html#FsParticipant-error"/> |
47 | <function name="The "farsight-send-codec-changed" message" link="farsight2-libs-fs-session.html#id517534"/> | |
48 | <function name="The "farsight-codecs-changed" message" link="farsight2-libs-fs-session.html#id517594"/> | |
48 | <function name="The "farsight-send-codec-changed" message" link="farsight2-libs-fs-session.html#id596143"/> | |
49 | <function name="The "farsight-codecs-changed" message" link="farsight2-libs-fs-session.html#id596203"/> | |
49 | 50 | <function name="enum FsDTMFEvent" link="farsight2-libs-fs-session.html#FsDTMFEvent"/> |
50 | 51 | <function name="enum FsDTMFMethod" link="farsight2-libs-fs-session.html#FsDTMFMethod"/> |
51 | 52 | <function name="FsSession" link="farsight2-libs-fs-session.html#FsSession-struct"/> |
68 | 69 | <function name="The "sink-pad" property" link="farsight2-libs-fs-session.html#FsSession--sink-pad"/> |
69 | 70 | <function name="The "tos" property" link="farsight2-libs-fs-session.html#FsSession--tos"/> |
70 | 71 | <function name="The "error" signal" link="farsight2-libs-fs-session.html#FsSession-error"/> |
71 | <function name="The "farsight-new-local-candidate" message" link="FsStream.html#id539458"/> | |
72 | <function name="The "farsight-local-candidates-prepared" message" link="FsStream.html#id539494"/> | |
73 | <function name="The "farsight-new-active-candidate-pair" message" link="FsStream.html#id539524"/> | |
74 | <function name="The "farsight-recv-codecs-changed" message" link="FsStream.html#id539568"/> | |
75 | <function name="The "farsight-component-state-changed" message" link="FsStream.html#id539632"/> | |
72 | <function name="The "farsight-new-local-candidate" message" link="FsStream.html#id618070"/> | |
73 | <function name="The "farsight-local-candidates-prepared" message" link="FsStream.html#id618106"/> | |
74 | <function name="The "farsight-new-active-candidate-pair" message" link="FsStream.html#id618135"/> | |
75 | <function name="The "farsight-recv-codecs-changed" message" link="FsStream.html#id618180"/> | |
76 | <function name="The "farsight-component-state-changed" message" link="FsStream.html#id618243"/> | |
76 | 77 | <function name="FsStream" link="FsStream.html#FsStream-struct"/> |
77 | 78 | <function name="FsStreamClass" link="FsStream.html#FsStreamClass"/> |
78 | 79 | <function name="enum FsStreamDirection" link="FsStream.html#FsStreamDirection"/> |
131 | 132 | <function name="fs_interfaces_get_ip_for_interface ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-ip-for-interface"/> |
132 | 133 | <function name="fs_interfaces_get_local_interfaces ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-interfaces"/> |
133 | 134 | <function name="fs_interfaces_get_local_ips ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-ips"/> |
135 | <function name="fs_utils_get_default_codec_preferences ()" link="farsight2-libs-fs-utils.html#fs-utils-get-default-codec-preferences"/> | |
136 | <function name="fs_utils_get_default_element_properties ()" link="farsight2-libs-fs-utils.html#fs-utils-get-default-element-properties"/> | |
134 | 137 | <function name="FsBaseConference" link="FsBaseConference.html#FsBaseConference-struct"/> |
135 | 138 | <function name="FsBaseConferenceClass" link="FsBaseConference.html#FsBaseConferenceClass"/> |
136 | 139 | <function name="FsTransmitter" link="FsTransmitter.html#FsTransmitter-struct"/> |
15 | 15 | <sub name="Farsight Utility Functions and Objects" link="ch03.html"> |
16 | 16 | <sub name="FsElementAddedNotifier" link="FsElementAddedNotifier.html"/> |
17 | 17 | <sub name="Network interfaces discovery" link="farsight2-libs-Network-interfaces-discovery.html"/> |
18 | <sub name="fs-utils" link="farsight2-libs-fs-utils.html"/> | |
18 | 19 | </sub> |
19 | 20 | </sub> |
20 | 21 | <sub name="Classes used to implement Farsight plugins" link="pt02.html"> |
31 | 32 | </sub> |
32 | 33 | </chapters> |
33 | 34 | <functions> |
34 | <keyword type="" name="The "farsight-error" message" link="FsConference.html#id459650"/> | |
35 | <keyword type="" name="The "farsight-error" message" link="FsConference.html#id538257"/> | |
35 | 36 | <keyword type="struct" name="FsConference" link="FsConference.html#FsConference-struct"/> |
36 | 37 | <keyword type="function" name="fs_conference_new_session ()" link="FsConference.html#fs-conference-new-session"/> |
37 | 38 | <keyword type="function" name="fs_conference_new_participant ()" link="FsConference.html#fs-conference-new-participant"/> |
44 | 45 | <keyword type="macro" name="FS_PARTICIPANT_DATA_UNLOCK()" link="FsParticipant.html#FS-PARTICIPANT-DATA-UNLOCK:CAPS"/> |
45 | 46 | <keyword type="property" name="The "cname" property" link="FsParticipant.html#FsParticipant--cname"/> |
46 | 47 | <keyword type="signal" name="The "error" signal" link="FsParticipant.html#FsParticipant-error"/> |
47 | <keyword type="" name="The "farsight-send-codec-changed" message" link="farsight2-libs-fs-session.html#id517534"/> | |
48 | <keyword type="" name="The "farsight-codecs-changed" message" link="farsight2-libs-fs-session.html#id517594"/> | |
48 | <keyword type="" name="The "farsight-send-codec-changed" message" link="farsight2-libs-fs-session.html#id596143"/> | |
49 | <keyword type="" name="The "farsight-codecs-changed" message" link="farsight2-libs-fs-session.html#id596203"/> | |
49 | 50 | <keyword type="enum" name="enum FsDTMFEvent" link="farsight2-libs-fs-session.html#FsDTMFEvent"/> |
50 | 51 | <keyword type="enum" name="enum FsDTMFMethod" link="farsight2-libs-fs-session.html#FsDTMFMethod"/> |
51 | 52 | <keyword type="struct" name="FsSession" link="farsight2-libs-fs-session.html#FsSession-struct"/> |
68 | 69 | <keyword type="property" name="The "sink-pad" property" link="farsight2-libs-fs-session.html#FsSession--sink-pad"/> |
69 | 70 | <keyword type="property" name="The "tos" property" link="farsight2-libs-fs-session.html#FsSession--tos"/> |
70 | 71 | <keyword type="signal" name="The "error" signal" link="farsight2-libs-fs-session.html#FsSession-error"/> |
71 | <keyword type="" name="The "farsight-new-local-candidate" message" link="FsStream.html#id539458"/> | |
72 | <keyword type="" name="The "farsight-local-candidates-prepared" message" link="FsStream.html#id539494"/> | |
73 | <keyword type="" name="The "farsight-new-active-candidate-pair" message" link="FsStream.html#id539524"/> | |
74 | <keyword type="" name="The "farsight-recv-codecs-changed" message" link="FsStream.html#id539568"/> | |
75 | <keyword type="" name="The "farsight-component-state-changed" message" link="FsStream.html#id539632"/> | |
72 | <keyword type="" name="The "farsight-new-local-candidate" message" link="FsStream.html#id618070"/> | |
73 | <keyword type="" name="The "farsight-local-candidates-prepared" message" link="FsStream.html#id618106"/> | |
74 | <keyword type="" name="The "farsight-new-active-candidate-pair" message" link="FsStream.html#id618135"/> | |
75 | <keyword type="" name="The "farsight-recv-codecs-changed" message" link="FsStream.html#id618180"/> | |
76 | <keyword type="" name="The "farsight-component-state-changed" message" link="FsStream.html#id618243"/> | |
76 | 77 | <keyword type="struct" name="FsStream" link="FsStream.html#FsStream-struct"/> |
77 | 78 | <keyword type="struct" name="FsStreamClass" link="FsStream.html#FsStreamClass"/> |
78 | 79 | <keyword type="enum" name="enum FsStreamDirection" link="FsStream.html#FsStreamDirection"/> |
131 | 132 | <keyword type="function" name="fs_interfaces_get_ip_for_interface ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-ip-for-interface"/> |
132 | 133 | <keyword type="function" name="fs_interfaces_get_local_interfaces ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-interfaces"/> |
133 | 134 | <keyword type="function" name="fs_interfaces_get_local_ips ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-ips"/> |
135 | <keyword type="function" name="fs_utils_get_default_codec_preferences ()" link="farsight2-libs-fs-utils.html#fs-utils-get-default-codec-preferences"/> | |
136 | <keyword type="function" name="fs_utils_get_default_element_properties ()" link="farsight2-libs-fs-utils.html#fs-utils-get-default-element-properties"/> | |
134 | 137 | <keyword type="struct" name="FsBaseConference" link="FsBaseConference.html#FsBaseConference-struct"/> |
135 | 138 | <keyword type="struct" name="FsBaseConferenceClass" link="FsBaseConference.html#FsBaseConferenceClass"/> |
136 | 139 | <keyword type="struct" name="FsTransmitter" link="FsTransmitter.html#FsTransmitter-struct"/> |
14 | 14 | <div> |
15 | 15 | <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Farsight2 Reference Manual</p></th></tr></table></div> |
16 | 16 | <div><p class="releaseinfo"> |
17 | for version 0.0.22.1. | |
17 | for version 0.0.23.1. | |
18 | 18 | The latest version of this documentation can be found on-line at |
19 | 19 | <a class="ulink" href="http://farsight.freedesktop.org/apidoc/farsight2/" target="_top">http://farsight.freedesktop.org/apidoc/farsight2/</a>. |
20 | 20 | The bases classes are implemented by multiple plugins described in |
56 | 56 | <dt> |
57 | 57 | <span class="refentrytitle"><a href="farsight2-libs-Network-interfaces-discovery.html">Network interfaces discovery</a></span><span class="refpurpose"> — Utility functions to discover local network interfaces</span> |
58 | 58 | </dt> |
59 | <dt> | |
60 | <span class="refentrytitle"><a href="farsight2-libs-fs-utils.html">fs-utils</a></span><span class="refpurpose"> — Miscellaneous useful functions</span> | |
61 | </dt> | |
59 | 62 | </dl></dd> |
60 | 63 | </dl></dd> |
61 | 64 | <dt><span class="part"><a href="pt02.html">II. Classes used to implement Farsight plugins</a></span></dt> |
183 | 183 | <ANCHOR id="fs-interfaces-get-ip-for-interface" href="farsight2-libs-0.10/farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-ip-for-interface"> |
184 | 184 | <ANCHOR id="fs-interfaces-get-local-interfaces" href="farsight2-libs-0.10/farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-interfaces"> |
185 | 185 | <ANCHOR id="fs-interfaces-get-local-ips" href="farsight2-libs-0.10/farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-ips"> |
186 | <ANCHOR id="farsight2-libs-fs-utils" href="farsight2-libs-0.10/farsight2-libs-fs-utils.html"> | |
187 | <ANCHOR id="farsight2-libs-fs-utils.synopsis" href="farsight2-libs-0.10/farsight2-libs-fs-utils.html#farsight2-libs-fs-utils.synopsis"> | |
188 | <ANCHOR id="farsight2-libs-fs-utils.description" href="farsight2-libs-0.10/farsight2-libs-fs-utils.html#farsight2-libs-fs-utils.description"> | |
189 | <ANCHOR id="farsight2-libs-fs-utils.details" href="farsight2-libs-0.10/farsight2-libs-fs-utils.html#farsight2-libs-fs-utils.details"> | |
190 | <ANCHOR id="fs-utils-get-default-codec-preferences" href="farsight2-libs-0.10/farsight2-libs-fs-utils.html#fs-utils-get-default-codec-preferences"> | |
191 | <ANCHOR id="fs-utils-get-default-element-properties" href="farsight2-libs-0.10/farsight2-libs-fs-utils.html#fs-utils-get-default-element-properties"> | |
186 | 192 | <ANCHOR id="FsBaseConference" href="farsight2-libs-0.10/FsBaseConference.html"> |
187 | 193 | <ANCHOR id="FsBaseConference.synopsis" href="farsight2-libs-0.10/FsBaseConference.html#FsBaseConference.synopsis"> |
188 | 194 | <ANCHOR id="FsBaseConference.object-hierarchy" href="farsight2-libs-0.10/FsBaseConference.html#FsBaseConference.object-hierarchy"> |
20 | 20 | </tr></table> |
21 | 21 | <div class="part" title="Part I. User-oriented classes, interfaces and functions"> |
22 | 22 | <div class="titlepage"><div><div><h1 class="title"> |
23 | <a name="id460093"></a>Part I. User-oriented classes, interfaces and functions</h1></div></div></div> | |
23 | <a name="id538702"></a>Part I. User-oriented classes, interfaces and functions</h1></div></div></div> | |
24 | 24 | <div class="toc"> |
25 | 25 | <p><b>Table of Contents</b></p> |
26 | 26 | <dl> |
54 | 54 | <dt> |
55 | 55 | <span class="refentrytitle"><a href="farsight2-libs-Network-interfaces-discovery.html">Network interfaces discovery</a></span><span class="refpurpose"> — Utility functions to discover local network interfaces</span> |
56 | 56 | </dt> |
57 | <dt> | |
58 | <span class="refentrytitle"><a href="farsight2-libs-fs-utils.html">fs-utils</a></span><span class="refpurpose"> — Miscellaneous useful functions</span> | |
59 | </dt> | |
57 | 60 | </dl></dd> |
58 | 61 | </dl> |
59 | 62 | </div> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Reference Manual"> |
7 | 7 | <link rel="up" href="index.html" title="Farsight2 Reference Manual"> |
8 | <link rel="prev" href="farsight2-libs-Network-interfaces-discovery.html" title="Network interfaces discovery"> | |
8 | <link rel="prev" href="farsight2-libs-fs-utils.html" title="fs-utils"> | |
9 | 9 | <link rel="next" href="ch04.html" title="Farsight Classes Base Implementations"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
13 | 13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> |
15 | <td><a accesskey="p" href="farsight2-libs-Network-interfaces-discovery.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
15 | <td><a accesskey="p" href="farsight2-libs-fs-utils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
16 | 16 | <td> </td> |
17 | 17 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
18 | 18 | <th width="100%" align="center">Farsight2 Reference Manual</th> |
20 | 20 | </tr></table> |
21 | 21 | <div class="part" title="Part II. Classes used to implement Farsight plugins"> |
22 | 22 | <div class="titlepage"><div><div><h1 class="title"> |
23 | <a name="id465354"></a>Part II. Classes used to implement Farsight plugins</h1></div></div></div> | |
23 | <a name="id543967"></a>Part II. Classes used to implement Farsight plugins</h1></div></div></div> | |
24 | 24 | <div class="toc"> |
25 | 25 | <p><b>Table of Contents</b></p> |
26 | 26 | <dl> |
60 | 60 | $(top_builddir)/transmitters/shm/libshm-transmitter.la \ |
61 | 61 | $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \ |
62 | 62 | $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \ |
63 | $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \ | |
63 | 64 | $(top_builddir)/gst/funnel/libfsfunnel.la \ |
64 | 65 | $(top_builddir)/gst/videoanyrate/libfsvideoanyrate.la |
65 | 66 | |
82 | 83 | $(top_srcdir)/gst/fsrtpconference/fs-rtp-session.h \ |
83 | 84 | $(top_srcdir)/gst/fsrtpconference/fs-rtp-stream.h \ |
84 | 85 | $(top_srcdir)/gst/fsrtpconference/fs-rtp-participant.h \ |
86 | $(top_srcdir)/gst/fsrawconference/fs-raw-conference.h \ | |
87 | $(top_srcdir)/gst/fsrawconference/fs-raw-session.h \ | |
88 | $(top_srcdir)/gst/fsrawconference/fs-raw-stream.h \ | |
89 | $(top_srcdir)/gst/fsrawconference/fs-raw-participant.h \ | |
85 | 90 | $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-recv-conference.h \ |
86 | 91 | $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-send-conference.h \ |
87 | 92 | $(top_srcdir)/gst/fsmsnconference/fs-msn-conference.h \ |
122 | 127 | GTKDOC_LIBS = \ |
123 | 128 | $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \ |
124 | 129 | $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \ |
130 | $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \ | |
125 | 131 | $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \ |
126 | 132 | $(GST_BASE_LIBS) |
127 | 133 |
334 | 334 | $(top_builddir)/transmitters/shm/libshm-transmitter.la \ |
335 | 335 | $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \ |
336 | 336 | $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \ |
337 | $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \ | |
337 | 338 | $(top_builddir)/gst/funnel/libfsfunnel.la \ |
338 | 339 | $(top_builddir)/gst/videoanyrate/libfsvideoanyrate.la |
339 | 340 | |
356 | 357 | $(top_srcdir)/gst/fsrtpconference/fs-rtp-session.h \ |
357 | 358 | $(top_srcdir)/gst/fsrtpconference/fs-rtp-stream.h \ |
358 | 359 | $(top_srcdir)/gst/fsrtpconference/fs-rtp-participant.h \ |
360 | $(top_srcdir)/gst/fsrawconference/fs-raw-conference.h \ | |
361 | $(top_srcdir)/gst/fsrawconference/fs-raw-session.h \ | |
362 | $(top_srcdir)/gst/fsrawconference/fs-raw-stream.h \ | |
363 | $(top_srcdir)/gst/fsrawconference/fs-raw-participant.h \ | |
359 | 364 | $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-recv-conference.h \ |
360 | 365 | $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-send-conference.h \ |
361 | 366 | $(top_srcdir)/gst/fsmsnconference/fs-msn-conference.h \ |
396 | 401 | GTKDOC_LIBS = \ |
397 | 402 | $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \ |
398 | 403 | $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \ |
404 | $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \ | |
399 | 405 | $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \ |
400 | 406 | $(GST_BASE_LIBS) |
401 | 407 |
17 | 17 | </bookinfo> |
18 | 18 | |
19 | 19 | <part> |
20 | <title>RTP Plugin</title> | |
20 | <title>Plugins implementing FsConference</title> | |
21 | 21 | <chapter> |
22 | <title>Core interface classes</title> | |
22 | <title>RTP Plugin</title> | |
23 | 23 | <xi:include href="xml/element-fsrtpconference.xml"/> |
24 | 24 | <xi:include href="xml/fs-rtp-participant.xml"/> |
25 | 25 | <xi:include href="xml/fs-rtp-session.xml"/> |
26 | 26 | <xi:include href="xml/fs-rtp-stream.xml"/> |
27 | 27 | </chapter> |
28 | 28 | <chapter> |
29 | <title>Transmitters</title> | |
30 | <xi:include href="xml/fs-rawudp-stream-transmitter.xml"/> | |
31 | <xi:include href="xml/fs-multicast-stream-transmitter.xml"/> | |
32 | <xi:include href="xml/fs-nice-stream-transmitter.xml"/> | |
33 | <xi:include href="xml/fs-shm-stream-transmitter.xml"/> | |
29 | <title>Raw Plugin</title> | |
30 | <xi:include href="xml/element-fsrawconference.xml"/> | |
31 | <xi:include href="xml/fs-raw-participant.xml"/> | |
32 | <xi:include href="xml/fs-raw-session.xml"/> | |
33 | <xi:include href="xml/fs-raw-stream.xml"/> | |
34 | 34 | </chapter> |
35 | </part> | |
36 | ||
37 | <part> | |
38 | <title>MSN plugins</title> | |
39 | 35 | <chapter> |
40 | 36 | <title>MSN Webcam plugin</title> |
41 | 37 | <xi:include href="xml/element-fsmsncamsendconference.xml"/> |
48 | 44 | </part> |
49 | 45 | |
50 | 46 | <part> |
47 | <title>Transmitters</title> | |
48 | <xi:include href="xml/fs-rawudp-stream-transmitter.xml"/> | |
49 | <xi:include href="xml/fs-multicast-stream-transmitter.xml"/> | |
50 | <xi:include href="xml/fs-nice-stream-transmitter.xml"/> | |
51 | <xi:include href="xml/fs-shm-stream-transmitter.xml"/> | |
52 | </part> | |
53 | ||
54 | <part> | |
51 | 55 | <title>Utility elements</title> |
52 | 56 | <xi:include href="xml/element-fsfunnel.xml"/> |
53 | 57 | <xi:include href="xml/element-fsvideoanyrate.xml"/> |
44 | 44 | <SUBSECTION Private> |
45 | 45 | fs_codec_to_gst_caps |
46 | 46 | fs_rtp_conference_is_internal_thread |
47 | codecs_copy_with_new_ptime | |
47 | fs_codec_to_gst_caps_with_ptime | |
48 | 48 | </SECTION> |
49 | 49 | |
50 | 50 | <SECTION> |
426 | 426 | FsMsnCamSendConferencePrivate |
427 | 427 | fs_msn_cam_send_conference_get_type |
428 | 428 | </SECTION> |
429 | ||
430 | ||
431 | <SECTION> | |
432 | <FILE>element-fsrawconference</FILE> | |
433 | <TITLE>FsRawConference</TITLE> | |
434 | FsRawConference | |
435 | <SUBSECTION Standard> | |
436 | FS_IS_RAW_CONFERENCE | |
437 | FS_IS_RAW_CONFERENCE_CLASS | |
438 | FS_RAW_CONFERENCE | |
439 | FS_RAW_CONFERENCE_CAST | |
440 | FS_RAW_CONFERENCE_CLASS | |
441 | FS_RAW_CONFERENCE_GET_CLASS | |
442 | FS_TYPE_RAW_CONFERENCE | |
443 | FsRawConferenceClass | |
444 | FsRawConferencePrivate | |
445 | fs_raw_conference_get_type | |
446 | <SUBSECTION Private> | |
447 | fs_raw_conference_is_internal_thread | |
448 | </SECTION> | |
449 | ||
450 | <SECTION> | |
451 | <FILE>fs-raw-session</FILE> | |
452 | <TITLE>FsRawSession</TITLE> | |
453 | FsRawSession | |
454 | <SUBSECTION Standard> | |
455 | FS_IS_RAW_SESSION | |
456 | FS_IS_RAW_SESSION_CLASS | |
457 | FS_RAW_SESSION | |
458 | FS_RAW_SESSION_CAST | |
459 | FS_RAW_SESSION_CLASS | |
460 | FS_RAW_SESSION_GET_CLASS | |
461 | FS_TYPE_RAW_SESSION | |
462 | FsRawSessionClass | |
463 | FsRawSessionPrivate | |
464 | fs_raw_session_get_type | |
465 | <SUBSECTION Private> | |
466 | fs_raw_session_new | |
467 | raw_session_remove_stream | |
468 | </SECTION> | |
469 | ||
470 | ||
471 | <SECTION> | |
472 | <FILE>fs-raw-stream</FILE> | |
473 | <TITLE>FsRawStream</TITLE> | |
474 | FsRawStream | |
475 | <SUBSECTION Standard> | |
476 | FS_IS_RAW_STREAM | |
477 | FS_IS_RAW_STREAM_CLASS | |
478 | FS_RAW_STREAM | |
479 | FS_RAW_STREAM_CAST | |
480 | FS_RAW_STREAM_CLASS | |
481 | FS_RAW_STREAM_GET_CLASS | |
482 | FS_TYPE_RAW_STREAM | |
483 | FsRawStreamClass | |
484 | FsRawStreamPrivate | |
485 | fs_raw_stream_get_type | |
486 | <SUBSECTION Private> | |
487 | fs_raw_stream_new | |
488 | fs_raw_stream_set_remote_candidate | |
489 | </SECTION> | |
490 | ||
491 | <SECTION> | |
492 | <FILE>fs-raw-participant</FILE> | |
493 | <TITLE>FsRawParticipant</TITLE> | |
494 | FsRawParticipant | |
495 | <SUBSECTION Standard> | |
496 | FS_IS_RAW_PARTICIPANT | |
497 | FS_IS_RAW_PARTICIPANT_CLASS | |
498 | FS_RAW_PARTICIPANT | |
499 | FS_RAW_PARTICIPANT_CAST | |
500 | FS_RAW_PARTICIPANT_CLASS | |
501 | FS_RAW_PARTICIPANT_GET_CLASS | |
502 | FS_TYPE_RAW_PARTICIPANT | |
503 | FsRawParticipantClass | |
504 | FsRawParticipantPrivate | |
505 | fs_raw_participant_get_type | |
506 | <SUBSECTION Private> | |
507 | fs_raw_participant_new | |
508 | </SECTION> |
78 | 78 | </ARG> |
79 | 79 | |
80 | 80 | <ARG> |
81 | <NAME>FsRtcpFilter::sending</NAME> | |
82 | <TYPE>gboolean</TYPE> | |
83 | <RANGE></RANGE> | |
84 | <FLAGS>rw</FLAGS> | |
85 | <NICK>Sending RTP?</NICK> | |
86 | <BLURB>If set to FALSE, it assumes that all RTP has been dropped.</BLURB> | |
87 | <DEFAULT>FALSE</DEFAULT> | |
88 | </ARG> | |
89 | ||
90 | <ARG> | |
81 | 91 | <NAME>FsRtpSession::no-rtcp-timeout</NAME> |
82 | 92 | <TYPE>gint</TYPE> |
83 | 93 | <RANGE>>= G_MAXULONG</RANGE> |
85 | 95 | <NICK>The timeout (in ms) before no RTCP is assumed</NICK> |
86 | 96 | <BLURB>This is the time (in ms) after which data received without RTCP is attached the FsStream, this only works if there is only one FsStream. -1 will wait forever. 0 will not wait for RTCP and attach it immediataly to the FsStream and prohibit the creation of a second FsStream.</BLURB> |
87 | 97 | <DEFAULT>7000</DEFAULT> |
88 | </ARG> | |
89 | ||
90 | <ARG> | |
91 | <NAME>FsRtpSession::conference</NAME> | |
92 | <TYPE>FsRtpConference*</TYPE> | |
93 | <RANGE></RANGE> | |
94 | <FLAGS>rwX</FLAGS> | |
95 | <NICK>The Conference this stream refers to</NICK> | |
96 | <BLURB>This is a convience pointer for the Conference.</BLURB> | |
97 | <DEFAULT></DEFAULT> | |
98 | 98 | </ARG> |
99 | 99 | |
100 | 100 | <ARG> |
118 | 118 | </ARG> |
119 | 119 | |
120 | 120 | <ARG> |
121 | <NAME>FsRawUdpStreamTransmitter::stun-ip</NAME> | |
122 | <TYPE>gchar*</TYPE> | |
123 | <RANGE></RANGE> | |
124 | <FLAGS>rwX</FLAGS> | |
125 | <NICK>The IP address of the STUN server</NICK> | |
126 | <BLURB>The IPv4 address of the STUN server as a x.x.x.x string.</BLURB> | |
127 | <DEFAULT>NULL</DEFAULT> | |
128 | </ARG> | |
129 | ||
130 | <ARG> | |
131 | <NAME>FsRawUdpStreamTransmitter::stun-port</NAME> | |
132 | <TYPE>guint</TYPE> | |
133 | <RANGE>[1,65535]</RANGE> | |
134 | <FLAGS>rwX</FLAGS> | |
135 | <NICK>The port of the STUN server</NICK> | |
136 | <BLURB>The IPv4 UDP port of the STUN server as a .</BLURB> | |
137 | <DEFAULT>3478</DEFAULT> | |
138 | </ARG> | |
139 | ||
140 | <ARG> | |
141 | <NAME>FsRawUdpStreamTransmitter::stun-timeout</NAME> | |
142 | <TYPE>guint</TYPE> | |
143 | <RANGE>>= 1</RANGE> | |
144 | <FLAGS>rwX</FLAGS> | |
145 | <NICK>The timeout for the STUN reply</NICK> | |
146 | <BLURB>How long to wait for for the STUN reply (in seconds) before giving up.</BLURB> | |
147 | <DEFAULT>30</DEFAULT> | |
148 | </ARG> | |
149 | ||
150 | <ARG> | |
151 | <NAME>FsRawUdpStreamTransmitter::upnp-discovery</NAME> | |
152 | <TYPE>gboolean</TYPE> | |
153 | <RANGE></RANGE> | |
154 | <FLAGS>rwX</FLAGS> | |
155 | <NICK>Try to use UPnP to find the external IP address</NICK> | |
156 | <BLURB>Tries to discovery the external IP with UPnP if stun fails.</BLURB> | |
157 | <DEFAULT>TRUE</DEFAULT> | |
158 | </ARG> | |
159 | ||
160 | <ARG> | |
161 | <NAME>FsRawUdpStreamTransmitter::upnp-discovery-timeout</NAME> | |
162 | <TYPE>guint</TYPE> | |
163 | <RANGE></RANGE> | |
164 | <FLAGS>rwX</FLAGS> | |
165 | <NICK>Timeout after which UPnP discovery fails</NICK> | |
166 | <BLURB>After this period, UPnP discovery is considered to have failed and the local IP is returned.</BLURB> | |
167 | <DEFAULT>10</DEFAULT> | |
168 | </ARG> | |
169 | ||
170 | <ARG> | |
171 | <NAME>FsRawUdpStreamTransmitter::upnp-mapping</NAME> | |
172 | <TYPE>gboolean</TYPE> | |
173 | <RANGE></RANGE> | |
174 | <FLAGS>rwX</FLAGS> | |
175 | <NICK>Try to map ports using UPnP</NICK> | |
176 | <BLURB>Tries to map ports using UPnP if enabled.</BLURB> | |
177 | <DEFAULT>TRUE</DEFAULT> | |
178 | </ARG> | |
179 | ||
180 | <ARG> | |
181 | <NAME>FsRawUdpStreamTransmitter::upnp-mapping-timeout</NAME> | |
182 | <TYPE>guint</TYPE> | |
183 | <RANGE></RANGE> | |
184 | <FLAGS>rwX</FLAGS> | |
185 | <NICK>Timeout after which UPnP mappings expire</NICK> | |
186 | <BLURB>The UPnP port mappings expire after this period if the app has crashed (in seconds).</BLURB> | |
187 | <DEFAULT>600</DEFAULT> | |
188 | </ARG> | |
189 | ||
190 | <ARG> | |
191 | <NAME>FsRawUdpStreamTransmitter::upnp-request-timeout</NAME> | |
192 | <TYPE>guint</TYPE> | |
193 | <RANGE>[1,600]</RANGE> | |
194 | <FLAGS>rwX</FLAGS> | |
195 | <NICK>Timeout after which UPnP requests timeout</NICK> | |
196 | <BLURB>After this delay, UPnP requests fails.</BLURB> | |
197 | <DEFAULT>10</DEFAULT> | |
198 | </ARG> | |
199 | ||
200 | <ARG> | |
201 | <NAME>FsMsnConference::local-address</NAME> | |
202 | <TYPE>gchar*</TYPE> | |
121 | <NAME>FsRtpSession::rtp-header-extension-preferences</NAME> | |
122 | <TYPE>FsRtpHeaderExtensionGList*</TYPE> | |
203 | 123 | <RANGE></RANGE> |
204 | 124 | <FLAGS>rw</FLAGS> |
205 | <NICK>Msn Address</NICK> | |
206 | <BLURB>The local contact address for the MSN sessions.</BLURB> | |
207 | <DEFAULT>NULL</DEFAULT> | |
208 | </ARG> | |
209 | ||
210 | <ARG> | |
211 | <NAME>FsNiceStreamTransmitter::compatibility-mode</NAME> | |
212 | <TYPE>guint</TYPE> | |
213 | <RANGE><= 3</RANGE> | |
214 | <FLAGS>wX</FLAGS> | |
215 | <NICK>The compability-mode</NICK> | |
216 | <BLURB>The id of the stream according to libnice.</BLURB> | |
217 | <DEFAULT>0</DEFAULT> | |
218 | </ARG> | |
219 | ||
220 | <ARG> | |
221 | <NAME>FsNiceStreamTransmitter::controlling-mode</NAME> | |
222 | <TYPE>gboolean</TYPE> | |
223 | <RANGE></RANGE> | |
224 | <FLAGS>rwx</FLAGS> | |
225 | <NICK>ICE controlling mode</NICK> | |
226 | <BLURB>Whether the agent is in controlling mode.</BLURB> | |
227 | <DEFAULT>TRUE</DEFAULT> | |
228 | </ARG> | |
229 | ||
230 | <ARG> | |
231 | <NAME>FsNiceStreamTransmitter::debug</NAME> | |
232 | <TYPE>gboolean</TYPE> | |
233 | <RANGE></RANGE> | |
234 | <FLAGS>w</FLAGS> | |
235 | <NICK>Enable debug messages</NICK> | |
236 | <BLURB>Whether the agent should enable libnice and stun debug messages.</BLURB> | |
237 | <DEFAULT>FALSE</DEFAULT> | |
238 | </ARG> | |
239 | ||
240 | <ARG> | |
241 | <NAME>FsNiceStreamTransmitter::relay-info</NAME> | |
242 | <TYPE>GValueArray*</TYPE> | |
243 | <RANGE></RANGE> | |
244 | <FLAGS>wX</FLAGS> | |
245 | <NICK>Information for the TURN server</NICK> | |
246 | <BLURB>ip/port/username/password/component of the TURN servers in a GValueArray of GstStructures .</BLURB> | |
125 | <NICK>Desired RTP header extensions</NICK> | |
126 | <BLURB>GList of RTP Header extensions that are locally supported and desired by the application.</BLURB> | |
247 | 127 | <DEFAULT></DEFAULT> |
248 | 128 | </ARG> |
249 | 129 | |
250 | 130 | <ARG> |
251 | <NAME>FsNiceStreamTransmitter::stream-id</NAME> | |
252 | <TYPE>guint</TYPE> | |
253 | <RANGE><= G_MAXINT</RANGE> | |
131 | <NAME>FsRtpSession::rtp-header-extensions</NAME> | |
132 | <TYPE>FsRtpHeaderExtensionGList*</TYPE> | |
133 | <RANGE></RANGE> | |
254 | 134 | <FLAGS>r</FLAGS> |
255 | <NICK>The id of the stream</NICK> | |
256 | <BLURB>The id of the stream according to libnice.</BLURB> | |
257 | <DEFAULT>0</DEFAULT> | |
258 | </ARG> | |
259 | ||
260 | <ARG> | |
261 | <NAME>FsNiceStreamTransmitter::stun-ip</NAME> | |
262 | <TYPE>gchar*</TYPE> | |
263 | <RANGE></RANGE> | |
264 | <FLAGS>rwX</FLAGS> | |
265 | <NICK>STUN server</NICK> | |
266 | <BLURB>The STUN server used to obtain server-reflexive candidates.</BLURB> | |
267 | <DEFAULT>NULL</DEFAULT> | |
268 | </ARG> | |
269 | ||
270 | <ARG> | |
271 | <NAME>FsNiceStreamTransmitter::stun-port</NAME> | |
272 | <TYPE>guint</TYPE> | |
273 | <RANGE>[1,65536]</RANGE> | |
274 | <FLAGS>rwX</FLAGS> | |
275 | <NICK>STUN server port</NICK> | |
276 | <BLURB>The STUN server used to obtain server-reflexive candidates.</BLURB> | |
277 | <DEFAULT>3478</DEFAULT> | |
278 | </ARG> | |
279 | ||
280 | <ARG> | |
281 | <NAME>FsRtcpFilter::sending</NAME> | |
282 | <TYPE>gboolean</TYPE> | |
283 | <RANGE></RANGE> | |
284 | <FLAGS>rw</FLAGS> | |
285 | <NICK>Sending RTP?</NICK> | |
286 | <BLURB>If set to FALSE, it assumes that all RTP has been dropped.</BLURB> | |
287 | <DEFAULT>FALSE</DEFAULT> | |
135 | <NICK>Currently negotiated RTP header extensions</NICK> | |
136 | <BLURB>GList of RTP Header extensions that have been negotiated and will be used when sending of receiving RTP packets.</BLURB> | |
137 | <DEFAULT></DEFAULT> | |
288 | 138 | </ARG> |
289 | 139 | |
290 | 140 | <ARG> |
298 | 148 | </ARG> |
299 | 149 | |
300 | 150 | <ARG> |
301 | <NAME>FsMsnSession::conference</NAME> | |
302 | <TYPE>FsMsnConference*</TYPE> | |
151 | <NAME>FsRtpStream::rtp-header-extensions</NAME> | |
152 | <TYPE>FsRtpHeaderExtensionGList*</TYPE> | |
303 | 153 | <RANGE></RANGE> |
304 | <FLAGS>rwX</FLAGS> | |
305 | <NICK>The Conference this stream refers to</NICK> | |
306 | <BLURB>This is a convience pointer for the Conference.</BLURB> | |
154 | <FLAGS>rw</FLAGS> | |
155 | <NICK>RTP Header extension desired by participant in this stream</NICK> | |
156 | <BLURB>GList of RTP Header extensions that the participant for this stream would like to use.</BLURB> | |
307 | 157 | <DEFAULT></DEFAULT> |
308 | </ARG> | |
309 | ||
310 | <ARG> | |
311 | <NAME>FsMsnStream::conference</NAME> | |
312 | <TYPE>FsMsnConference*</TYPE> | |
313 | <RANGE></RANGE> | |
314 | <FLAGS>rwX</FLAGS> | |
315 | <NICK>The Conference this stream refers to</NICK> | |
316 | <BLURB>This is a conveniance pointer for the Conference.</BLURB> | |
317 | <DEFAULT></DEFAULT> | |
318 | </ARG> | |
319 | ||
320 | <ARG> | |
321 | <NAME>FsMsnStream::initial-port</NAME> | |
322 | <TYPE>guint</TYPE> | |
323 | <RANGE>[1025,65535]</RANGE> | |
324 | <FLAGS>rwX</FLAGS> | |
325 | <NICK>The initial port to listen on</NICK> | |
326 | <BLURB>The initial port to try to listen on for incoming connection. If already used, port+1 is tried until one succeeds.</BLURB> | |
327 | <DEFAULT>1025</DEFAULT> | |
328 | </ARG> | |
329 | ||
330 | <ARG> | |
331 | <NAME>FsMsnStream::session-id</NAME> | |
332 | <TYPE>guint</TYPE> | |
333 | <RANGE>[1000,9999]</RANGE> | |
334 | <FLAGS>rwX</FLAGS> | |
335 | <NICK>The session-id of the session</NICK> | |
336 | <BLURB>This is the session-id of the MSN session.</BLURB> | |
337 | <DEFAULT>9000</DEFAULT> | |
338 | 158 | </ARG> |
339 | 159 | |
340 | 160 | <ARG> |
347 | 167 | <DEFAULT>NULL</DEFAULT> |
348 | 168 | </ARG> |
349 | 169 | |
350 | <ARG> | |
351 | <NAME>GstShmSrc::socket-path</NAME> | |
352 | <TYPE>gchar*</TYPE> | |
353 | <RANGE></RANGE> | |
354 | <FLAGS>rw</FLAGS> | |
355 | <NICK>Path to the control socket</NICK> | |
356 | <BLURB>The path to the control socket used to control the shared memory transport.</BLURB> | |
357 | <DEFAULT>NULL</DEFAULT> | |
358 | </ARG> | |
359 | ||
360 | <ARG> | |
361 | <NAME>GstShmSrc::is-live</NAME> | |
362 | <TYPE>gboolean</TYPE> | |
363 | <RANGE></RANGE> | |
364 | <FLAGS>rw</FLAGS> | |
365 | <NICK>Is this a live source</NICK> | |
366 | <BLURB>True if the element cannot produce data in PAUSED.</BLURB> | |
367 | <DEFAULT>FALSE</DEFAULT> | |
368 | </ARG> | |
369 | ||
370 | <ARG> | |
371 | <NAME>GstShmSink::perms</NAME> | |
372 | <TYPE>guint</TYPE> | |
373 | <RANGE><= 4095</RANGE> | |
374 | <FLAGS>rw</FLAGS> | |
375 | <NICK>Permissions on the shm area</NICK> | |
376 | <BLURB>Permissions to set on the shm area.</BLURB> | |
377 | <DEFAULT>504</DEFAULT> | |
378 | </ARG> | |
379 | ||
380 | <ARG> | |
381 | <NAME>GstShmSink::shm-size</NAME> | |
382 | <TYPE>guint</TYPE> | |
383 | <RANGE></RANGE> | |
384 | <FLAGS>rw</FLAGS> | |
385 | <NICK>Size of the shm area</NICK> | |
386 | <BLURB>Size of the shared memory area.</BLURB> | |
387 | <DEFAULT>262144</DEFAULT> | |
388 | </ARG> | |
389 | ||
390 | <ARG> | |
391 | <NAME>GstShmSink::socket-path</NAME> | |
392 | <TYPE>gchar*</TYPE> | |
393 | <RANGE></RANGE> | |
394 | <FLAGS>rw</FLAGS> | |
395 | <NICK>Path to the control socket</NICK> | |
396 | <BLURB>The path to the control socket used to control the shared memory transport.</BLURB> | |
397 | <DEFAULT>NULL</DEFAULT> | |
398 | </ARG> | |
399 | ||
400 | <ARG> | |
401 | <NAME>GstShmSink::wait-for-connection</NAME> | |
402 | <TYPE>gboolean</TYPE> | |
403 | <RANGE></RANGE> | |
404 | <FLAGS>rw</FLAGS> | |
405 | <NICK>Wait for a connection until rendering</NICK> | |
406 | <BLURB>Block the stream until the shm pipe is connected.</BLURB> | |
407 | <DEFAULT>TRUE</DEFAULT> | |
408 | </ARG> | |
409 | ||
410 | <ARG> | |
411 | <NAME>FsuVideoSink::xid</NAME> | |
412 | <TYPE>gint</TYPE> | |
413 | <RANGE></RANGE> | |
414 | <FLAGS>rw</FLAGS> | |
415 | <NICK>Sink window xid</NICK> | |
416 | <BLURB>The xid of the window in which to embed the video sink.</BLURB> | |
417 | <DEFAULT>0</DEFAULT> | |
418 | </ARG> | |
419 | ||
420 | <ARG> | |
421 | <NAME>FsFecRizzoEnc::fec-caps</NAME> | |
422 | <TYPE>GstCaps*</TYPE> | |
423 | <RANGE></RANGE> | |
424 | <FLAGS>rw</FLAGS> | |
425 | <NICK>FEC caps to use</NICK> | |
426 | <BLURB>FEC caps with encoding-name=x-farsight-reed-solomon-fec.</BLURB> | |
427 | <DEFAULT></DEFAULT> | |
428 | </ARG> | |
429 | ||
430 | <ARG> | |
431 | <NAME>FsFecRizzoEnc::k</NAME> | |
432 | <TYPE>guint</TYPE> | |
433 | <RANGE>>= 1</RANGE> | |
434 | <FLAGS>rw</FLAGS> | |
435 | <NICK>Number of source symbols</NICK> | |
436 | <BLURB>The number of source symbols (packets) for a source block.</BLURB> | |
437 | <DEFAULT>14</DEFAULT> | |
438 | </ARG> | |
439 | ||
440 | <ARG> | |
441 | <NAME>FsFecRizzoEnc::n</NAME> | |
442 | <TYPE>guint</TYPE> | |
443 | <RANGE>>= 1</RANGE> | |
444 | <FLAGS>rw</FLAGS> | |
445 | <NICK>Number of encoding symbols</NICK> | |
446 | <BLURB>The number of encoding symbols (packets) for a source block (k + repair packets).</BLURB> | |
447 | <DEFAULT>16</DEFAULT> | |
448 | </ARG> | |
449 | ||
450 | <ARG> | |
451 | <NAME>FsFecRizzoDec::fec-caps</NAME> | |
452 | <TYPE>GstCaps*</TYPE> | |
453 | <RANGE></RANGE> | |
454 | <FLAGS>rw</FLAGS> | |
455 | <NICK>FEC caps to use</NICK> | |
456 | <BLURB>FEC caps with decoding-name=x-farsight-reed-solomon-fec.</BLURB> | |
457 | <DEFAULT></DEFAULT> | |
458 | </ARG> | |
459 |
1 | 1 | <html> |
2 | 2 | <head> |
3 | 3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
4 | <title>Core interface classes</title> | |
4 | <title>RTP Plugin</title> | |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="pt01.html" title="Part I. RTP Plugin"> | |
8 | <link rel="prev" href="pt01.html" title="Part I. RTP Plugin"> | |
7 | <link rel="up" href="pt01.html" title="Part I. Plugins implementing FsConference"> | |
8 | <link rel="prev" href="pt01.html" title="Part I. Plugins implementing FsConference"> | |
9 | 9 | <link rel="next" href="farsight2-plugins-FsRtpConference.html" title="FsRtpConference"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
18 | 18 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
19 | 19 | <td><a accesskey="n" href="farsight2-plugins-FsRtpConference.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> |
20 | 20 | </tr></table> |
21 | <div class="chapter" title="Core interface classes"> | |
21 | <div class="chapter" title="RTP Plugin"> | |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id428663"></a>Core interface classes</h2></div></div></div> | |
23 | <a name="id386849"></a>RTP Plugin</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl> |
25 | 25 | <dt> |
26 | 26 | <span class="refentrytitle"><a href="farsight2-plugins-FsRtpConference.html">FsRtpConference</a></span><span class="refpurpose"> — Farsight RTP Conference Gstreamer Elements</span> |
1 | 1 | <html> |
2 | 2 | <head> |
3 | 3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
4 | <title>Transmitters</title> | |
4 | <title>Raw Plugin</title> | |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="pt01.html" title="Part I. RTP Plugin"> | |
7 | <link rel="up" href="pt01.html" title="Part I. Plugins implementing FsConference"> | |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsRtpStream.html" title="FsRtpStream"> |
9 | <link rel="next" href="farsight2-plugins-FsRawUdpStreamTransmitter.html" title="FsRawUdpStreamTransmitter"> | |
9 | <link rel="next" href="farsight2-plugins-FsRawConference.html" title="FsRawConference"> | |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
16 | 16 | <td><a accesskey="u" href="pt01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> |
17 | 17 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
18 | 18 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
19 | <td><a accesskey="n" href="farsight2-plugins-FsRawUdpStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
19 | <td><a accesskey="n" href="farsight2-plugins-FsRawConference.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
20 | 20 | </tr></table> |
21 | <div class="chapter" title="Transmitters"> | |
21 | <div class="chapter" title="Raw Plugin"> | |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id433887"></a>Transmitters</h2></div></div></div> | |
23 | <a name="id392075"></a>Raw Plugin</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl> |
25 | 25 | <dt> |
26 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawUdpStreamTransmitter.html">FsRawUdpStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for UDP with STUN</span> | |
26 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawConference.html">FsRawConference</a></span><span class="refpurpose"> — Farsight Raw Conference Gstreamer Elements Base class</span> | |
27 | 27 | </dt> |
28 | 28 | <dt> |
29 | <span class="refentrytitle"><a href="farsight2-plugins-FsMulticastStreamTransmitter.html">FsMulticastStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Multicast UDP</span> | |
29 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawParticipant.html">FsRawParticipant</a></span><span class="refpurpose"> — A Raw participant in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
30 | 30 | </dt> |
31 | 31 | <dt> |
32 | <span class="refentrytitle"><a href="farsight2-plugins-FsNiceStreamTransmitter.html">FsNiceStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for ICE using libnice</span> | |
32 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawSession.html">FsRawSession</a></span><span class="refpurpose"> — A Raw session in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
33 | 33 | </dt> |
34 | 34 | <dt> |
35 | <span class="refentrytitle"><a href="farsight2-plugins-FsShmStreamTransmitter.html">FsShmStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Shared Memory</span> | |
35 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawStream.html">FsRawStream</a></span><span class="refpurpose"> — A raw stream in a <a class="link" href="farsight2-plugins-FsRawSession.html#FsRawSession" title="FsRawSession"><span class="type">FsRawSession</span></a> in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
36 | 36 | </dt> |
37 | 37 | </dl></div> |
38 | 38 | </div> |
4 | 4 | <title>MSN Webcam plugin</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="pt02.html" title="Part II. MSN plugins"> | |
8 | <link rel="prev" href="pt02.html" title="Part II. MSN plugins"> | |
7 | <link rel="up" href="pt01.html" title="Part I. Plugins implementing FsConference"> | |
8 | <link rel="prev" href="farsight2-plugins-FsRawStream.html" title="FsRawStream"> | |
9 | 9 | <link rel="next" href="farsight2-plugins-FsMsnCamSendConference.html" title="FsMsnCamSendConference"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
13 | 13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> |
15 | <td><a accesskey="p" href="pt02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
16 | <td><a accesskey="u" href="pt02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
15 | <td><a accesskey="p" href="farsight2-plugins-FsRawStream.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
16 | <td><a accesskey="u" href="pt01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
17 | 17 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
18 | 18 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
19 | 19 | <td><a accesskey="n" href="farsight2-plugins-FsMsnCamSendConference.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> |
20 | 20 | </tr></table> |
21 | 21 | <div class="chapter" title="MSN Webcam plugin"> |
22 | 22 | <div class="titlepage"><div><div><h2 class="title"> |
23 | <a name="id433918"></a>MSN Webcam plugin</h2></div></div></div> | |
23 | <a name="id392099"></a>MSN Webcam plugin</h2></div></div></div> | |
24 | 24 | <div class="toc"><dl> |
25 | 25 | <dt> |
26 | 26 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnCamSendConference.html">FsMsnCamSendConference</a></span><span class="refpurpose"> — Farsight MSN send Conference Gstreamer Element</span> |
23 | 23 | <a href="#farsight2-plugins-FsMsnConference.synopsis" class="shortcut">Top</a> |
24 | 24 | | |
25 | 25 | <a href="#farsight2-plugins-FsMsnConference.description" class="shortcut">Description</a> |
26 | | | |
27 | <a href="#farsight2-plugins-FsMsnConference.properties" class="shortcut">Properties</a> | |
28 | 26 | </td></tr> |
29 | 27 | </table> |
30 | 28 | <div class="refentry" title="FsMsnConference"> |
39 | 37 | <div class="refsynopsisdiv" title="Synopsis"> |
40 | 38 | <a name="farsight2-plugins-FsMsnConference.synopsis"></a><h2>Synopsis</h2> |
41 | 39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference">FsMsnConference</a>; |
42 | </pre> | |
43 | </div> | |
44 | <div class="refsect1" title="Properties"> | |
45 | <a name="farsight2-plugins-FsMsnConference.properties"></a><h2>Properties</h2> | |
46 | <pre class="synopsis"> | |
47 | "<a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference--local-address" title='The "local-address" property'>local-address</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write | |
48 | 40 | </pre> |
49 | 41 | </div> |
50 | 42 | <div class="refsect1" title="Description"> |
71 | 63 | </p> |
72 | 64 | </div> |
73 | 65 | </div> |
74 | <div class="refsect1" title="Property Details"> | |
75 | <a name="farsight2-plugins-FsMsnConference.property-details"></a><h2>Property Details</h2> | |
76 | <div class="refsect2" title='The "local-address" property'> | |
77 | <a name="FsMsnConference--local-address"></a><h3>The <code class="literal">"local-address"</code> property</h3> | |
78 | <pre class="programlisting"> "local-address" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre> | |
79 | <p>The local contact address for the MSN sessions.</p> | |
80 | <p>Default value: NULL</p> | |
81 | </div> | |
82 | </div> | |
83 | 66 | </div> |
84 | 67 | <div class="footer"> |
85 | 68 | <hr> |
23 | 23 | <a href="#farsight2-plugins-FsMsnSession.synopsis" class="shortcut">Top</a> |
24 | 24 | | |
25 | 25 | <a href="#farsight2-plugins-FsMsnSession.description" class="shortcut">Description</a> |
26 | | | |
27 | <a href="#farsight2-plugins-FsMsnSession.properties" class="shortcut">Properties</a> | |
28 | 26 | </td></tr> |
29 | 27 | </table> |
30 | 28 | <div class="refentry" title="FsMsnSession"> |
39 | 37 | <div class="refsynopsisdiv" title="Synopsis"> |
40 | 38 | <a name="farsight2-plugins-FsMsnSession.synopsis"></a><h2>Synopsis</h2> |
41 | 39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsMsnSession.html#FsMsnSession" title="FsMsnSession">FsMsnSession</a>; |
42 | </pre> | |
43 | </div> | |
44 | <div class="refsect1" title="Properties"> | |
45 | <a name="farsight2-plugins-FsMsnSession.properties"></a><h2>Properties</h2> | |
46 | <pre class="synopsis"> | |
47 | "<a class="link" href="farsight2-plugins-FsMsnSession.html#FsMsnSession--conference" title='The "conference" property'>conference</a>" <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a>* : Read / Write / Construct Only | |
48 | 40 | </pre> |
49 | 41 | </div> |
50 | 42 | <div class="refsect1" title="Description"> |
80 | 72 | </pre> |
81 | 73 | </div> |
82 | 74 | </div> |
83 | <div class="refsect1" title="Property Details"> | |
84 | <a name="farsight2-plugins-FsMsnSession.property-details"></a><h2>Property Details</h2> | |
85 | <div class="refsect2" title='The "conference" property'> | |
86 | <a name="FsMsnSession--conference"></a><h3>The <code class="literal">"conference"</code> property</h3> | |
87 | <pre class="programlisting"> "conference" <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a>* : Read / Write / Construct Only</pre> | |
88 | <p>This is a convience pointer for the Conference.</p> | |
89 | </div> | |
90 | </div> | |
91 | 75 | </div> |
92 | 76 | <div class="footer"> |
93 | 77 | <hr> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | 7 | <link rel="up" href="ch03.html" title="MSN Webcam plugin"> |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsMsnSession.html" title="FsMsnSession"> |
9 | <link rel="next" href="pt03.html" title="Part III. Utility elements"> | |
9 | <link rel="next" href="pt02.html" title="Part II. Transmitters"> | |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
17 | 17 | <td><a accesskey="u" href="ch03.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> |
18 | 18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
19 | 19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
20 | <td><a accesskey="n" href="pt03.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
20 | <td><a accesskey="n" href="pt02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | 21 | </tr> |
22 | 22 | <tr><td colspan="5" class="shortcuts"> |
23 | 23 | <a href="#farsight2-plugins-FsMsnStream.synopsis" class="shortcut">Top</a> |
24 | 24 | | |
25 | 25 | <a href="#farsight2-plugins-FsMsnStream.description" class="shortcut">Description</a> |
26 | | | |
27 | <a href="#farsight2-plugins-FsMsnStream.properties" class="shortcut">Properties</a> | |
28 | 26 | </td></tr> |
29 | 27 | </table> |
30 | 28 | <div class="refentry" title="FsMsnStream"> |
39 | 37 | <div class="refsynopsisdiv" title="Synopsis"> |
40 | 38 | <a name="farsight2-plugins-FsMsnStream.synopsis"></a><h2>Synopsis</h2> |
41 | 39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsMsnStream.html#FsMsnStream" title="FsMsnStream">FsMsnStream</a>; |
42 | </pre> | |
43 | </div> | |
44 | <div class="refsect1" title="Properties"> | |
45 | <a name="farsight2-plugins-FsMsnStream.properties"></a><h2>Properties</h2> | |
46 | <pre class="synopsis"> | |
47 | "<a class="link" href="farsight2-plugins-FsMsnStream.html#FsMsnStream--conference" title='The "conference" property'>conference</a>" <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a>* : Read / Write / Construct Only | |
48 | "<a class="link" href="farsight2-plugins-FsMsnStream.html#FsMsnStream--initial-port" title='The "initial-port" property'>initial-port</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
49 | "<a class="link" href="farsight2-plugins-FsMsnStream.html#FsMsnStream--session-id" title='The "session-id" property'>session-id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
50 | 40 | </pre> |
51 | 41 | </div> |
52 | 42 | <div class="refsect1" title="Description"> |
80 | 70 | </pre> |
81 | 71 | </div> |
82 | 72 | </div> |
83 | <div class="refsect1" title="Property Details"> | |
84 | <a name="farsight2-plugins-FsMsnStream.property-details"></a><h2>Property Details</h2> | |
85 | <div class="refsect2" title='The "conference" property'> | |
86 | <a name="FsMsnStream--conference"></a><h3>The <code class="literal">"conference"</code> property</h3> | |
87 | <pre class="programlisting"> "conference" <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a>* : Read / Write / Construct Only</pre> | |
88 | <p>This is a conveniance pointer for the Conference.</p> | |
89 | </div> | |
90 | <hr> | |
91 | <div class="refsect2" title='The "initial-port" property'> | |
92 | <a name="FsMsnStream--initial-port"></a><h3>The <code class="literal">"initial-port"</code> property</h3> | |
93 | <pre class="programlisting"> "initial-port" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
94 | <p>The initial port to try to listen on for incoming connection. If already used, port+1 is tried until one succeeds.</p> | |
95 | <p>Allowed values: [1025,65535]</p> | |
96 | <p>Default value: 1025</p> | |
97 | </div> | |
98 | <hr> | |
99 | <div class="refsect2" title='The "session-id" property'> | |
100 | <a name="FsMsnStream--session-id"></a><h3>The <code class="literal">"session-id"</code> property</h3> | |
101 | <pre class="programlisting"> "session-id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
102 | <p>This is the session-id of the MSN session.</p> | |
103 | <p>Allowed values: [1000,9999]</p> | |
104 | <p>Default value: 9000</p> | |
105 | </div> | |
106 | </div> | |
107 | 73 | </div> |
108 | 74 | <div class="footer"> |
109 | 75 | <hr> |
4 | 4 | <title>FsMulticastStreamTransmitter</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch02.html" title="Transmitters"> | |
7 | <link rel="up" href="pt02.html" title="Part II. Transmitters"> | |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsRawUdpStreamTransmitter.html" title="FsRawUdpStreamTransmitter"> |
9 | 9 | <link rel="next" href="farsight2-plugins-FsNiceStreamTransmitter.html" title="FsNiceStreamTransmitter"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> |
15 | 15 | <tr valign="middle"> |
16 | 16 | <td><a accesskey="p" href="farsight2-plugins-FsRawUdpStreamTransmitter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
17 | <td><a accesskey="u" href="pt02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | 18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
19 | 19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
20 | 20 | <td><a accesskey="n" href="farsight2-plugins-FsNiceStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> |
4 | 4 | <title>FsNiceStreamTransmitter</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch02.html" title="Transmitters"> | |
7 | <link rel="up" href="pt02.html" title="Part II. Transmitters"> | |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsMulticastStreamTransmitter.html" title="FsMulticastStreamTransmitter"> |
9 | 9 | <link rel="next" href="farsight2-plugins-FsShmStreamTransmitter.html" title="FsShmStreamTransmitter"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> |
15 | 15 | <tr valign="middle"> |
16 | 16 | <td><a accesskey="p" href="farsight2-plugins-FsMulticastStreamTransmitter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
17 | <td><a accesskey="u" href="pt02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | 18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
19 | 19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
20 | 20 | <td><a accesskey="n" href="farsight2-plugins-FsShmStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> |
23 | 23 | <a href="#farsight2-plugins-FsNiceStreamTransmitter.synopsis" class="shortcut">Top</a> |
24 | 24 | | |
25 | 25 | <a href="#farsight2-plugins-FsNiceStreamTransmitter.description" class="shortcut">Description</a> |
26 | | | |
27 | <a href="#farsight2-plugins-FsNiceStreamTransmitter.properties" class="shortcut">Properties</a> | |
28 | 26 | </td></tr> |
29 | 27 | </table> |
30 | 28 | <div class="refentry" title="FsNiceStreamTransmitter"> |
39 | 37 | <div class="refsynopsisdiv" title="Synopsis"> |
40 | 38 | <a name="farsight2-plugins-FsNiceStreamTransmitter.synopsis"></a><h2>Synopsis</h2> |
41 | 39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter" title="FsNiceStreamTransmitter">FsNiceStreamTransmitter</a>; |
42 | </pre> | |
43 | </div> | |
44 | <div class="refsect1" title="Properties"> | |
45 | <a name="farsight2-plugins-FsNiceStreamTransmitter.properties"></a><h2>Properties</h2> | |
46 | <pre class="synopsis"> | |
47 | "<a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--compatibility-mode" title='The "compatibility-mode" property'>compatibility-mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Write / Construct Only | |
48 | "<a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--controlling-mode" title='The "controlling-mode" property'>controlling-mode</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct | |
49 | "<a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--debug" title='The "debug" property'>debug</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Write | |
50 | "<a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--relay-info" title='The "relay-info" property'>relay-info</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>* : Write / Construct Only | |
51 | "<a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stream-id" title='The "stream-id" property'>stream-id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read | |
52 | "<a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-ip" title='The "stun-ip" property'>stun-ip</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only | |
53 | "<a class="link" href="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-port" title='The "stun-port" property'>stun-port</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
54 | 40 | </pre> |
55 | 41 | </div> |
56 | 42 | <div class="refsect1" title="Description"> |
77 | 63 | </table></div> |
78 | 64 | </div> |
79 | 65 | </div> |
80 | <div class="refsect1" title="Property Details"> | |
81 | <a name="farsight2-plugins-FsNiceStreamTransmitter.property-details"></a><h2>Property Details</h2> | |
82 | <div class="refsect2" title='The "compatibility-mode" property'> | |
83 | <a name="FsNiceStreamTransmitter--compatibility-mode"></a><h3>The <code class="literal">"compatibility-mode"</code> property</h3> | |
84 | <pre class="programlisting"> "compatibility-mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Write / Construct Only</pre> | |
85 | <p>The id of the stream according to libnice.</p> | |
86 | <p>Allowed values: <= 3</p> | |
87 | <p>Default value: 0</p> | |
88 | </div> | |
89 | <hr> | |
90 | <div class="refsect2" title='The "controlling-mode" property'> | |
91 | <a name="FsNiceStreamTransmitter--controlling-mode"></a><h3>The <code class="literal">"controlling-mode"</code> property</h3> | |
92 | <pre class="programlisting"> "controlling-mode" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre> | |
93 | <p>Whether the agent is in controlling mode.</p> | |
94 | <p>Default value: TRUE</p> | |
95 | </div> | |
96 | <hr> | |
97 | <div class="refsect2" title='The "debug" property'> | |
98 | <a name="FsNiceStreamTransmitter--debug"></a><h3>The <code class="literal">"debug"</code> property</h3> | |
99 | <pre class="programlisting"> "debug" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Write</pre> | |
100 | <p>Whether the agent should enable libnice and stun debug messages.</p> | |
101 | <p>Default value: FALSE</p> | |
102 | </div> | |
103 | <hr> | |
104 | <div class="refsect2" title='The "relay-info" property'> | |
105 | <a name="FsNiceStreamTransmitter--relay-info"></a><h3>The <code class="literal">"relay-info"</code> property</h3> | |
106 | <pre class="programlisting"> "relay-info" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>* : Write / Construct Only</pre> | |
107 | <p> | |
108 | This is a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> containing one or more <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a>. | |
109 | </p> | |
110 | <p> | |
111 | The fields in the structure are: | |
112 | </p> | |
113 | <table id="id500976"> | |
114 | <tr><th colspan="2">Required</th></tr> | |
115 | <tr> | |
116 | <td nowrap>(gchar*)</td> | |
117 | <td nowrap>ip</td> | |
118 | <td>The IP address of the TURN server</td> | |
119 | </tr> | |
120 | <tr> | |
121 | <td nowrap>(guint)</td> | |
122 | <td nowrap>port</td> | |
123 | <td>The port of the TURN server</td> | |
124 | </tr> | |
125 | <tr> | |
126 | <td nowrap>(gchar*)</td> | |
127 | <td nowrap>username</td> | |
128 | </tr> | |
129 | <tr> | |
130 | <td nowrap>(gchar*)</td> | |
131 | <td nowrap>password</td> | |
132 | </tr> | |
133 | <tr><th colspan="2">Optional</th></tr> | |
134 | <tr> | |
135 | <td nowrap>(gchar *)</td> | |
136 | <td nowrap>relay-type</td> | |
137 | <td>The type of TURN server, can use "udp", "tcp" or "tls". | |
138 | Defaults to "udp" if not specified.</td> | |
139 | </tr> | |
140 | <tr> | |
141 | <td nowrap>(guint)</td> | |
142 | <td nowrap>component</td> | |
143 | <td>The component this TURN server and creditials will be used for. | |
144 | If no component is specified, it will be used for all components where | |
145 | no per-component details were specified. | |
146 | This is useful if you want to specify different short term creditial | |
147 | username/password combinations for Google and MSN compatibility modes. | |
148 | </td> | |
149 | </tr> | |
150 | </table> | |
151 | <p> | |
152 | </p> | |
153 | </div> | |
154 | <hr> | |
155 | <div class="refsect2" title='The "stream-id" property'> | |
156 | <a name="FsNiceStreamTransmitter--stream-id"></a><h3>The <code class="literal">"stream-id"</code> property</h3> | |
157 | <pre class="programlisting"> "stream-id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre> | |
158 | <p>The id of the stream according to libnice.</p> | |
159 | <p>Allowed values: <= G_MAXINT</p> | |
160 | <p>Default value: 0</p> | |
161 | </div> | |
162 | <hr> | |
163 | <div class="refsect2" title='The "stun-ip" property'> | |
164 | <a name="FsNiceStreamTransmitter--stun-ip"></a><h3>The <code class="literal">"stun-ip"</code> property</h3> | |
165 | <pre class="programlisting"> "stun-ip" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> | |
166 | <p>The STUN server used to obtain server-reflexive candidates.</p> | |
167 | <p>Default value: NULL</p> | |
168 | </div> | |
169 | <hr> | |
170 | <div class="refsect2" title='The "stun-port" property'> | |
171 | <a name="FsNiceStreamTransmitter--stun-port"></a><h3>The <code class="literal">"stun-port"</code> property</h3> | |
172 | <pre class="programlisting"> "stun-port" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
173 | <p>The STUN server used to obtain server-reflexive candidates.</p> | |
174 | <p>Allowed values: [1,65536]</p> | |
175 | <p>Default value: 3478</p> | |
176 | </div> | |
177 | </div> | |
178 | 66 | <div class="refsect1" title="See Also"> |
179 | 67 | <a name="farsight2-plugins-FsNiceStreamTransmitter.see-also"></a><h2>See Also</h2> |
180 | 68 | <a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter" title="FsRawUdpStreamTransmitter"><span class="type">FsRawUdpStreamTransmitter</span></a> |
0 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
1 | <html> | |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
4 | <title>FsRawConference</title> | |
5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> | |
6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> | |
7 | <link rel="up" href="ch02.html" title="Raw Plugin"> | |
8 | <link rel="prev" href="ch02.html" title="Raw Plugin"> | |
9 | <link rel="next" href="farsight2-plugins-FsRawParticipant.html" title="FsRawParticipant"> | |
10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> | |
11 | <link rel="stylesheet" href="style.css" type="text/css"> | |
12 | </head> | |
13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> | |
15 | <tr valign="middle"> | |
16 | <td><a accesskey="p" href="ch02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> | |
19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> | |
20 | <td><a accesskey="n" href="farsight2-plugins-FsRawParticipant.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | </tr> | |
22 | <tr><td colspan="5" class="shortcuts"> | |
23 | <a href="#farsight2-plugins-FsRawConference.synopsis" class="shortcut">Top</a> | |
24 | | | |
25 | <a href="#farsight2-plugins-FsRawConference.description" class="shortcut">Description</a> | |
26 | </td></tr> | |
27 | </table> | |
28 | <div class="refentry" title="FsRawConference"> | |
29 | <a name="farsight2-plugins-FsRawConference"></a><div class="titlepage"></div> | |
30 | <div class="refnamediv"><table width="100%"><tr> | |
31 | <td valign="top"> | |
32 | <h2><span class="refentrytitle"><a name="farsight2-plugins-FsRawConference.top_of_page"></a>FsRawConference</span></h2> | |
33 | <p>FsRawConference — Farsight Raw Conference Gstreamer Elements Base class</p> | |
34 | </td> | |
35 | <td valign="top" align="right"></td> | |
36 | </tr></table></div> | |
37 | <div class="refsynopsisdiv" title="Synopsis"> | |
38 | <a name="farsight2-plugins-FsRawConference.synopsis"></a><h2>Synopsis</h2> | |
39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference">FsRawConference</a>; | |
40 | </pre> | |
41 | </div> | |
42 | <div class="refsect1" title="Description"> | |
43 | <a name="farsight2-plugins-FsRawConference.description"></a><h2>Description</h2> | |
44 | <p> | |
45 | This element implements a raw content stream over which any Gstreamer | |
46 | content may travel. | |
47 | </p> | |
48 | </div> | |
49 | <div class="refsect1" title="Details"> | |
50 | <a name="farsight2-plugins-FsRawConference.details"></a><h2>Details</h2> | |
51 | <div class="refsect2" title="FsRawConference"> | |
52 | <a name="FsRawConference"></a><h3>FsRawConference</h3> | |
53 | <pre class="programlisting">typedef struct { | |
54 | FsBaseConference parent; | |
55 | } FsRawConference; | |
56 | </pre> | |
57 | <p> | |
58 | </p> | |
59 | </div> | |
60 | </div> | |
61 | </div> | |
62 | <div class="footer"> | |
63 | <hr> | |
64 | Generated by GTK-Doc V1.15</div> | |
65 | </body> | |
66 | </html>⏎ |
0 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
1 | <html> | |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
4 | <title>FsRawParticipant</title> | |
5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> | |
6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> | |
7 | <link rel="up" href="ch02.html" title="Raw Plugin"> | |
8 | <link rel="prev" href="farsight2-plugins-FsRawConference.html" title="FsRawConference"> | |
9 | <link rel="next" href="farsight2-plugins-FsRawSession.html" title="FsRawSession"> | |
10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> | |
11 | <link rel="stylesheet" href="style.css" type="text/css"> | |
12 | </head> | |
13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> | |
15 | <tr valign="middle"> | |
16 | <td><a accesskey="p" href="farsight2-plugins-FsRawConference.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> | |
19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> | |
20 | <td><a accesskey="n" href="farsight2-plugins-FsRawSession.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | </tr> | |
22 | <tr><td colspan="5" class="shortcuts"> | |
23 | <a href="#farsight2-plugins-FsRawParticipant.synopsis" class="shortcut">Top</a> | |
24 | | | |
25 | <a href="#farsight2-plugins-FsRawParticipant.description" class="shortcut">Description</a> | |
26 | </td></tr> | |
27 | </table> | |
28 | <div class="refentry" title="FsRawParticipant"> | |
29 | <a name="farsight2-plugins-FsRawParticipant"></a><div class="titlepage"></div> | |
30 | <div class="refnamediv"><table width="100%"><tr> | |
31 | <td valign="top"> | |
32 | <h2><span class="refentrytitle"><a name="farsight2-plugins-FsRawParticipant.top_of_page"></a>FsRawParticipant</span></h2> | |
33 | <p>FsRawParticipant — A Raw participant in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></p> | |
34 | </td> | |
35 | <td valign="top" align="right"></td> | |
36 | </tr></table></div> | |
37 | <div class="refsynopsisdiv" title="Synopsis"> | |
38 | <a name="farsight2-plugins-FsRawParticipant.synopsis"></a><h2>Synopsis</h2> | |
39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsRawParticipant.html#FsRawParticipant" title="FsRawParticipant">FsRawParticipant</a>; | |
40 | </pre> | |
41 | </div> | |
42 | <div class="refsect1" title="Description"> | |
43 | <a name="farsight2-plugins-FsRawParticipant.description"></a><h2>Description</h2> | |
44 | <p> | |
45 | This object represents one participant or person in a raw conference | |
46 | </p> | |
47 | </div> | |
48 | <div class="refsect1" title="Details"> | |
49 | <a name="farsight2-plugins-FsRawParticipant.details"></a><h2>Details</h2> | |
50 | <div class="refsect2" title="FsRawParticipant"> | |
51 | <a name="FsRawParticipant"></a><h3>FsRawParticipant</h3> | |
52 | <pre class="programlisting">typedef struct { | |
53 | FsParticipant parent; | |
54 | FsRawParticipantPrivate *priv; | |
55 | } FsRawParticipant; | |
56 | </pre> | |
57 | </div> | |
58 | </div> | |
59 | </div> | |
60 | <div class="footer"> | |
61 | <hr> | |
62 | Generated by GTK-Doc V1.15</div> | |
63 | </body> | |
64 | </html>⏎ |
0 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
1 | <html> | |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
4 | <title>FsRawSession</title> | |
5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> | |
6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> | |
7 | <link rel="up" href="ch02.html" title="Raw Plugin"> | |
8 | <link rel="prev" href="farsight2-plugins-FsRawParticipant.html" title="FsRawParticipant"> | |
9 | <link rel="next" href="farsight2-plugins-FsRawStream.html" title="FsRawStream"> | |
10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> | |
11 | <link rel="stylesheet" href="style.css" type="text/css"> | |
12 | </head> | |
13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> | |
15 | <tr valign="middle"> | |
16 | <td><a accesskey="p" href="farsight2-plugins-FsRawParticipant.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> | |
19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> | |
20 | <td><a accesskey="n" href="farsight2-plugins-FsRawStream.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | </tr> | |
22 | <tr><td colspan="5" class="shortcuts"> | |
23 | <a href="#farsight2-plugins-FsRawSession.synopsis" class="shortcut">Top</a> | |
24 | | | |
25 | <a href="#farsight2-plugins-FsRawSession.description" class="shortcut">Description</a> | |
26 | </td></tr> | |
27 | </table> | |
28 | <div class="refentry" title="FsRawSession"> | |
29 | <a name="farsight2-plugins-FsRawSession"></a><div class="titlepage"></div> | |
30 | <div class="refnamediv"><table width="100%"><tr> | |
31 | <td valign="top"> | |
32 | <h2><span class="refentrytitle"><a name="farsight2-plugins-FsRawSession.top_of_page"></a>FsRawSession</span></h2> | |
33 | <p>FsRawSession — A Raw session in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></p> | |
34 | </td> | |
35 | <td valign="top" align="right"></td> | |
36 | </tr></table></div> | |
37 | <div class="refsynopsisdiv" title="Synopsis"> | |
38 | <a name="farsight2-plugins-FsRawSession.synopsis"></a><h2>Synopsis</h2> | |
39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsRawSession.html#FsRawSession" title="FsRawSession">FsRawSession</a>; | |
40 | </pre> | |
41 | </div> | |
42 | <div class="refsect1" title="Description"> | |
43 | <a name="farsight2-plugins-FsRawSession.description"></a><h2>Description</h2> | |
44 | <p> | |
45 | The transmitter parameters to the <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/farsight2-libs-fs-session.html#fs-session-new-stream"><code class="function">fs_session_new_stream()</code></a> function are | |
46 | used to set the initial value of the construct properties of the stream | |
47 | object. | |
48 | </p> | |
49 | <p> | |
50 | The codecs preferences can not be modified. The codec should have the | |
51 | encoding_name property set to the value returned by gst_caps_to_string. | |
52 | </p> | |
53 | </div> | |
54 | <div class="refsect1" title="Details"> | |
55 | <a name="farsight2-plugins-FsRawSession.details"></a><h2>Details</h2> | |
56 | <div class="refsect2" title="FsRawSession"> | |
57 | <a name="FsRawSession"></a><h3>FsRawSession</h3> | |
58 | <pre class="programlisting">typedef struct { | |
59 | FsSession parent; | |
60 | ||
61 | /* Protected by the conf lock */ | |
62 | GstElement *valve; | |
63 | } FsRawSession; | |
64 | </pre> | |
65 | </div> | |
66 | </div> | |
67 | </div> | |
68 | <div class="footer"> | |
69 | <hr> | |
70 | Generated by GTK-Doc V1.15</div> | |
71 | </body> | |
72 | </html>⏎ |
0 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
1 | <html> | |
2 | <head> | |
3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
4 | <title>FsRawStream</title> | |
5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> | |
6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> | |
7 | <link rel="up" href="ch02.html" title="Raw Plugin"> | |
8 | <link rel="prev" href="farsight2-plugins-FsRawSession.html" title="FsRawSession"> | |
9 | <link rel="next" href="ch03.html" title="MSN Webcam plugin"> | |
10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> | |
11 | <link rel="stylesheet" href="style.css" type="text/css"> | |
12 | </head> | |
13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> | |
15 | <tr valign="middle"> | |
16 | <td><a accesskey="p" href="farsight2-plugins-FsRawSession.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> | |
19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> | |
20 | <td><a accesskey="n" href="ch03.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | </tr> | |
22 | <tr><td colspan="5" class="shortcuts"> | |
23 | <a href="#farsight2-plugins-FsRawStream.synopsis" class="shortcut">Top</a> | |
24 | | | |
25 | <a href="#farsight2-plugins-FsRawStream.description" class="shortcut">Description</a> | |
26 | </td></tr> | |
27 | </table> | |
28 | <div class="refentry" title="FsRawStream"> | |
29 | <a name="farsight2-plugins-FsRawStream"></a><div class="titlepage"></div> | |
30 | <div class="refnamediv"><table width="100%"><tr> | |
31 | <td valign="top"> | |
32 | <h2><span class="refentrytitle"><a name="farsight2-plugins-FsRawStream.top_of_page"></a>FsRawStream</span></h2> | |
33 | <p>FsRawStream — A raw stream in a <a class="link" href="farsight2-plugins-FsRawSession.html#FsRawSession" title="FsRawSession"><span class="type">FsRawSession</span></a> in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></p> | |
34 | </td> | |
35 | <td valign="top" align="right"></td> | |
36 | </tr></table></div> | |
37 | <div class="refsynopsisdiv" title="Synopsis"> | |
38 | <a name="farsight2-plugins-FsRawStream.synopsis"></a><h2>Synopsis</h2> | |
39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsRawStream.html#FsRawStream" title="FsRawStream">FsRawStream</a>; | |
40 | </pre> | |
41 | </div> | |
42 | <div class="refsect1" title="Description"> | |
43 | <a name="farsight2-plugins-FsRawStream.description"></a><h2>Description</h2> | |
44 | <p> | |
45 | This list of remote codecs set on this stream should contain one or two | |
46 | codecs. The first codec in this list represents the codec the remote side | |
47 | will be sending. The second codec, if given, represents what should be | |
48 | sent to the remote side. If only one codec is passed, and the codec to | |
49 | send to the remote side hasn't yet been chosen, it will use the first | |
50 | and only codec in the list. | |
51 | </p> | |
52 | <p> | |
53 | The codec content of the codec are ignored except for the "encoding_name" | |
54 | parameter which has to be a valid caps string that can be parsed with | |
55 | <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-to-string"><code class="function">gst_caps_to_string()</code></a> to produce fixed caps. | |
56 | </p> | |
57 | </div> | |
58 | <div class="refsect1" title="Details"> | |
59 | <a name="farsight2-plugins-FsRawStream.details"></a><h2>Details</h2> | |
60 | <div class="refsect2" title="FsRawStream"> | |
61 | <a name="FsRawStream"></a><h3>FsRawStream</h3> | |
62 | <pre class="programlisting">typedef struct { | |
63 | FsStream parent; | |
64 | } FsRawStream; | |
65 | </pre> | |
66 | </div> | |
67 | </div> | |
68 | </div> | |
69 | <div class="footer"> | |
70 | <hr> | |
71 | Generated by GTK-Doc V1.15</div> | |
72 | </body> | |
73 | </html>⏎ |
4 | 4 | <title>FsRawUdpStreamTransmitter</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch02.html" title="Transmitters"> | |
8 | <link rel="prev" href="ch02.html" title="Transmitters"> | |
7 | <link rel="up" href="pt02.html" title="Part II. Transmitters"> | |
8 | <link rel="prev" href="pt02.html" title="Part II. Transmitters"> | |
9 | 9 | <link rel="next" href="farsight2-plugins-FsMulticastStreamTransmitter.html" title="FsMulticastStreamTransmitter"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
13 | 13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> |
15 | 15 | <tr valign="middle"> |
16 | <td><a accesskey="p" href="ch02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
16 | <td><a accesskey="p" href="pt02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
17 | <td><a accesskey="u" href="pt02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | 18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
19 | 19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
20 | 20 | <td><a accesskey="n" href="farsight2-plugins-FsMulticastStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> |
23 | 23 | <a href="#farsight2-plugins-FsRawUdpStreamTransmitter.synopsis" class="shortcut">Top</a> |
24 | 24 | | |
25 | 25 | <a href="#farsight2-plugins-FsRawUdpStreamTransmitter.description" class="shortcut">Description</a> |
26 | | | |
27 | <a href="#farsight2-plugins-FsRawUdpStreamTransmitter.properties" class="shortcut">Properties</a> | |
28 | 26 | </td></tr> |
29 | 27 | </table> |
30 | 28 | <div class="refentry" title="FsRawUdpStreamTransmitter"> |
41 | 39 | <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter" title="FsRawUdpStreamTransmitter">FsRawUdpStreamTransmitter</a>; |
42 | 40 | </pre> |
43 | 41 | </div> |
44 | <div class="refsect1" title="Properties"> | |
45 | <a name="farsight2-plugins-FsRawUdpStreamTransmitter.properties"></a><h2>Properties</h2> | |
46 | <pre class="synopsis"> | |
47 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip" title='The "stun-ip" property'>stun-ip</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only | |
48 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port" title='The "stun-port" property'>stun-port</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
49 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-timeout" title='The "stun-timeout" property'>stun-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
50 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery" title='The "upnp-discovery" property'>upnp-discovery</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only | |
51 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery-timeout" title='The "upnp-discovery-timeout" property'>upnp-discovery-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
52 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping" title='The "upnp-mapping" property'>upnp-mapping</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only | |
53 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping-timeout" title='The "upnp-mapping-timeout" property'>upnp-mapping-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
54 | "<a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-request-timeout" title='The "upnp-request-timeout" property'>upnp-request-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only | |
55 | </pre> | |
56 | </div> | |
57 | 42 | <div class="refsect1" title="Description"> |
58 | 43 | <a name="farsight2-plugins-FsRawUdpStreamTransmitter.description"></a><h2>Description</h2> |
59 | 44 | <p> |
61 | 46 | </p> |
62 | 47 | <p> |
63 | 48 | It will detect its own address using a STUN request if the |
64 | <a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip" title='The "stun-ip" property'><span class="type">"stun-ip"</span></a> and <a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port" title='The "stun-port" property'><span class="type">"stun-port"</span></a> | |
49 | <a href="/usr/share/gtk-doc/html/farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip"><span class="type">"stun-ip"</span></a> and <a href="/usr/share/gtk-doc/html/farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port"><span class="type">"stun-port"</span></a> | |
65 | 50 | properties are set. If the STUN request does not get a reply |
66 | 51 | or no STUN is requested. It will return the IP address of all the local |
67 | 52 | network interfaces, listing link-local addresses after other addresses |
112 | 97 | </table></div> |
113 | 98 | </div> |
114 | 99 | </div> |
115 | <div class="refsect1" title="Property Details"> | |
116 | <a name="farsight2-plugins-FsRawUdpStreamTransmitter.property-details"></a><h2>Property Details</h2> | |
117 | <div class="refsect2" title='The "stun-ip" property'> | |
118 | <a name="FsRawUdpStreamTransmitter--stun-ip"></a><h3>The <code class="literal">"stun-ip"</code> property</h3> | |
119 | <pre class="programlisting"> "stun-ip" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> | |
120 | <p>The IPv4 address of the STUN server as a x.x.x.x string.</p> | |
121 | <p>Default value: NULL</p> | |
122 | </div> | |
123 | <hr> | |
124 | <div class="refsect2" title='The "stun-port" property'> | |
125 | <a name="FsRawUdpStreamTransmitter--stun-port"></a><h3>The <code class="literal">"stun-port"</code> property</h3> | |
126 | <pre class="programlisting"> "stun-port" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
127 | <p>The IPv4 UDP port of the STUN server as a .</p> | |
128 | <p>Allowed values: [1,65535]</p> | |
129 | <p>Default value: 3478</p> | |
130 | </div> | |
131 | <hr> | |
132 | <div class="refsect2" title='The "stun-timeout" property'> | |
133 | <a name="FsRawUdpStreamTransmitter--stun-timeout"></a><h3>The <code class="literal">"stun-timeout"</code> property</h3> | |
134 | <pre class="programlisting"> "stun-timeout" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
135 | <p>How long to wait for for the STUN reply (in seconds) before giving up.</p> | |
136 | <p>Allowed values: >= 1</p> | |
137 | <p>Default value: 30</p> | |
138 | </div> | |
139 | <hr> | |
140 | <div class="refsect2" title='The "upnp-discovery" property'> | |
141 | <a name="FsRawUdpStreamTransmitter--upnp-discovery"></a><h3>The <code class="literal">"upnp-discovery"</code> property</h3> | |
142 | <pre class="programlisting"> "upnp-discovery" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only</pre> | |
143 | <p>Tries to discovery the external IP with UPnP if stun fails.</p> | |
144 | <p>Default value: TRUE</p> | |
145 | </div> | |
146 | <hr> | |
147 | <div class="refsect2" title='The "upnp-discovery-timeout" property'> | |
148 | <a name="FsRawUdpStreamTransmitter--upnp-discovery-timeout"></a><h3>The <code class="literal">"upnp-discovery-timeout"</code> property</h3> | |
149 | <pre class="programlisting"> "upnp-discovery-timeout" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
150 | <p>After this period, UPnP discovery is considered to have failed and the local IP is returned.</p> | |
151 | <p>Default value: 10</p> | |
152 | </div> | |
153 | <hr> | |
154 | <div class="refsect2" title='The "upnp-mapping" property'> | |
155 | <a name="FsRawUdpStreamTransmitter--upnp-mapping"></a><h3>The <code class="literal">"upnp-mapping"</code> property</h3> | |
156 | <pre class="programlisting"> "upnp-mapping" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct Only</pre> | |
157 | <p>Tries to map ports using UPnP if enabled.</p> | |
158 | <p>Default value: TRUE</p> | |
159 | </div> | |
160 | <hr> | |
161 | <div class="refsect2" title='The "upnp-mapping-timeout" property'> | |
162 | <a name="FsRawUdpStreamTransmitter--upnp-mapping-timeout"></a><h3>The <code class="literal">"upnp-mapping-timeout"</code> property</h3> | |
163 | <pre class="programlisting"> "upnp-mapping-timeout" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
164 | <p>The UPnP port mappings expire after this period if the app has crashed (in seconds).</p> | |
165 | <p>Default value: 600</p> | |
166 | </div> | |
167 | <hr> | |
168 | <div class="refsect2" title='The "upnp-request-timeout" property'> | |
169 | <a name="FsRawUdpStreamTransmitter--upnp-request-timeout"></a><h3>The <code class="literal">"upnp-request-timeout"</code> property</h3> | |
170 | <pre class="programlisting"> "upnp-request-timeout" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write / Construct Only</pre> | |
171 | <p>After this delay, UPnP requests fails.</p> | |
172 | <p>Allowed values: [1,600]</p> | |
173 | <p>Default value: 10</p> | |
174 | </div> | |
175 | </div> | |
176 | 100 | <div class="refsect1" title="See Also"> |
177 | 101 | <a name="farsight2-plugins-FsRawUdpStreamTransmitter.see-also"></a><h2>See Also</h2> |
178 | 102 | <a class="link" href="farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter" title="FsMulticastStreamTransmitter"><span class="type">FsMulticastStreamTransmitter</span></a> |
4 | 4 | <title>FsRtpConference</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch01.html" title="Core interface classes"> | |
8 | <link rel="prev" href="ch01.html" title="Core interface classes"> | |
7 | <link rel="up" href="ch01.html" title="RTP Plugin"> | |
8 | <link rel="prev" href="ch01.html" title="RTP Plugin"> | |
9 | 9 | <link rel="next" href="farsight2-plugins-FsRtpParticipant.html" title="FsRtpParticipant"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
4 | 4 | <title>FsRtpParticipant</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch01.html" title="Core interface classes"> | |
7 | <link rel="up" href="ch01.html" title="RTP Plugin"> | |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsRtpConference.html" title="FsRtpConference"> |
9 | 9 | <link rel="next" href="farsight2-plugins-FsRtpSession.html" title="FsRtpSession"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
4 | 4 | <title>FsRtpSession</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch01.html" title="Core interface classes"> | |
7 | <link rel="up" href="ch01.html" title="RTP Plugin"> | |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsRtpParticipant.html" title="FsRtpParticipant"> |
9 | 9 | <link rel="next" href="farsight2-plugins-FsRtpStream.html" title="FsRtpStream"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
45 | 45 | <a name="farsight2-plugins-FsRtpSession.properties"></a><h2>Properties</h2> |
46 | 46 | <pre class="synopsis"> |
47 | 47 | "<a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession--no-rtcp-timeout" title='The "no-rtcp-timeout" property'>no-rtcp-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write |
48 | "<a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession--conference" title='The "conference" property'>conference</a>" <a class="link" href="farsight2-plugins-FsRtpConference.html#FsRtpConference" title="FsRtpConference"><span class="type">FsRtpConference</span></a>* : Read / Write / Construct Only | |
49 | 48 | "<a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession--ssrc" title='The "ssrc" property'>ssrc</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write |
50 | 49 | "<a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession--send-bitrate" title='The "send-bitrate" property'>send-bitrate</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write |
50 | "<a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extension-preferences" title='The "rtp-header-extension-preferences" property'>rtp-header-extension-preferences</a>" <span class="type">FsRtpHeaderExtensionGList</span>* : Read / Write | |
51 | "<a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extensions" title='The "rtp-header-extensions" property'>rtp-header-extensions</a>" <span class="type">FsRtpHeaderExtensionGList</span>* : Read | |
51 | 52 | </pre> |
52 | 53 | </div> |
53 | 54 | <div class="refsect1" title="Description"> |
59 | 60 | SSRC (although if there is a SSRC collision, that SSRC may change). |
60 | 61 | </p> |
61 | 62 | <div class="refsect2" title="Codec profiles"> |
62 | <a name="id502848"></a><h3>Codec profiles</h3> | |
63 | <a name="id433132"></a><h3>Codec profiles</h3> | |
63 | 64 | <p> |
64 | 65 | It is possible to define "codec profiles", that is non-autodetected |
65 | 66 | encoding and decoding pipelines for codecs. It is even possible to declare |
106 | 107 | <p>Default value: 7000</p> |
107 | 108 | </div> |
108 | 109 | <hr> |
109 | <div class="refsect2" title='The "conference" property'> | |
110 | <a name="FsRtpSession--conference"></a><h3>The <code class="literal">"conference"</code> property</h3> | |
111 | <pre class="programlisting"> "conference" <a class="link" href="farsight2-plugins-FsRtpConference.html#FsRtpConference" title="FsRtpConference"><span class="type">FsRtpConference</span></a>* : Read / Write / Construct Only</pre> | |
112 | <p>This is a convience pointer for the Conference.</p> | |
113 | </div> | |
114 | <hr> | |
115 | 110 | <div class="refsect2" title='The "ssrc" property'> |
116 | 111 | <a name="FsRtpSession--ssrc"></a><h3>The <code class="literal">"ssrc"</code> property</h3> |
117 | 112 | <pre class="programlisting"> "ssrc" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read / Write</pre> |
125 | 120 | <p>The bitrate that the session will try to send at in bits/sec.</p> |
126 | 121 | <p>Default value: 0</p> |
127 | 122 | </div> |
123 | <hr> | |
124 | <div class="refsect2" title='The "rtp-header-extension-preferences" property'> | |
125 | <a name="FsRtpSession--rtp-header-extension-preferences"></a><h3>The <code class="literal">"rtp-header-extension-preferences"</code> property</h3> | |
126 | <pre class="programlisting"> "rtp-header-extension-preferences" <span class="type">FsRtpHeaderExtensionGList</span>* : Read / Write</pre> | |
127 | <p>GList of RTP Header extensions that are locally supported and desired by the application.</p> | |
128 | </div> | |
129 | <hr> | |
130 | <div class="refsect2" title='The "rtp-header-extensions" property'> | |
131 | <a name="FsRtpSession--rtp-header-extensions"></a><h3>The <code class="literal">"rtp-header-extensions"</code> property</h3> | |
132 | <pre class="programlisting"> "rtp-header-extensions" <span class="type">FsRtpHeaderExtensionGList</span>* : Read</pre> | |
133 | <p>GList of RTP Header extensions that have been negotiated and will be used when sending of receiving RTP packets.</p> | |
134 | </div> | |
128 | 135 | </div> |
129 | 136 | </div> |
130 | 137 | <div class="footer"> |
4 | 4 | <title>FsRtpStream</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch01.html" title="Core interface classes"> | |
7 | <link rel="up" href="ch01.html" title="RTP Plugin"> | |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsRtpSession.html" title="FsRtpSession"> |
9 | <link rel="next" href="ch02.html" title="Transmitters"> | |
9 | <link rel="next" href="ch02.html" title="Raw Plugin"> | |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
45 | 45 | <a name="farsight2-plugins-FsRtpStream.properties"></a><h2>Properties</h2> |
46 | 46 | <pre class="synopsis"> |
47 | 47 | "<a class="link" href="farsight2-plugins-FsRtpStream.html#FsRtpStream--stream-transmitter" title='The "stream-transmitter" property'>stream-transmitter</a>" <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/FsStreamTransmitter.html"><span class="type">FsStreamTransmitter</span></a>* : Write / Construct Only |
48 | "<a class="link" href="farsight2-plugins-FsRtpStream.html#FsRtpStream--rtp-header-extensions" title='The "rtp-header-extensions" property'>rtp-header-extensions</a>" <span class="type">FsRtpHeaderExtensionGList</span>* : Read / Write | |
48 | 49 | </pre> |
49 | 50 | </div> |
50 | 51 | <div class="refsect1" title="Description"> |
74 | 75 | The <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/FsStreamTransmitter.html"><span class="type">FsStreamTransmitter</span></a> for this stream. |
75 | 76 | </p> |
76 | 77 | </div> |
78 | <hr> | |
79 | <div class="refsect2" title='The "rtp-header-extensions" property'> | |
80 | <a name="FsRtpStream--rtp-header-extensions"></a><h3>The <code class="literal">"rtp-header-extensions"</code> property</h3> | |
81 | <pre class="programlisting"> "rtp-header-extensions" <span class="type">FsRtpHeaderExtensionGList</span>* : Read / Write</pre> | |
82 | <p>GList of RTP Header extensions that the participant for this stream would like to use.</p> | |
83 | </div> | |
77 | 84 | </div> |
78 | 85 | </div> |
79 | 86 | <div class="footer"> |
4 | 4 | <title>FsShmStreamTransmitter</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="up" href="ch02.html" title="Transmitters"> | |
7 | <link rel="up" href="pt02.html" title="Part II. Transmitters"> | |
8 | 8 | <link rel="prev" href="farsight2-plugins-FsNiceStreamTransmitter.html" title="FsNiceStreamTransmitter"> |
9 | <link rel="next" href="pt02.html" title="Part II. MSN plugins"> | |
9 | <link rel="next" href="pt03.html" title="Part III. Utility elements"> | |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> |
15 | 15 | <tr valign="middle"> |
16 | 16 | <td><a accesskey="p" href="farsight2-plugins-FsNiceStreamTransmitter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> |
17 | <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
17 | <td><a accesskey="u" href="pt02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> | |
18 | 18 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
19 | 19 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
20 | <td><a accesskey="n" href="pt02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
20 | <td><a accesskey="n" href="pt03.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
21 | 21 | </tr> |
22 | 22 | <tr><td colspan="5" class="shortcuts"> |
23 | 23 | <a href="#farsight2-plugins-FsShmStreamTransmitter.synopsis" class="shortcut">Top</a> |
55 | 55 | sender. The sender socket must exist before the receiver connects to it. |
56 | 56 | </p> |
57 | 57 | <p> |
58 | The sender socket can be created by giving the transmitter a candidate | |
58 | Negotiating the paths of the sockets can happen in two ways. If the | |
59 | create-local-candidates is True then the transmitter will generate the | |
60 | path of the local candidate and us it as the ip filed in <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/farsight2-libs-FsCandidate.html#FsCandidate"><span class="type">FsCandidate</span></a>. The | |
61 | transmitter will expect the path of the applications sender socket to be in | |
62 | the "ip" field of the remote candidates <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/farsight2-libs-FsCandidate.html#FsCandidate"><span class="type">FsCandidate</span></a> as well. | |
63 | </p> | |
64 | <p> | |
65 | Or alternatively, if create-local-candidates is false then | |
66 | the sender socket can be created by giving the transmitter a candidate | |
59 | 67 | with the path of the socket in the "ip" field of the <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/farsight2-libs-FsCandidate.html#FsCandidate"><span class="type">FsCandidate</span></a>. This |
60 | 68 | <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/farsight2-libs-FsCandidate.html#FsCandidate"><span class="type">FsCandidate</span></a> can be given to the <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/FsStreamTransmitter.html"><span class="type">FsStreamTransmitter</span></a> in two ways, either |
61 | 69 | by setting the <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/FsStreamTransmitter.html#FsStreamTransmitter--preferred-local-candidates"><span class="type">"preferred-local-candidates"</span></a> property |
1 | 1 | <!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""> |
2 | 2 | <book xmlns="http://www.devhelp.net/book" title="Farsight2 Plugins Manual" link="index.html" author="" name="farsight2-plugins"> |
3 | 3 | <chapters> |
4 | <sub name="RTP Plugin" link="pt01.html"> | |
5 | <sub name="Core interface classes" link="ch01.html"> | |
4 | <sub name="Plugins implementing FsConference" link="pt01.html"> | |
5 | <sub name="RTP Plugin" link="ch01.html"> | |
6 | 6 | <sub name="FsRtpConference" link="farsight2-plugins-FsRtpConference.html"/> |
7 | 7 | <sub name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html"/> |
8 | 8 | <sub name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html"/> |
9 | 9 | <sub name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html"/> |
10 | 10 | </sub> |
11 | <sub name="Transmitters" link="ch02.html"> | |
12 | <sub name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html"/> | |
13 | <sub name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html"/> | |
14 | <sub name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html"/> | |
15 | <sub name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html"/> | |
11 | <sub name="Raw Plugin" link="ch02.html"> | |
12 | <sub name="FsRawConference" link="farsight2-plugins-FsRawConference.html"/> | |
13 | <sub name="FsRawParticipant" link="farsight2-plugins-FsRawParticipant.html"/> | |
14 | <sub name="FsRawSession" link="farsight2-plugins-FsRawSession.html"/> | |
15 | <sub name="FsRawStream" link="farsight2-plugins-FsRawStream.html"/> | |
16 | 16 | </sub> |
17 | </sub> | |
18 | <sub name="MSN plugins" link="pt02.html"> | |
19 | 17 | <sub name="MSN Webcam plugin" link="ch03.html"> |
20 | 18 | <sub name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html"/> |
21 | 19 | <sub name="FsMsnCamCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html"/> |
24 | 22 | <sub name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html"/> |
25 | 23 | <sub name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html"/> |
26 | 24 | </sub> |
25 | </sub> | |
26 | <sub name="Transmitters" link="pt02.html"> | |
27 | <sub name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html"/> | |
28 | <sub name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html"/> | |
29 | <sub name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html"/> | |
30 | <sub name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html"/> | |
27 | 31 | </sub> |
28 | 32 | <sub name="Utility elements" link="pt03.html"> |
29 | 33 | <sub name="FsFunnel" link="farsight2-plugins-FsFunnel.html"/> |
42 | 46 | <function name="The "sdes" property" link="farsight2-plugins-FsRtpConference.html#FsRtpConference--sdes"/> |
43 | 47 | <function name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html#FsRtpParticipant"/> |
44 | 48 | <function name="The "cname" property" link="farsight2-plugins-FsRtpParticipant.html#FsRtpParticipant--cname"/> |
45 | <function name="Codec profiles" link="farsight2-plugins-FsRtpSession.html#id502848"/> | |
49 | <function name="Codec profiles" link="farsight2-plugins-FsRtpSession.html#id433132"/> | |
46 | 50 | <function name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html#FsRtpSession"/> |
47 | 51 | <function name="The "no-rtcp-timeout" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--no-rtcp-timeout"/> |
48 | <function name="The "conference" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--conference"/> | |
49 | 52 | <function name="The "ssrc" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--ssrc"/> |
50 | 53 | <function name="The "send-bitrate" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--send-bitrate"/> |
54 | <function name="The "rtp-header-extension-preferences" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extension-preferences"/> | |
55 | <function name="The "rtp-header-extensions" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extensions"/> | |
51 | 56 | <function name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html#FsRtpStream"/> |
52 | 57 | <function name="The "stream-transmitter" property" link="farsight2-plugins-FsRtpStream.html#FsRtpStream--stream-transmitter"/> |
53 | <function name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter"/> | |
54 | <function name="The "stun-ip" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip"/> | |
55 | <function name="The "stun-port" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port"/> | |
56 | <function name="The "stun-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-timeout"/> | |
57 | <function name="The "upnp-discovery" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery"/> | |
58 | <function name="The "upnp-discovery-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery-timeout"/> | |
59 | <function name="The "upnp-mapping" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping"/> | |
60 | <function name="The "upnp-mapping-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping-timeout"/> | |
61 | <function name="The "upnp-request-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-request-timeout"/> | |
62 | <function name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter"/> | |
63 | <function name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter"/> | |
64 | <function name="The "compatibility-mode" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--compatibility-mode"/> | |
65 | <function name="The "controlling-mode" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--controlling-mode"/> | |
66 | <function name="The "debug" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--debug"/> | |
67 | <function name="The "relay-info" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--relay-info"/> | |
68 | <function name="The "stream-id" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stream-id"/> | |
69 | <function name="The "stun-ip" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-ip"/> | |
70 | <function name="The "stun-port" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-port"/> | |
71 | <function name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html#FsShmStreamTransmitter"/> | |
58 | <function name="The "rtp-header-extensions" property" link="farsight2-plugins-FsRtpStream.html#FsRtpStream--rtp-header-extensions"/> | |
59 | <function name="FsRawConference" link="farsight2-plugins-FsRawConference.html#FsRawConference"/> | |
60 | <function name="FsRawParticipant" link="farsight2-plugins-FsRawParticipant.html#FsRawParticipant"/> | |
61 | <function name="FsRawSession" link="farsight2-plugins-FsRawSession.html#FsRawSession"/> | |
62 | <function name="FsRawStream" link="farsight2-plugins-FsRawStream.html#FsRawStream"/> | |
72 | 63 | <function name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html#FsMsnCamSendConference"/> |
73 | 64 | <function name="FsMsnCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html#FsMsnCamRecvConference"/> |
74 | 65 | <function name="FsMsnConference" link="farsight2-plugins-FsMsnConference.html#FsMsnConference"/> |
75 | <function name="The "local-address" property" link="farsight2-plugins-FsMsnConference.html#FsMsnConference--local-address"/> | |
76 | 66 | <function name="FsMsnParticipant" link="farsight2-plugins-FsMsnParticipant.html#FsMsnParticipant"/> |
77 | 67 | <function name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html#FsMsnSession"/> |
78 | <function name="The "conference" property" link="farsight2-plugins-FsMsnSession.html#FsMsnSession--conference"/> | |
79 | 68 | <function name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html#FsMsnStream"/> |
80 | <function name="The "conference" property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--conference"/> | |
81 | <function name="The "initial-port" property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--initial-port"/> | |
82 | <function name="The "session-id" property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--session-id"/> | |
69 | <function name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter"/> | |
70 | <function name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter"/> | |
71 | <function name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter"/> | |
72 | <function name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html#FsShmStreamTransmitter"/> | |
83 | 73 | <function name="FsFunnel" link="farsight2-plugins-FsFunnel.html#FsFunnel"/> |
84 | 74 | <function name="GstVideoanyrate" link="farsight2-plugins-GstVideoanyrate.html#GstVideoanyrate"/> |
85 | 75 | </functions> |
1 | 1 | <!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""> |
2 | 2 | <book xmlns="http://www.devhelp.net/book" title="Farsight2 Plugins Manual" link="index.html" author="" name="farsight2-plugins" version="2" language="c"> |
3 | 3 | <chapters> |
4 | <sub name="RTP Plugin" link="pt01.html"> | |
5 | <sub name="Core interface classes" link="ch01.html"> | |
4 | <sub name="Plugins implementing FsConference" link="pt01.html"> | |
5 | <sub name="RTP Plugin" link="ch01.html"> | |
6 | 6 | <sub name="FsRtpConference" link="farsight2-plugins-FsRtpConference.html"/> |
7 | 7 | <sub name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html"/> |
8 | 8 | <sub name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html"/> |
9 | 9 | <sub name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html"/> |
10 | 10 | </sub> |
11 | <sub name="Transmitters" link="ch02.html"> | |
12 | <sub name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html"/> | |
13 | <sub name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html"/> | |
14 | <sub name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html"/> | |
15 | <sub name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html"/> | |
11 | <sub name="Raw Plugin" link="ch02.html"> | |
12 | <sub name="FsRawConference" link="farsight2-plugins-FsRawConference.html"/> | |
13 | <sub name="FsRawParticipant" link="farsight2-plugins-FsRawParticipant.html"/> | |
14 | <sub name="FsRawSession" link="farsight2-plugins-FsRawSession.html"/> | |
15 | <sub name="FsRawStream" link="farsight2-plugins-FsRawStream.html"/> | |
16 | 16 | </sub> |
17 | </sub> | |
18 | <sub name="MSN plugins" link="pt02.html"> | |
19 | 17 | <sub name="MSN Webcam plugin" link="ch03.html"> |
20 | 18 | <sub name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html"/> |
21 | 19 | <sub name="FsMsnCamCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html"/> |
24 | 22 | <sub name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html"/> |
25 | 23 | <sub name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html"/> |
26 | 24 | </sub> |
25 | </sub> | |
26 | <sub name="Transmitters" link="pt02.html"> | |
27 | <sub name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html"/> | |
28 | <sub name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html"/> | |
29 | <sub name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html"/> | |
30 | <sub name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html"/> | |
27 | 31 | </sub> |
28 | 32 | <sub name="Utility elements" link="pt03.html"> |
29 | 33 | <sub name="FsFunnel" link="farsight2-plugins-FsFunnel.html"/> |
42 | 46 | <keyword type="property" name="The "sdes" property" link="farsight2-plugins-FsRtpConference.html#FsRtpConference--sdes"/> |
43 | 47 | <keyword type="struct" name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html#FsRtpParticipant"/> |
44 | 48 | <keyword type="property" name="The "cname" property" link="farsight2-plugins-FsRtpParticipant.html#FsRtpParticipant--cname"/> |
45 | <keyword type="" name="Codec profiles" link="farsight2-plugins-FsRtpSession.html#id502848"/> | |
49 | <keyword type="" name="Codec profiles" link="farsight2-plugins-FsRtpSession.html#id433132"/> | |
46 | 50 | <keyword type="struct" name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html#FsRtpSession"/> |
47 | 51 | <keyword type="property" name="The "no-rtcp-timeout" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--no-rtcp-timeout"/> |
48 | <keyword type="property" name="The "conference" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--conference"/> | |
49 | 52 | <keyword type="property" name="The "ssrc" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--ssrc"/> |
50 | 53 | <keyword type="property" name="The "send-bitrate" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--send-bitrate"/> |
54 | <keyword type="property" name="The "rtp-header-extension-preferences" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extension-preferences"/> | |
55 | <keyword type="property" name="The "rtp-header-extensions" property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extensions"/> | |
51 | 56 | <keyword type="struct" name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html#FsRtpStream"/> |
52 | 57 | <keyword type="property" name="The "stream-transmitter" property" link="farsight2-plugins-FsRtpStream.html#FsRtpStream--stream-transmitter"/> |
53 | <keyword type="struct" name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter"/> | |
54 | <keyword type="property" name="The "stun-ip" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip"/> | |
55 | <keyword type="property" name="The "stun-port" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port"/> | |
56 | <keyword type="property" name="The "stun-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-timeout"/> | |
57 | <keyword type="property" name="The "upnp-discovery" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery"/> | |
58 | <keyword type="property" name="The "upnp-discovery-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery-timeout"/> | |
59 | <keyword type="property" name="The "upnp-mapping" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping"/> | |
60 | <keyword type="property" name="The "upnp-mapping-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping-timeout"/> | |
61 | <keyword type="property" name="The "upnp-request-timeout" property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-request-timeout"/> | |
62 | <keyword type="struct" name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter"/> | |
63 | <keyword type="struct" name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter"/> | |
64 | <keyword type="property" name="The "compatibility-mode" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--compatibility-mode"/> | |
65 | <keyword type="property" name="The "controlling-mode" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--controlling-mode"/> | |
66 | <keyword type="property" name="The "debug" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--debug"/> | |
67 | <keyword type="property" name="The "relay-info" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--relay-info"/> | |
68 | <keyword type="property" name="The "stream-id" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stream-id"/> | |
69 | <keyword type="property" name="The "stun-ip" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-ip"/> | |
70 | <keyword type="property" name="The "stun-port" property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-port"/> | |
71 | <keyword type="struct" name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html#FsShmStreamTransmitter"/> | |
58 | <keyword type="property" name="The "rtp-header-extensions" property" link="farsight2-plugins-FsRtpStream.html#FsRtpStream--rtp-header-extensions"/> | |
59 | <keyword type="struct" name="FsRawConference" link="farsight2-plugins-FsRawConference.html#FsRawConference"/> | |
60 | <keyword type="struct" name="FsRawParticipant" link="farsight2-plugins-FsRawParticipant.html#FsRawParticipant"/> | |
61 | <keyword type="struct" name="FsRawSession" link="farsight2-plugins-FsRawSession.html#FsRawSession"/> | |
62 | <keyword type="struct" name="FsRawStream" link="farsight2-plugins-FsRawStream.html#FsRawStream"/> | |
72 | 63 | <keyword type="struct" name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html#FsMsnCamSendConference"/> |
73 | 64 | <keyword type="struct" name="FsMsnCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html#FsMsnCamRecvConference"/> |
74 | 65 | <keyword type="struct" name="FsMsnConference" link="farsight2-plugins-FsMsnConference.html#FsMsnConference"/> |
75 | <keyword type="property" name="The "local-address" property" link="farsight2-plugins-FsMsnConference.html#FsMsnConference--local-address"/> | |
76 | 66 | <keyword type="struct" name="FsMsnParticipant" link="farsight2-plugins-FsMsnParticipant.html#FsMsnParticipant"/> |
77 | 67 | <keyword type="struct" name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html#FsMsnSession"/> |
78 | <keyword type="property" name="The "conference" property" link="farsight2-plugins-FsMsnSession.html#FsMsnSession--conference"/> | |
79 | 68 | <keyword type="struct" name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html#FsMsnStream"/> |
80 | <keyword type="property" name="The "conference" property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--conference"/> | |
81 | <keyword type="property" name="The "initial-port" property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--initial-port"/> | |
82 | <keyword type="property" name="The "session-id" property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--session-id"/> | |
69 | <keyword type="struct" name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter"/> | |
70 | <keyword type="struct" name="FsMulticastStreamTransmitter" link="farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter"/> | |
71 | <keyword type="struct" name="FsNiceStreamTransmitter" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter"/> | |
72 | <keyword type="struct" name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html#FsShmStreamTransmitter"/> | |
83 | 73 | <keyword type="struct" name="FsFunnel" link="farsight2-plugins-FsFunnel.html#FsFunnel"/> |
84 | 74 | <keyword type="struct" name="GstVideoanyrate" link="farsight2-plugins-GstVideoanyrate.html#GstVideoanyrate"/> |
85 | 75 | </functions> |
4 | 4 | <title>Farsight2 Plugins Manual</title> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | <link rel="next" href="pt01.html" title="Part I. RTP Plugin"> | |
7 | <link rel="next" href="pt01.html" title="Part I. Plugins implementing FsConference"> | |
8 | 8 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
9 | 9 | <link rel="stylesheet" href="style.css" type="text/css"> |
10 | 10 | </head> |
14 | 14 | <div> |
15 | 15 | <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Farsight2 Plugins Manual</p></th></tr></table></div> |
16 | 16 | <div><p class="releaseinfo"> |
17 | for version 0.0.22.1. | |
17 | for version 0.0.23.1. | |
18 | 18 | The latest version of this documentation can be found on-line at |
19 | 19 | <a class="ulink" href="http://farsight.freedesktop.org/apidoc/farsight2-plugins/" target="_top">http://farsight.freedesktop.org/apidoc/farsight2-plugins/</a>. |
20 | 20 | These plugins are to be used with the base classes and other utility |
25 | 25 | <hr> |
26 | 26 | </div> |
27 | 27 | <div class="toc"><dl> |
28 | <dt><span class="part"><a href="pt01.html">I. RTP Plugin</a></span></dt> | |
28 | <dt><span class="part"><a href="pt01.html">I. Plugins implementing FsConference</a></span></dt> | |
29 | 29 | <dd><dl> |
30 | <dt><span class="chapter"><a href="ch01.html">Core interface classes</a></span></dt> | |
30 | <dt><span class="chapter"><a href="ch01.html">RTP Plugin</a></span></dt> | |
31 | 31 | <dd><dl> |
32 | 32 | <dt> |
33 | 33 | <span class="refentrytitle"><a href="farsight2-plugins-FsRtpConference.html">FsRtpConference</a></span><span class="refpurpose"> — Farsight RTP Conference Gstreamer Elements</span> |
42 | 42 | <span class="refentrytitle"><a href="farsight2-plugins-FsRtpStream.html">FsRtpStream</a></span><span class="refpurpose"> — A RTP stream in a <a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession" title="FsRtpSession"><span class="type">FsRtpSession</span></a> in a <a class="link" href="farsight2-plugins-FsRtpConference.html#FsRtpConference" title="FsRtpConference"><span class="type">FsRtpConference</span></a></span> |
43 | 43 | </dt> |
44 | 44 | </dl></dd> |
45 | <dt><span class="chapter"><a href="ch02.html">Transmitters</a></span></dt> | |
45 | <dt><span class="chapter"><a href="ch02.html">Raw Plugin</a></span></dt> | |
46 | 46 | <dd><dl> |
47 | 47 | <dt> |
48 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawUdpStreamTransmitter.html">FsRawUdpStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for UDP with STUN</span> | |
48 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawConference.html">FsRawConference</a></span><span class="refpurpose"> — Farsight Raw Conference Gstreamer Elements Base class</span> | |
49 | 49 | </dt> |
50 | 50 | <dt> |
51 | <span class="refentrytitle"><a href="farsight2-plugins-FsMulticastStreamTransmitter.html">FsMulticastStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Multicast UDP</span> | |
51 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawParticipant.html">FsRawParticipant</a></span><span class="refpurpose"> — A Raw participant in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
52 | 52 | </dt> |
53 | 53 | <dt> |
54 | <span class="refentrytitle"><a href="farsight2-plugins-FsNiceStreamTransmitter.html">FsNiceStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for ICE using libnice</span> | |
54 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawSession.html">FsRawSession</a></span><span class="refpurpose"> — A Raw session in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
55 | 55 | </dt> |
56 | 56 | <dt> |
57 | <span class="refentrytitle"><a href="farsight2-plugins-FsShmStreamTransmitter.html">FsShmStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Shared Memory</span> | |
57 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawStream.html">FsRawStream</a></span><span class="refpurpose"> — A raw stream in a <a class="link" href="farsight2-plugins-FsRawSession.html#FsRawSession" title="FsRawSession"><span class="type">FsRawSession</span></a> in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
58 | 58 | </dt> |
59 | 59 | </dl></dd> |
60 | </dl></dd> | |
61 | <dt><span class="part"><a href="pt02.html">II. MSN plugins</a></span></dt> | |
62 | <dd><dl> | |
63 | 60 | <dt><span class="chapter"><a href="ch03.html">MSN Webcam plugin</a></span></dt> |
64 | 61 | <dd><dl> |
65 | 62 | <dt> |
82 | 79 | </dt> |
83 | 80 | </dl></dd> |
84 | 81 | </dl></dd> |
82 | <dt><span class="part"><a href="pt02.html">II. Transmitters</a></span></dt> | |
83 | <dd><dl> | |
84 | <dt> | |
85 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawUdpStreamTransmitter.html">FsRawUdpStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for UDP with STUN</span> | |
86 | </dt> | |
87 | <dt> | |
88 | <span class="refentrytitle"><a href="farsight2-plugins-FsMulticastStreamTransmitter.html">FsMulticastStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Multicast UDP</span> | |
89 | </dt> | |
90 | <dt> | |
91 | <span class="refentrytitle"><a href="farsight2-plugins-FsNiceStreamTransmitter.html">FsNiceStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for ICE using libnice</span> | |
92 | </dt> | |
93 | <dt> | |
94 | <span class="refentrytitle"><a href="farsight2-plugins-FsShmStreamTransmitter.html">FsShmStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Shared Memory</span> | |
95 | </dt> | |
96 | </dl></dd> | |
85 | 97 | <dt><span class="part"><a href="pt03.html">III. Utility elements</a></span></dt> |
86 | 98 | <dd><dl> |
87 | 99 | <dt> |
29 | 29 | <ANCHOR id="FsRtpSession" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession"> |
30 | 30 | <ANCHOR id="farsight2-plugins-FsRtpSession.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#farsight2-plugins-FsRtpSession.property-details"> |
31 | 31 | <ANCHOR id="FsRtpSession--no-rtcp-timeout" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession--no-rtcp-timeout"> |
32 | <ANCHOR id="FsRtpSession--conference" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession--conference"> | |
33 | 32 | <ANCHOR id="FsRtpSession--ssrc" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession--ssrc"> |
34 | 33 | <ANCHOR id="FsRtpSession--send-bitrate" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession--send-bitrate"> |
34 | <ANCHOR id="FsRtpSession--rtp-header-extension-preferences" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extension-preferences"> | |
35 | <ANCHOR id="FsRtpSession--rtp-header-extensions" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extensions"> | |
35 | 36 | <ANCHOR id="farsight2-plugins-FsRtpStream" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html"> |
36 | 37 | <ANCHOR id="farsight2-plugins-FsRtpStream.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#farsight2-plugins-FsRtpStream.synopsis"> |
37 | 38 | <ANCHOR id="farsight2-plugins-FsRtpStream.properties" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#farsight2-plugins-FsRtpStream.properties"> |
40 | 41 | <ANCHOR id="FsRtpStream" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#FsRtpStream"> |
41 | 42 | <ANCHOR id="farsight2-plugins-FsRtpStream.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#farsight2-plugins-FsRtpStream.property-details"> |
42 | 43 | <ANCHOR id="FsRtpStream--stream-transmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#FsRtpStream--stream-transmitter"> |
43 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html"> | |
44 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.synopsis"> | |
45 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.properties" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.properties"> | |
46 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.description"> | |
47 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.details"> | |
48 | <ANCHOR id="FsRawUdpStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter"> | |
49 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.property-details"> | |
50 | <ANCHOR id="FsRawUdpStreamTransmitter--stun-ip" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip"> | |
51 | <ANCHOR id="FsRawUdpStreamTransmitter--stun-port" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port"> | |
52 | <ANCHOR id="FsRawUdpStreamTransmitter--stun-timeout" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-timeout"> | |
53 | <ANCHOR id="FsRawUdpStreamTransmitter--upnp-discovery" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery"> | |
54 | <ANCHOR id="FsRawUdpStreamTransmitter--upnp-discovery-timeout" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery-timeout"> | |
55 | <ANCHOR id="FsRawUdpStreamTransmitter--upnp-mapping" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping"> | |
56 | <ANCHOR id="FsRawUdpStreamTransmitter--upnp-mapping-timeout" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping-timeout"> | |
57 | <ANCHOR id="FsRawUdpStreamTransmitter--upnp-request-timeout" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-request-timeout"> | |
58 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.see-also" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.see-also"> | |
59 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html"> | |
60 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.synopsis"> | |
61 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.description"> | |
62 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.details"> | |
63 | <ANCHOR id="FsMulticastStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter"> | |
64 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.see-also" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.see-also"> | |
65 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html"> | |
66 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.synopsis"> | |
67 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.properties" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.properties"> | |
68 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.description"> | |
69 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.details"> | |
70 | <ANCHOR id="FsNiceStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter"> | |
71 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.property-details"> | |
72 | <ANCHOR id="FsNiceStreamTransmitter--compatibility-mode" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--compatibility-mode"> | |
73 | <ANCHOR id="FsNiceStreamTransmitter--controlling-mode" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--controlling-mode"> | |
74 | <ANCHOR id="FsNiceStreamTransmitter--debug" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--debug"> | |
75 | <ANCHOR id="FsNiceStreamTransmitter--relay-info" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--relay-info"> | |
76 | <ANCHOR id="FsNiceStreamTransmitter--stream-id" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stream-id"> | |
77 | <ANCHOR id="FsNiceStreamTransmitter--stun-ip" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-ip"> | |
78 | <ANCHOR id="FsNiceStreamTransmitter--stun-port" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-port"> | |
79 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.see-also" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.see-also"> | |
80 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html"> | |
81 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#farsight2-plugins-FsShmStreamTransmitter.synopsis"> | |
82 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#farsight2-plugins-FsShmStreamTransmitter.description"> | |
83 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#farsight2-plugins-FsShmStreamTransmitter.details"> | |
84 | <ANCHOR id="FsShmStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#FsShmStreamTransmitter"> | |
44 | <ANCHOR id="FsRtpStream--rtp-header-extensions" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#FsRtpStream--rtp-header-extensions"> | |
45 | <ANCHOR id="farsight2-plugins-FsRawConference" href="farsight2-plugins-0.10/farsight2-plugins-FsRawConference.html"> | |
46 | <ANCHOR id="farsight2-plugins-FsRawConference.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRawConference.html#farsight2-plugins-FsRawConference.synopsis"> | |
47 | <ANCHOR id="farsight2-plugins-FsRawConference.description" href="farsight2-plugins-0.10/farsight2-plugins-FsRawConference.html#farsight2-plugins-FsRawConference.description"> | |
48 | <ANCHOR id="farsight2-plugins-FsRawConference.details" href="farsight2-plugins-0.10/farsight2-plugins-FsRawConference.html#farsight2-plugins-FsRawConference.details"> | |
49 | <ANCHOR id="FsRawConference" href="farsight2-plugins-0.10/farsight2-plugins-FsRawConference.html#FsRawConference"> | |
50 | <ANCHOR id="farsight2-plugins-FsRawParticipant" href="farsight2-plugins-0.10/farsight2-plugins-FsRawParticipant.html"> | |
51 | <ANCHOR id="farsight2-plugins-FsRawParticipant.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRawParticipant.html#farsight2-plugins-FsRawParticipant.synopsis"> | |
52 | <ANCHOR id="farsight2-plugins-FsRawParticipant.description" href="farsight2-plugins-0.10/farsight2-plugins-FsRawParticipant.html#farsight2-plugins-FsRawParticipant.description"> | |
53 | <ANCHOR id="farsight2-plugins-FsRawParticipant.details" href="farsight2-plugins-0.10/farsight2-plugins-FsRawParticipant.html#farsight2-plugins-FsRawParticipant.details"> | |
54 | <ANCHOR id="FsRawParticipant" href="farsight2-plugins-0.10/farsight2-plugins-FsRawParticipant.html#FsRawParticipant"> | |
55 | <ANCHOR id="farsight2-plugins-FsRawSession" href="farsight2-plugins-0.10/farsight2-plugins-FsRawSession.html"> | |
56 | <ANCHOR id="farsight2-plugins-FsRawSession.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRawSession.html#farsight2-plugins-FsRawSession.synopsis"> | |
57 | <ANCHOR id="farsight2-plugins-FsRawSession.description" href="farsight2-plugins-0.10/farsight2-plugins-FsRawSession.html#farsight2-plugins-FsRawSession.description"> | |
58 | <ANCHOR id="farsight2-plugins-FsRawSession.details" href="farsight2-plugins-0.10/farsight2-plugins-FsRawSession.html#farsight2-plugins-FsRawSession.details"> | |
59 | <ANCHOR id="FsRawSession" href="farsight2-plugins-0.10/farsight2-plugins-FsRawSession.html#FsRawSession"> | |
60 | <ANCHOR id="farsight2-plugins-FsRawStream" href="farsight2-plugins-0.10/farsight2-plugins-FsRawStream.html"> | |
61 | <ANCHOR id="farsight2-plugins-FsRawStream.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRawStream.html#farsight2-plugins-FsRawStream.synopsis"> | |
62 | <ANCHOR id="farsight2-plugins-FsRawStream.description" href="farsight2-plugins-0.10/farsight2-plugins-FsRawStream.html#farsight2-plugins-FsRawStream.description"> | |
63 | <ANCHOR id="farsight2-plugins-FsRawStream.details" href="farsight2-plugins-0.10/farsight2-plugins-FsRawStream.html#farsight2-plugins-FsRawStream.details"> | |
64 | <ANCHOR id="FsRawStream" href="farsight2-plugins-0.10/farsight2-plugins-FsRawStream.html#FsRawStream"> | |
85 | 65 | <ANCHOR id="farsight2-plugins-FsMsnCamSendConference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamSendConference.html"> |
86 | 66 | <ANCHOR id="farsight2-plugins-FsMsnCamSendConference.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamSendConference.html#farsight2-plugins-FsMsnCamSendConference.synopsis"> |
87 | 67 | <ANCHOR id="farsight2-plugins-FsMsnCamSendConference.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamSendConference.html#farsight2-plugins-FsMsnCamSendConference.description"> |
94 | 74 | <ANCHOR id="FsMsnCamRecvConference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamCamRecvConference.html#FsMsnCamRecvConference"> |
95 | 75 | <ANCHOR id="farsight2-plugins-FsMsnConference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html"> |
96 | 76 | <ANCHOR id="farsight2-plugins-FsMsnConference.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#farsight2-plugins-FsMsnConference.synopsis"> |
97 | <ANCHOR id="farsight2-plugins-FsMsnConference.properties" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#farsight2-plugins-FsMsnConference.properties"> | |
98 | 77 | <ANCHOR id="farsight2-plugins-FsMsnConference.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#farsight2-plugins-FsMsnConference.description"> |
99 | 78 | <ANCHOR id="farsight2-plugins-FsMsnConference.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#farsight2-plugins-FsMsnConference.details"> |
100 | 79 | <ANCHOR id="FsMsnConference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#FsMsnConference"> |
101 | <ANCHOR id="farsight2-plugins-FsMsnConference.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#farsight2-plugins-FsMsnConference.property-details"> | |
102 | <ANCHOR id="FsMsnConference--local-address" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#FsMsnConference--local-address"> | |
103 | 80 | <ANCHOR id="farsight2-plugins-FsMsnParticipant" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html"> |
104 | 81 | <ANCHOR id="farsight2-plugins-FsMsnParticipant.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html#farsight2-plugins-FsMsnParticipant.synopsis"> |
105 | 82 | <ANCHOR id="farsight2-plugins-FsMsnParticipant.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html#farsight2-plugins-FsMsnParticipant.description"> |
107 | 84 | <ANCHOR id="FsMsnParticipant" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html#FsMsnParticipant"> |
108 | 85 | <ANCHOR id="farsight2-plugins-FsMsnSession" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html"> |
109 | 86 | <ANCHOR id="farsight2-plugins-FsMsnSession.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#farsight2-plugins-FsMsnSession.synopsis"> |
110 | <ANCHOR id="farsight2-plugins-FsMsnSession.properties" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#farsight2-plugins-FsMsnSession.properties"> | |
111 | 87 | <ANCHOR id="farsight2-plugins-FsMsnSession.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#farsight2-plugins-FsMsnSession.description"> |
112 | 88 | <ANCHOR id="farsight2-plugins-FsMsnSession.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#farsight2-plugins-FsMsnSession.details"> |
113 | 89 | <ANCHOR id="FsMsnSession" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#FsMsnSession"> |
114 | <ANCHOR id="farsight2-plugins-FsMsnSession.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#farsight2-plugins-FsMsnSession.property-details"> | |
115 | <ANCHOR id="FsMsnSession--conference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#FsMsnSession--conference"> | |
116 | 90 | <ANCHOR id="farsight2-plugins-FsMsnStream" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html"> |
117 | 91 | <ANCHOR id="farsight2-plugins-FsMsnStream.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#farsight2-plugins-FsMsnStream.synopsis"> |
118 | <ANCHOR id="farsight2-plugins-FsMsnStream.properties" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#farsight2-plugins-FsMsnStream.properties"> | |
119 | 92 | <ANCHOR id="farsight2-plugins-FsMsnStream.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#farsight2-plugins-FsMsnStream.description"> |
120 | 93 | <ANCHOR id="farsight2-plugins-FsMsnStream.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#farsight2-plugins-FsMsnStream.details"> |
121 | 94 | <ANCHOR id="FsMsnStream" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#FsMsnStream"> |
122 | <ANCHOR id="farsight2-plugins-FsMsnStream.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#farsight2-plugins-FsMsnStream.property-details"> | |
123 | <ANCHOR id="FsMsnStream--conference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#FsMsnStream--conference"> | |
124 | <ANCHOR id="FsMsnStream--initial-port" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#FsMsnStream--initial-port"> | |
125 | <ANCHOR id="FsMsnStream--session-id" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#FsMsnStream--session-id"> | |
95 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html"> | |
96 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.synopsis"> | |
97 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.description"> | |
98 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.details"> | |
99 | <ANCHOR id="FsRawUdpStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter"> | |
100 | <ANCHOR id="farsight2-plugins-FsRawUdpStreamTransmitter.see-also" href="farsight2-plugins-0.10/farsight2-plugins-FsRawUdpStreamTransmitter.html#farsight2-plugins-FsRawUdpStreamTransmitter.see-also"> | |
101 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html"> | |
102 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.synopsis"> | |
103 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.description"> | |
104 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.details"> | |
105 | <ANCHOR id="FsMulticastStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter"> | |
106 | <ANCHOR id="farsight2-plugins-FsMulticastStreamTransmitter.see-also" href="farsight2-plugins-0.10/farsight2-plugins-FsMulticastStreamTransmitter.html#farsight2-plugins-FsMulticastStreamTransmitter.see-also"> | |
107 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html"> | |
108 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.synopsis"> | |
109 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.description"> | |
110 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.details"> | |
111 | <ANCHOR id="FsNiceStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter"> | |
112 | <ANCHOR id="farsight2-plugins-FsNiceStreamTransmitter.see-also" href="farsight2-plugins-0.10/farsight2-plugins-FsNiceStreamTransmitter.html#farsight2-plugins-FsNiceStreamTransmitter.see-also"> | |
113 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html"> | |
114 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#farsight2-plugins-FsShmStreamTransmitter.synopsis"> | |
115 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter.description" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#farsight2-plugins-FsShmStreamTransmitter.description"> | |
116 | <ANCHOR id="farsight2-plugins-FsShmStreamTransmitter.details" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#farsight2-plugins-FsShmStreamTransmitter.details"> | |
117 | <ANCHOR id="FsShmStreamTransmitter" href="farsight2-plugins-0.10/farsight2-plugins-FsShmStreamTransmitter.html#FsShmStreamTransmitter"> | |
126 | 118 | <ANCHOR id="farsight2-plugins-FsFunnel" href="farsight2-plugins-0.10/farsight2-plugins-FsFunnel.html"> |
127 | 119 | <ANCHOR id="farsight2-plugins-FsFunnel.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsFunnel.html#farsight2-plugins-FsFunnel.synopsis"> |
128 | 120 | <ANCHOR id="farsight2-plugins-FsFunnel.description" href="farsight2-plugins-0.10/farsight2-plugins-FsFunnel.html#farsight2-plugins-FsFunnel.description"> |
1 | 1 | <html> |
2 | 2 | <head> |
3 | 3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
4 | <title>Part I. RTP Plugin</title> | |
4 | <title>Part I. Plugins implementing FsConference</title> | |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | 7 | <link rel="up" href="index.html" title="Farsight2 Plugins Manual"> |
8 | 8 | <link rel="prev" href="index.html" title="Farsight2 Plugins Manual"> |
9 | <link rel="next" href="ch01.html" title="Core interface classes"> | |
9 | <link rel="next" href="ch01.html" title="RTP Plugin"> | |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
18 | 18 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
19 | 19 | <td><a accesskey="n" href="ch01.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> |
20 | 20 | </tr></table> |
21 | <div class="part" title="Part I. RTP Plugin"> | |
21 | <div class="part" title="Part I. Plugins implementing FsConference"> | |
22 | 22 | <div class="titlepage"><div><div><h1 class="title"> |
23 | <a name="id428657"></a>Part I. RTP Plugin</h1></div></div></div> | |
23 | <a name="id386844"></a>Part I. Plugins implementing FsConference</h1></div></div></div> | |
24 | 24 | <div class="toc"> |
25 | 25 | <p><b>Table of Contents</b></p> |
26 | 26 | <dl> |
27 | <dt><span class="chapter"><a href="ch01.html">Core interface classes</a></span></dt> | |
27 | <dt><span class="chapter"><a href="ch01.html">RTP Plugin</a></span></dt> | |
28 | 28 | <dd><dl> |
29 | 29 | <dt> |
30 | 30 | <span class="refentrytitle"><a href="farsight2-plugins-FsRtpConference.html">FsRtpConference</a></span><span class="refpurpose"> — Farsight RTP Conference Gstreamer Elements</span> |
39 | 39 | <span class="refentrytitle"><a href="farsight2-plugins-FsRtpStream.html">FsRtpStream</a></span><span class="refpurpose"> — A RTP stream in a <a class="link" href="farsight2-plugins-FsRtpSession.html#FsRtpSession" title="FsRtpSession"><span class="type">FsRtpSession</span></a> in a <a class="link" href="farsight2-plugins-FsRtpConference.html#FsRtpConference" title="FsRtpConference"><span class="type">FsRtpConference</span></a></span> |
40 | 40 | </dt> |
41 | 41 | </dl></dd> |
42 | <dt><span class="chapter"><a href="ch02.html">Transmitters</a></span></dt> | |
42 | <dt><span class="chapter"><a href="ch02.html">Raw Plugin</a></span></dt> | |
43 | 43 | <dd><dl> |
44 | 44 | <dt> |
45 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawUdpStreamTransmitter.html">FsRawUdpStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for UDP with STUN</span> | |
45 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawConference.html">FsRawConference</a></span><span class="refpurpose"> — Farsight Raw Conference Gstreamer Elements Base class</span> | |
46 | 46 | </dt> |
47 | 47 | <dt> |
48 | <span class="refentrytitle"><a href="farsight2-plugins-FsMulticastStreamTransmitter.html">FsMulticastStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Multicast UDP</span> | |
48 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawParticipant.html">FsRawParticipant</a></span><span class="refpurpose"> — A Raw participant in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
49 | 49 | </dt> |
50 | 50 | <dt> |
51 | <span class="refentrytitle"><a href="farsight2-plugins-FsNiceStreamTransmitter.html">FsNiceStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for ICE using libnice</span> | |
51 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawSession.html">FsRawSession</a></span><span class="refpurpose"> — A Raw session in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
52 | 52 | </dt> |
53 | 53 | <dt> |
54 | <span class="refentrytitle"><a href="farsight2-plugins-FsShmStreamTransmitter.html">FsShmStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Shared Memory</span> | |
54 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawStream.html">FsRawStream</a></span><span class="refpurpose"> — A raw stream in a <a class="link" href="farsight2-plugins-FsRawSession.html#FsRawSession" title="FsRawSession"><span class="type">FsRawSession</span></a> in a <a class="link" href="farsight2-plugins-FsRawConference.html#FsRawConference" title="FsRawConference"><span class="type">FsRawConference</span></a></span> | |
55 | </dt> | |
56 | </dl></dd> | |
57 | <dt><span class="chapter"><a href="ch03.html">MSN Webcam plugin</a></span></dt> | |
58 | <dd><dl> | |
59 | <dt> | |
60 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnCamSendConference.html">FsMsnCamSendConference</a></span><span class="refpurpose"> — Farsight MSN send Conference Gstreamer Element</span> | |
61 | </dt> | |
62 | <dt> | |
63 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnCamCamRecvConference.html">FsMsnCamCamRecvConference</a></span><span class="refpurpose"> — Farsight MSN Receive Conference Gstreamer Element</span> | |
64 | </dt> | |
65 | <dt> | |
66 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnConference.html">FsMsnConference</a></span><span class="refpurpose"> — Farsight MSN Conference Gstreamer Elements Base class</span> | |
67 | </dt> | |
68 | <dt> | |
69 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnParticipant.html">FsMsnParticipant</a></span><span class="refpurpose"> — A MSN participant in a <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a></span> | |
70 | </dt> | |
71 | <dt> | |
72 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnSession.html">FsMsnSession</a></span><span class="refpurpose"> — A MSN session in a <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a></span> | |
73 | </dt> | |
74 | <dt> | |
75 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnStream.html">FsMsnStream</a></span><span class="refpurpose"> — A MSN stream in a <a class="link" href="farsight2-plugins-FsMsnSession.html#FsMsnSession" title="FsMsnSession"><span class="type">FsMsnSession</span></a> in a <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a></span> | |
55 | 76 | </dt> |
56 | 77 | </dl></dd> |
57 | 78 | </dl> |
1 | 1 | <html> |
2 | 2 | <head> |
3 | 3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
4 | <title>Part II. MSN plugins</title> | |
4 | <title>Part II. Transmitters</title> | |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | 7 | <link rel="up" href="index.html" title="Farsight2 Plugins Manual"> |
8 | <link rel="prev" href="farsight2-plugins-FsShmStreamTransmitter.html" title="FsShmStreamTransmitter"> | |
9 | <link rel="next" href="ch03.html" title="MSN Webcam plugin"> | |
8 | <link rel="prev" href="farsight2-plugins-FsMsnStream.html" title="FsMsnStream"> | |
9 | <link rel="next" href="farsight2-plugins-FsRawUdpStreamTransmitter.html" title="FsRawUdpStreamTransmitter"> | |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
13 | 13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> |
15 | <td><a accesskey="p" href="farsight2-plugins-FsShmStreamTransmitter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
15 | <td><a accesskey="p" href="farsight2-plugins-FsMsnStream.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
16 | 16 | <td> </td> |
17 | 17 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
18 | 18 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
19 | <td><a accesskey="n" href="ch03.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
19 | <td><a accesskey="n" href="farsight2-plugins-FsRawUdpStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> | |
20 | 20 | </tr></table> |
21 | <div class="part" title="Part II. MSN plugins"> | |
21 | <div class="part" title="Part II. Transmitters"> | |
22 | 22 | <div class="titlepage"><div><div><h1 class="title"> |
23 | <a name="id433913"></a>Part II. MSN plugins</h1></div></div></div> | |
23 | <a name="id392133"></a>Part II. Transmitters</h1></div></div></div> | |
24 | 24 | <div class="toc"> |
25 | 25 | <p><b>Table of Contents</b></p> |
26 | 26 | <dl> |
27 | <dt><span class="chapter"><a href="ch03.html">MSN Webcam plugin</a></span></dt> | |
28 | <dd><dl> | |
29 | 27 | <dt> |
30 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnCamSendConference.html">FsMsnCamSendConference</a></span><span class="refpurpose"> — Farsight MSN send Conference Gstreamer Element</span> | |
28 | <span class="refentrytitle"><a href="farsight2-plugins-FsRawUdpStreamTransmitter.html">FsRawUdpStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for UDP with STUN</span> | |
31 | 29 | </dt> |
32 | 30 | <dt> |
33 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnCamCamRecvConference.html">FsMsnCamCamRecvConference</a></span><span class="refpurpose"> — Farsight MSN Receive Conference Gstreamer Element</span> | |
31 | <span class="refentrytitle"><a href="farsight2-plugins-FsMulticastStreamTransmitter.html">FsMulticastStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Multicast UDP</span> | |
34 | 32 | </dt> |
35 | 33 | <dt> |
36 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnConference.html">FsMsnConference</a></span><span class="refpurpose"> — Farsight MSN Conference Gstreamer Elements Base class</span> | |
34 | <span class="refentrytitle"><a href="farsight2-plugins-FsNiceStreamTransmitter.html">FsNiceStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for ICE using libnice</span> | |
37 | 35 | </dt> |
38 | 36 | <dt> |
39 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnParticipant.html">FsMsnParticipant</a></span><span class="refpurpose"> — A MSN participant in a <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a></span> | |
37 | <span class="refentrytitle"><a href="farsight2-plugins-FsShmStreamTransmitter.html">FsShmStreamTransmitter</a></span><span class="refpurpose"> — A stream transmitter object for Shared Memory</span> | |
40 | 38 | </dt> |
41 | <dt> | |
42 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnSession.html">FsMsnSession</a></span><span class="refpurpose"> — A MSN session in a <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a></span> | |
43 | </dt> | |
44 | <dt> | |
45 | <span class="refentrytitle"><a href="farsight2-plugins-FsMsnStream.html">FsMsnStream</a></span><span class="refpurpose"> — A MSN stream in a <a class="link" href="farsight2-plugins-FsMsnSession.html#FsMsnSession" title="FsMsnSession"><span class="type">FsMsnSession</span></a> in a <a class="link" href="farsight2-plugins-FsMsnConference.html#FsMsnConference" title="FsMsnConference"><span class="type">FsMsnConference</span></a></span> | |
46 | </dt> | |
47 | </dl></dd> | |
48 | 39 | </dl> |
49 | 40 | </div> |
50 | 41 | </div> |
5 | 5 | <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> |
6 | 6 | <link rel="home" href="index.html" title="Farsight2 Plugins Manual"> |
7 | 7 | <link rel="up" href="index.html" title="Farsight2 Plugins Manual"> |
8 | <link rel="prev" href="farsight2-plugins-FsMsnStream.html" title="FsMsnStream"> | |
8 | <link rel="prev" href="farsight2-plugins-FsShmStreamTransmitter.html" title="FsShmStreamTransmitter"> | |
9 | 9 | <link rel="next" href="farsight2-plugins-FsFunnel.html" title="FsFunnel"> |
10 | 10 | <meta name="generator" content="GTK-Doc V1.15 (XML mode)"> |
11 | 11 | <link rel="stylesheet" href="style.css" type="text/css"> |
12 | 12 | </head> |
13 | 13 | <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
14 | 14 | <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> |
15 | <td><a accesskey="p" href="farsight2-plugins-FsMsnStream.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
15 | <td><a accesskey="p" href="farsight2-plugins-FsShmStreamTransmitter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> | |
16 | 16 | <td> </td> |
17 | 17 | <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> |
18 | 18 | <th width="100%" align="center">Farsight2 Plugins Manual</th> |
20 | 20 | </tr></table> |
21 | 21 | <div class="part" title="Part III. Utility elements"> |
22 | 22 | <div class="titlepage"><div><div><h1 class="title"> |
23 | <a name="id429617"></a>Part III. Utility elements</h1></div></div></div> | |
23 | <a name="id387822"></a>Part III. Utility elements</h1></div></div></div> | |
24 | 24 | <div class="toc"> |
25 | 25 | <p><b>Table of Contents</b></p> |
26 | 26 | <dl> |
0 | <plugin> | |
1 | <name>fsfec</name> | |
2 | <description>FEC encoding/decoding modules</description> | |
3 | <filename>../../gst/fec/.libs/libfsfec.so</filename> | |
4 | <basename>libfsfec.so</basename> | |
5 | <version>0.0.22.1</version> | |
6 | <license>LGPL</license> | |
7 | <source>farsight2</source> | |
8 | <package>Farsight</package> | |
9 | <origin>http://farsight.sf.net</origin> | |
10 | <elements> | |
11 | <element> | |
12 | <name>fsfecrizzodec</name> | |
13 | <longname>Reed-Solomon Coder</longname> | |
14 | <class>Decoder</class> | |
15 | <description>RTP Reed-Solomon FEC decoder using the Rizzo implementation</description> | |
16 | <author>Olivier Crete <olivier.crete@collabora.co.uk></author> | |
17 | <pads> | |
18 | <caps> | |
19 | <name>sink</name> | |
20 | <direction>sink</direction> | |
21 | <presence>always</presence> | |
22 | <details>application/x-rtp</details> | |
23 | </caps> | |
24 | <caps> | |
25 | <name>src</name> | |
26 | <direction>source</direction> | |
27 | <presence>always</presence> | |
28 | <details>application/x-rtp</details> | |
29 | </caps> | |
30 | </pads> | |
31 | </element> | |
32 | <element> | |
33 | <name>fsfecrizzoenc</name> | |
34 | <longname>Reed-Solomon Coder</longname> | |
35 | <class>Encoder</class> | |
36 | <description>RTP Reed-Solomon FEC encoder using the Rizzo implementation</description> | |
37 | <author>Olivier Crete <olivier.crete@collabora.co.uk></author> | |
38 | <pads> | |
39 | <caps> | |
40 | <name>sink</name> | |
41 | <direction>sink</direction> | |
42 | <presence>always</presence> | |
43 | <details>application/x-rtp</details> | |
44 | </caps> | |
45 | <caps> | |
46 | <name>src</name> | |
47 | <direction>source</direction> | |
48 | <presence>always</presence> | |
49 | <details>application/x-rtp</details> | |
50 | </caps> | |
51 | </pads> | |
52 | </element> | |
53 | </elements> | |
54 | </plugin>⏎ |
2 | 2 | <description>Farsight Funnel plugin</description> |
3 | 3 | <filename>../../gst/funnel/.libs/libfsfunnel.so</filename> |
4 | 4 | <basename>libfsfunnel.so</basename> |
5 | <version>0.0.22.1</version> | |
5 | <version>0.0.21.1</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>farsight2</source> |
8 | 8 | <package>Farsight</package> |
2 | 2 | <description>Farsight MSN Conference plugin</description> |
3 | 3 | <filename>../../gst/fsmsnconference/.libs/libfsmsnconference.so</filename> |
4 | 4 | <basename>libfsmsnconference.so</basename> |
5 | <version>0.0.22.1</version> | |
5 | <version>0.0.21.1</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>farsight2</source> |
8 | 8 | <package>Farsight</package> |
2 | 2 | <description>Farsight Raw Conference plugin</description> |
3 | 3 | <filename>../../gst/fsrawconference/.libs/libfsrawconference.so</filename> |
4 | 4 | <basename>libfsrawconference.so</basename> |
5 | <version>0.0.22.1</version> | |
5 | <version>0.0.21.1</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>farsight2</source> |
8 | 8 | <package>Farsight</package> |
2 | 2 | <description>RtcpFilter</description> |
3 | 3 | <filename>../../gst/rtcpfilter/.libs/libfsrtcpfilter.so</filename> |
4 | 4 | <basename>libfsrtcpfilter.so</basename> |
5 | <version>0.0.22.1</version> | |
5 | <version>0.0.21.1</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>farsight2</source> |
8 | 8 | <package>Farsight</package> |
2 | 2 | <description>Farsight RTP Conference plugin</description> |
3 | 3 | <filename>../../gst/fsrtpconference/.libs/libfsrtpconference.so</filename> |
4 | 4 | <basename>libfsrtpconference.so</basename> |
5 | <version>0.0.22.1</version> | |
5 | <version>0.0.21.1</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>farsight2</source> |
8 | 8 | <package>Farsight</package> |
2 | 2 | <description>Videoanyrate</description> |
3 | 3 | <filename>../../gst/videoanyrate/.libs/libfsvideoanyrate.so</filename> |
4 | 4 | <basename>libfsvideoanyrate.so</basename> |
5 | <version>0.0.22.1</version> | |
5 | <version>0.0.21.1</version> | |
6 | 6 | <license>LGPL</license> |
7 | 7 | <source>farsight2</source> |
8 | 8 | <package>Farsight</package> |
0 | plugin_LTLIBRARIES = libfsrawconference.la | |
1 | ||
2 | ||
3 | # First build a convenience lib with the common stuff so its not built twice | |
4 | ||
5 | noinst_LTLIBRARIES = libfsrawconference-convenience.la | |
6 | ||
7 | libfsrawconference_convenience_la_SOURCES = \ | |
8 | fs-raw-conference.c \ | |
9 | fs-raw-session.c \ | |
10 | fs-raw-stream.c \ | |
11 | fs-raw-participant.c | |
12 | ||
13 | noinst_HEADERS = \ | |
14 | fs-raw-conference.h \ | |
15 | fs-raw-session.h \ | |
16 | fs-raw-stream.h \ | |
17 | fs-raw-participant.h | |
18 | ||
19 | ||
20 | AM_CFLAGS = \ | |
21 | $(FS2_INTERNAL_CFLAGS) \ | |
22 | $(FS2_CFLAGS) \ | |
23 | $(GST_PLUGINS_BASE_CFLAGS) \ | |
24 | $(GST_CFLAGS) | |
25 | ||
26 | # Build the main plugin | |
27 | ||
28 | libfsrawconference_la_SOURCES = fs-raw-conference-plugin.c | |
29 | ||
30 | libfsrawconference_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) | |
31 | libfsrawconference_la_LIBADD = \ | |
32 | libfsrawconference-convenience.la \ | |
33 | $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \ | |
34 | $(FS2_LIBS) \ | |
35 | $(GST_BASE_LIBS) \ | |
36 | $(GST_LIBS) | |
37 | ||
38 | ||
39 | ||
40 | # Optionally build a library to allow building the gtk-doc | |
41 | ||
42 | if ENABLE_GTK_DOC | |
43 | noinst_LTLIBRARIES += libfsrawconference_doc.la | |
44 | ||
45 | nodist_libfsrawconference_doc_la_SOURCES = \ | |
46 | fs-raw-conference-plugin.doc.c \ | |
47 | $(libfsrawconference_la_SOURCES) | |
48 | ||
49 | libfsrawconference_doc_la_LIBADD = $(libfsrawconference_la_LIBADD) | |
50 | ||
51 | %.doc.c: %.c | |
52 | $(AM_V_GEN)sed -e 's:GST_PLUGIN_DEFINE:GST_PLUGIN_DEFINE_STATIC:' $< > $@ | |
53 | ||
54 | BUILT_SOURCES = fs-raw-conference-plugin.doc.c | |
55 | ||
56 | CLEANFILES = $(BUILT_SOURCES) | |
57 | ||
58 | endif | |
59 |
0 | # Makefile.in generated by automake 1.11.1 from Makefile.am. | |
1 | # @configure_input@ | |
2 | ||
3 | # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, | |
4 | # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, | |
5 | # Inc. | |
6 | # This Makefile.in is free software; the Free Software Foundation | |
7 | # gives unlimited permission to copy and/or distribute it, | |
8 | # with or without modifications, as long as this notice is preserved. | |
9 | ||
10 | # This program is distributed in the hope that it will be useful, | |
11 | # but WITHOUT ANY WARRANTY, to the extent permitted by law; without | |
12 | # even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |
13 | # PARTICULAR PURPOSE. | |
14 | ||
15 | @SET_MAKE@ | |
16 | ||
17 | ||
18 | VPATH = @srcdir@ | |
19 | pkgdatadir = $(datadir)/@PACKAGE@ | |
20 | pkgincludedir = $(includedir)/@PACKAGE@ | |
21 | pkglibdir = $(libdir)/@PACKAGE@ | |
22 | pkglibexecdir = $(libexecdir)/@PACKAGE@ | |
23 | am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | |
24 | install_sh_DATA = $(install_sh) -c -m 644 | |
25 | install_sh_PROGRAM = $(install_sh) -c | |
26 | install_sh_SCRIPT = $(install_sh) -c | |
27 | INSTALL_HEADER = $(INSTALL_DATA) | |
28 | transform = $(program_transform_name) | |
29 | NORMAL_INSTALL = : | |
30 | PRE_INSTALL = : | |
31 | POST_INSTALL = : | |
32 | NORMAL_UNINSTALL = : | |
33 | PRE_UNINSTALL = : | |
34 | POST_UNINSTALL = : | |
35 | build_triplet = @build@ | |
36 | host_triplet = @host@ | |
37 | ||
38 | # Optionally build a library to allow building the gtk-doc | |
39 | @ENABLE_GTK_DOC_TRUE@am__append_1 = libfsrawconference_doc.la | |
40 | subdir = gst/fsrawconference | |
41 | DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ | |
42 | $(srcdir)/Makefile.in | |
43 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | |
44 | am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ | |
45 | $(top_srcdir)/common/m4/as-auto-alt.m4 \ | |
46 | $(top_srcdir)/common/m4/as-compiler-flag.m4 \ | |
47 | $(top_srcdir)/common/m4/as-libtool.m4 \ | |
48 | $(top_srcdir)/common/m4/as-scrub-include.m4 \ | |
49 | $(top_srcdir)/common/m4/as-version.m4 \ | |
50 | $(top_srcdir)/common/m4/gst-arch.m4 \ | |
51 | $(top_srcdir)/common/m4/gst-args.m4 \ | |
52 | $(top_srcdir)/common/m4/gst-check.m4 \ | |
53 | $(top_srcdir)/common/m4/gst-error.m4 \ | |
54 | $(top_srcdir)/common/m4/gst-glib2.m4 \ | |
55 | $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ | |
56 | $(top_srcdir)/common/m4/gst-plugindir.m4 \ | |
57 | $(top_srcdir)/common/m4/gst.m4 \ | |
58 | $(top_srcdir)/common/m4/gtk-doc.m4 \ | |
59 | $(top_srcdir)/common/m4/pkg.m4 \ | |
60 | $(top_srcdir)/m4/as-check-python-headers.m4 \ | |
61 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | |
62 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | |
63 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac | |
64 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | |
65 | $(ACLOCAL_M4) | |
66 | mkinstalldirs = $(install_sh) -d | |
67 | CONFIG_HEADER = $(top_builddir)/config.h | |
68 | CONFIG_CLEAN_FILES = | |
69 | CONFIG_CLEAN_VPATH_FILES = | |
70 | am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; | |
71 | am__vpath_adj = case $$p in \ | |
72 | $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ | |
73 | *) f=$$p;; \ | |
74 | esac; | |
75 | am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; | |
76 | am__install_max = 40 | |
77 | am__nobase_strip_setup = \ | |
78 | srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` | |
79 | am__nobase_strip = \ | |
80 | for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" | |
81 | am__nobase_list = $(am__nobase_strip_setup); \ | |
82 | for p in $$list; do echo "$$p $$p"; done | \ | |
83 | sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ | |
84 | $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ | |
85 | if (++n[$$2] == $(am__install_max)) \ | |
86 | { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ | |
87 | END { for (dir in files) print dir, files[dir] }' | |
88 | am__base_list = \ | |
89 | sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ | |
90 | sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | |
91 | am__installdirs = "$(DESTDIR)$(plugindir)" | |
92 | LTLIBRARIES = $(noinst_LTLIBRARIES) $(plugin_LTLIBRARIES) | |
93 | libfsrawconference_convenience_la_LIBADD = | |
94 | am_libfsrawconference_convenience_la_OBJECTS = fs-raw-conference.lo \ | |
95 | fs-raw-session.lo fs-raw-stream.lo fs-raw-participant.lo | |
96 | libfsrawconference_convenience_la_OBJECTS = \ | |
97 | $(am_libfsrawconference_convenience_la_OBJECTS) | |
98 | AM_V_lt = $(am__v_lt_$(V)) | |
99 | am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) | |
100 | am__v_lt_0 = --silent | |
101 | am__DEPENDENCIES_1 = | |
102 | libfsrawconference_la_DEPENDENCIES = \ | |
103 | libfsrawconference-convenience.la \ | |
104 | $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \ | |
105 | $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ | |
106 | $(am__DEPENDENCIES_1) | |
107 | am_libfsrawconference_la_OBJECTS = fs-raw-conference-plugin.lo | |
108 | libfsrawconference_la_OBJECTS = $(am_libfsrawconference_la_OBJECTS) | |
109 | libfsrawconference_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ | |
110 | $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ | |
111 | $(AM_CFLAGS) $(CFLAGS) $(libfsrawconference_la_LDFLAGS) \ | |
112 | $(LDFLAGS) -o $@ | |
113 | am__DEPENDENCIES_2 = libfsrawconference-convenience.la \ | |
114 | $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \ | |
115 | $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ | |
116 | $(am__DEPENDENCIES_1) | |
117 | @ENABLE_GTK_DOC_TRUE@libfsrawconference_doc_la_DEPENDENCIES = \ | |
118 | @ENABLE_GTK_DOC_TRUE@ $(am__DEPENDENCIES_2) | |
119 | am__objects_1 = fs-raw-conference-plugin.lo | |
120 | @ENABLE_GTK_DOC_TRUE@nodist_libfsrawconference_doc_la_OBJECTS = \ | |
121 | @ENABLE_GTK_DOC_TRUE@ fs-raw-conference-plugin.doc.lo \ | |
122 | @ENABLE_GTK_DOC_TRUE@ $(am__objects_1) | |
123 | libfsrawconference_doc_la_OBJECTS = \ | |
124 | $(nodist_libfsrawconference_doc_la_OBJECTS) | |
125 | @ENABLE_GTK_DOC_TRUE@am_libfsrawconference_doc_la_rpath = | |
126 | DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) | |
127 | depcomp = $(SHELL) $(top_srcdir)/depcomp | |
128 | am__depfiles_maybe = depfiles | |
129 | am__mv = mv -f | |
130 | COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ | |
131 | $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | |
132 | LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ | |
133 | $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ | |
134 | $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ | |
135 | $(AM_CFLAGS) $(CFLAGS) | |
136 | AM_V_CC = $(am__v_CC_$(V)) | |
137 | am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) | |
138 | am__v_CC_0 = @echo " CC " $@; | |
139 | AM_V_at = $(am__v_at_$(V)) | |
140 | am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) | |
141 | am__v_at_0 = @ | |
142 | CCLD = $(CC) | |
143 | LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ | |
144 | $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | |
145 | $(AM_LDFLAGS) $(LDFLAGS) -o $@ | |
146 | AM_V_CCLD = $(am__v_CCLD_$(V)) | |
147 | am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) | |
148 | am__v_CCLD_0 = @echo " CCLD " $@; | |
149 | AM_V_GEN = $(am__v_GEN_$(V)) | |
150 | am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) | |
151 | am__v_GEN_0 = @echo " GEN " $@; | |
152 | SOURCES = $(libfsrawconference_convenience_la_SOURCES) \ | |
153 | $(libfsrawconference_la_SOURCES) \ | |
154 | $(nodist_libfsrawconference_doc_la_SOURCES) | |
155 | DIST_SOURCES = $(libfsrawconference_convenience_la_SOURCES) \ | |
156 | $(libfsrawconference_la_SOURCES) | |
157 | HEADERS = $(noinst_HEADERS) | |
158 | ETAGS = etags | |
159 | CTAGS = ctags | |
160 | DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | |
161 | ACLOCAL = @ACLOCAL@ | |
162 | ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ | |
163 | AMTAR = @AMTAR@ | |
164 | AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ | |
165 | AR = @AR@ | |
166 | AUTOCONF = @AUTOCONF@ | |
167 | AUTOHEADER = @AUTOHEADER@ | |
168 | AUTOMAKE = @AUTOMAKE@ | |
169 | AWK = @AWK@ | |
170 | CC = @CC@ | |
171 | CCASFLAGS = @CCASFLAGS@ | |
172 | CCDEPMODE = @CCDEPMODE@ | |
173 | CFLAGS = @CFLAGS@ | |
174 | CPP = @CPP@ | |
175 | CPPFLAGS = @CPPFLAGS@ | |
176 | CXXFLAGS = @CXXFLAGS@ | |
177 | CYGPATH_W = @CYGPATH_W@ | |
178 | DEFS = @DEFS@ | |
179 | DEPDIR = @DEPDIR@ | |
180 | DSYMUTIL = @DSYMUTIL@ | |
181 | DUMPBIN = @DUMPBIN@ | |
182 | ECHO_C = @ECHO_C@ | |
183 | ECHO_N = @ECHO_N@ | |
184 | ECHO_T = @ECHO_T@ | |
185 | EGREP = @EGREP@ | |
186 | ERROR_CFLAGS = @ERROR_CFLAGS@ | |
187 | EXEEXT = @EXEEXT@ | |
188 | FFLAGS = @FFLAGS@ | |
189 | FGREP = @FGREP@ | |
190 | FS2_AGE = @FS2_AGE@ | |
191 | FS2_ALL_LDFLAGS = @FS2_ALL_LDFLAGS@ | |
192 | FS2_CFLAGS = @FS2_CFLAGS@ | |
193 | FS2_CURRENT = @FS2_CURRENT@ | |
194 | FS2_INTERNAL_CFLAGS = @FS2_INTERNAL_CFLAGS@ | |
195 | FS2_LIBS = @FS2_LIBS@ | |
196 | FS2_LIBVERSION = @FS2_LIBVERSION@ | |
197 | FS2_LIB_LDFLAGS = @FS2_LIB_LDFLAGS@ | |
198 | FS2_LICENSE = @FS2_LICENSE@ | |
199 | FS2_LT_LDFLAGS = @FS2_LT_LDFLAGS@ | |
200 | FS2_MAJORMINOR = @FS2_MAJORMINOR@ | |
201 | FS2_OPTION_CFLAGS = @FS2_OPTION_CFLAGS@ | |
202 | FS2_PLUGINS_ALL = @FS2_PLUGINS_ALL@ | |
203 | FS2_PLUGINS_SELECTED = @FS2_PLUGINS_SELECTED@ | |
204 | FS2_PLUGIN_LDFLAGS = @FS2_PLUGIN_LDFLAGS@ | |
205 | FS2_PLUGIN_PATH = @FS2_PLUGIN_PATH@ | |
206 | FS2_PREFIX = @FS2_PREFIX@ | |
207 | FS2_REVISION = @FS2_REVISION@ | |
208 | FS2_TRANSMITTER_PLUGINS_ALL = @FS2_TRANSMITTER_PLUGINS_ALL@ | |
209 | FS2_TRANSMITTER_PLUGINS_SELECTED = @FS2_TRANSMITTER_PLUGINS_SELECTED@ | |
210 | GCOV = @GCOV@ | |
211 | GCOV_CFLAGS = @GCOV_CFLAGS@ | |
212 | GCOV_LIBS = @GCOV_LIBS@ | |
213 | GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@ | |
214 | GIO_UNIX_LIBS = @GIO_UNIX_LIBS@ | |
215 | GLIB_CFLAGS = @GLIB_CFLAGS@ | |
216 | GLIB_LIBS = @GLIB_LIBS@ | |
217 | GLIB_PREFIX = @GLIB_PREFIX@ | |
218 | GLIB_REQ = @GLIB_REQ@ | |
219 | GREP = @GREP@ | |
220 | GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@ | |
221 | GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ | |
222 | GST_BASE_LIBS = @GST_BASE_LIBS@ | |
223 | GST_CFLAGS = @GST_CFLAGS@ | |
224 | GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@ | |
225 | GST_CHECK_LIBS = @GST_CHECK_LIBS@ | |
226 | GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@ | |
227 | GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@ | |
228 | GST_LIBS = @GST_LIBS@ | |
229 | GST_MAJORMINOR = @GST_MAJORMINOR@ | |
230 | GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ | |
231 | GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@ | |
232 | GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ | |
233 | GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@ | |
234 | GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ | |
235 | GST_PLUGINS_DIR = @GST_PLUGINS_DIR@ | |
236 | GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ | |
237 | GST_TOOLS_DIR = @GST_TOOLS_DIR@ | |
238 | GTKDOC_CHECK = @GTKDOC_CHECK@ | |
239 | GUPNP_013_CFLAGS = @GUPNP_013_CFLAGS@ | |
240 | GUPNP_013_LIBS = @GUPNP_013_LIBS@ | |
241 | GUPNP_CFLAGS = @GUPNP_CFLAGS@ | |
242 | GUPNP_LIBS = @GUPNP_LIBS@ | |
243 | HTML_DIR = @HTML_DIR@ | |
244 | INSTALL = @INSTALL@ | |
245 | INSTALL_DATA = @INSTALL_DATA@ | |
246 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ | |
247 | INSTALL_SCRIPT = @INSTALL_SCRIPT@ | |
248 | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | |
249 | LD = @LD@ | |
250 | LDFLAGS = @LDFLAGS@ | |
251 | LIBOBJS = @LIBOBJS@ | |
252 | LIBS = @LIBS@ | |
253 | LIBTOOL = @LIBTOOL@ | |
254 | LIPO = @LIPO@ | |
255 | LN_S = @LN_S@ | |
256 | LTLIBOBJS = @LTLIBOBJS@ | |
257 | MAKEINFO = @MAKEINFO@ | |
258 | MKDIR_P = @MKDIR_P@ | |
259 | NICE_CFLAGS = @NICE_CFLAGS@ | |
260 | NICE_LIBS = @NICE_LIBS@ | |
261 | NM = @NM@ | |
262 | NMEDIT = @NMEDIT@ | |
263 | OBJDUMP = @OBJDUMP@ | |
264 | OBJEXT = @OBJEXT@ | |
265 | OTOOL = @OTOOL@ | |
266 | OTOOL64 = @OTOOL64@ | |
267 | PACKAGE = @PACKAGE@ | |
268 | PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ | |
269 | PACKAGE_NAME = @PACKAGE_NAME@ | |
270 | PACKAGE_STRING = @PACKAGE_STRING@ | |
271 | PACKAGE_TARNAME = @PACKAGE_TARNAME@ | |
272 | PACKAGE_URL = @PACKAGE_URL@ | |
273 | PACKAGE_VERSION = @PACKAGE_VERSION@ | |
274 | PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ | |
275 | PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ | |
276 | PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ | |
277 | PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ | |
278 | PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ | |
279 | PATH_SEPARATOR = @PATH_SEPARATOR@ | |
280 | PKG_CONFIG = @PKG_CONFIG@ | |
281 | PLUGINDIR = @PLUGINDIR@ | |
282 | PROFILE_CFLAGS = @PROFILE_CFLAGS@ | |
283 | PYCODEGEN = @PYCODEGEN@ | |
284 | PYCODEGEN_CFLAGS = @PYCODEGEN_CFLAGS@ | |
285 | PYCODEGEN_LIBS = @PYCODEGEN_LIBS@ | |
286 | PYFARSIGHT_CFLAGS = @PYFARSIGHT_CFLAGS@ | |
287 | PYFARSIGHT_LIBS = @PYFARSIGHT_LIBS@ | |
288 | PYTHON = @PYTHON@ | |
289 | PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ | |
290 | PYTHON_INCLUDES = @PYTHON_INCLUDES@ | |
291 | PYTHON_PLATFORM = @PYTHON_PLATFORM@ | |
292 | PYTHON_PREFIX = @PYTHON_PREFIX@ | |
293 | PYTHON_VERSION = @PYTHON_VERSION@ | |
294 | RANLIB = @RANLIB@ | |
295 | SED = @SED@ | |
296 | SET_MAKE = @SET_MAKE@ | |
297 | SHELL = @SHELL@ | |
298 | STRIP = @STRIP@ | |
299 | VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | |
300 | VALGRIND_LIBS = @VALGRIND_LIBS@ | |
301 | VALGRIND_PATH = @VALGRIND_PATH@ | |
302 | VERSION = @VERSION@ | |
303 | WARNING_CFLAGS = @WARNING_CFLAGS@ | |
304 | abs_builddir = @abs_builddir@ | |
305 | abs_srcdir = @abs_srcdir@ | |
306 | abs_top_builddir = @abs_top_builddir@ | |
307 | abs_top_srcdir = @abs_top_srcdir@ | |
308 | ac_ct_CC = @ac_ct_CC@ | |
309 | ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ | |
310 | am__include = @am__include@ | |
311 | am__leading_dot = @am__leading_dot@ | |
312 | am__quote = @am__quote@ | |
313 | am__tar = @am__tar@ | |
314 | am__untar = @am__untar@ | |
315 | bindir = @bindir@ | |
316 | build = @build@ | |
317 | build_alias = @build_alias@ | |
318 | build_cpu = @build_cpu@ | |
319 | build_os = @build_os@ | |
320 | build_vendor = @build_vendor@ | |
321 | builddir = @builddir@ | |
322 | datadir = @datadir@ | |
323 | datarootdir = @datarootdir@ | |
324 | docdir = @docdir@ | |
325 | dvidir = @dvidir@ | |
326 | exec_prefix = @exec_prefix@ | |
327 | host = @host@ | |
328 | host_alias = @host_alias@ | |
329 | host_cpu = @host_cpu@ | |
330 | host_os = @host_os@ | |
331 | host_vendor = @host_vendor@ | |
332 | htmldir = @htmldir@ | |
333 | includedir = @includedir@ | |
334 | infodir = @infodir@ | |
335 | install_sh = @install_sh@ | |
336 | libdir = @libdir@ | |
337 | libexecdir = @libexecdir@ | |
338 | localedir = @localedir@ | |
339 | localstatedir = @localstatedir@ | |
340 | mandir = @mandir@ | |
341 | mkdir_p = @mkdir_p@ | |
342 | oldincludedir = @oldincludedir@ | |
343 | pdfdir = @pdfdir@ | |
344 | pkgpyexecdir = @pkgpyexecdir@ | |
345 | pkgpythondir = @pkgpythondir@ | |
346 | plugindir = @plugindir@ | |
347 | prefix = @prefix@ | |
348 | program_transform_name = @program_transform_name@ | |
349 | psdir = @psdir@ | |
350 | pyexecdir = @pyexecdir@ | |
351 | pythondir = @pythondir@ | |
352 | sbindir = @sbindir@ | |
353 | sharedstatedir = @sharedstatedir@ | |
354 | srcdir = @srcdir@ | |
355 | sysconfdir = @sysconfdir@ | |
356 | target_alias = @target_alias@ | |
357 | top_build_prefix = @top_build_prefix@ | |
358 | top_builddir = @top_builddir@ | |
359 | top_srcdir = @top_srcdir@ | |
360 | plugin_LTLIBRARIES = libfsrawconference.la | |
361 | ||
362 | # First build a convenience lib with the common stuff so its not built twice | |
363 | noinst_LTLIBRARIES = libfsrawconference-convenience.la $(am__append_1) | |
364 | libfsrawconference_convenience_la_SOURCES = \ | |
365 | fs-raw-conference.c \ | |
366 | fs-raw-session.c \ | |
367 | fs-raw-stream.c \ | |
368 | fs-raw-participant.c | |
369 | ||
370 | noinst_HEADERS = \ | |
371 | fs-raw-conference.h \ | |
372 | fs-raw-session.h \ | |
373 | fs-raw-stream.h \ | |
374 | fs-raw-participant.h | |
375 | ||
376 | AM_CFLAGS = \ | |
377 | $(FS2_INTERNAL_CFLAGS) \ | |
378 | $(FS2_CFLAGS) \ | |
379 | $(GST_PLUGINS_BASE_CFLAGS) \ | |
380 | $(GST_CFLAGS) | |
381 | ||
382 | ||
383 | # Build the main plugin | |
384 | libfsrawconference_la_SOURCES = fs-raw-conference-plugin.c | |
385 | libfsrawconference_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) | |
386 | libfsrawconference_la_LIBADD = \ | |
387 | libfsrawconference-convenience.la \ | |
388 | $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \ | |
389 | $(FS2_LIBS) \ | |
390 | $(GST_BASE_LIBS) \ | |
391 | $(GST_LIBS) | |
392 | ||
393 | @ENABLE_GTK_DOC_TRUE@nodist_libfsrawconference_doc_la_SOURCES = \ | |
394 | @ENABLE_GTK_DOC_TRUE@ fs-raw-conference-plugin.doc.c \ | |
395 | @ENABLE_GTK_DOC_TRUE@ $(libfsrawconference_la_SOURCES) | |
396 | ||
397 | @ENABLE_GTK_DOC_TRUE@libfsrawconference_doc_la_LIBADD = $(libfsrawconference_la_LIBADD) | |
398 | @ENABLE_GTK_DOC_TRUE@BUILT_SOURCES = fs-raw-conference-plugin.doc.c | |
399 | @ENABLE_GTK_DOC_TRUE@CLEANFILES = $(BUILT_SOURCES) | |
400 | all: $(BUILT_SOURCES) | |
401 | $(MAKE) $(AM_MAKEFLAGS) all-am | |
402 | ||
403 | .SUFFIXES: | |
404 | .SUFFIXES: .c .lo .o .obj | |
405 | $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) | |
406 | @for dep in $?; do \ | |
407 | case '$(am__configure_deps)' in \ | |
408 | *$$dep*) \ | |
409 | ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ | |
410 | && { if test -f $@; then exit 0; else break; fi; }; \ | |
411 | exit 1;; \ | |
412 | esac; \ | |
413 | done; \ | |
414 | echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/fsrawconference/Makefile'; \ | |
415 | $(am__cd) $(top_srcdir) && \ | |
416 | $(AUTOMAKE) --gnu gst/fsrawconference/Makefile | |
417 | .PRECIOUS: Makefile | |
418 | Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status | |
419 | @case '$?' in \ | |
420 | *config.status*) \ | |
421 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ | |
422 | *) \ | |
423 | echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ | |
424 | cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ | |
425 | esac; | |
426 | ||
427 | $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | |
428 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |
429 | ||
430 | $(top_srcdir)/configure: $(am__configure_deps) | |
431 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |
432 | $(ACLOCAL_M4): $(am__aclocal_m4_deps) | |
433 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |
434 | $(am__aclocal_m4_deps): | |
435 | ||
436 | clean-noinstLTLIBRARIES: | |
437 | -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) | |
438 | @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ | |
439 | dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ | |
440 | test "$$dir" != "$$p" || dir=.; \ | |
441 | echo "rm -f \"$${dir}/so_locations\""; \ | |
442 | rm -f "$${dir}/so_locations"; \ | |
443 | done | |
444 | install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) | |
445 | @$(NORMAL_INSTALL) | |
446 | test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)" | |
447 | @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ | |
448 | list2=; for p in $$list; do \ | |
449 | if test -f $$p; then \ | |
450 | list2="$$list2 $$p"; \ | |
451 | else :; fi; \ | |
452 | done; \ | |
453 | test -z "$$list2" || { \ | |
454 | echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ | |
455 | $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ | |
456 | } | |
457 | ||
458 | uninstall-pluginLTLIBRARIES: | |
459 | @$(NORMAL_UNINSTALL) | |
460 | @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ | |
461 | for p in $$list; do \ | |
462 | $(am__strip_dir) \ | |
463 | echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ | |
464 | $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ | |
465 | done | |
466 | ||
467 | clean-pluginLTLIBRARIES: | |
468 | -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) | |
469 | @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ | |
470 | dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ | |
471 | test "$$dir" != "$$p" || dir=.; \ | |
472 | echo "rm -f \"$${dir}/so_locations\""; \ | |
473 | rm -f "$${dir}/so_locations"; \ | |
474 | done | |
475 | libfsrawconference-convenience.la: $(libfsrawconference_convenience_la_OBJECTS) $(libfsrawconference_convenience_la_DEPENDENCIES) | |
476 | $(AM_V_CCLD)$(LINK) $(libfsrawconference_convenience_la_OBJECTS) $(libfsrawconference_convenience_la_LIBADD) $(LIBS) | |
477 | libfsrawconference.la: $(libfsrawconference_la_OBJECTS) $(libfsrawconference_la_DEPENDENCIES) | |
478 | $(AM_V_CCLD)$(libfsrawconference_la_LINK) -rpath $(plugindir) $(libfsrawconference_la_OBJECTS) $(libfsrawconference_la_LIBADD) $(LIBS) | |
479 | libfsrawconference_doc.la: $(libfsrawconference_doc_la_OBJECTS) $(libfsrawconference_doc_la_DEPENDENCIES) | |
480 | $(AM_V_CCLD)$(LINK) $(am_libfsrawconference_doc_la_rpath) $(libfsrawconference_doc_la_OBJECTS) $(libfsrawconference_doc_la_LIBADD) $(LIBS) | |
481 | ||
482 | mostlyclean-compile: | |
483 | -rm -f *.$(OBJEXT) | |
484 | ||
485 | distclean-compile: | |
486 | -rm -f *.tab.c | |
487 | ||
488 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-raw-conference-plugin.Plo@am__quote@ | |
489 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-raw-conference-plugin.doc.Plo@am__quote@ | |
490 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-raw-conference.Plo@am__quote@ | |
491 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-raw-participant.Plo@am__quote@ | |
492 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-raw-session.Plo@am__quote@ | |
493 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-raw-stream.Plo@am__quote@ | |
494 | ||
495 | .c.o: | |
496 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | |
497 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | |
498 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
499 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | |
500 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
501 | @am__fastdepCC_FALSE@ $(COMPILE) -c $< | |
502 | ||
503 | .c.obj: | |
504 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` | |
505 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | |
506 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
507 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | |
508 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
509 | @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` | |
510 | ||
511 | .c.lo: | |
512 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | |
513 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo | |
514 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
515 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ | |
516 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
517 | @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< | |
518 | ||
519 | mostlyclean-libtool: | |
520 | -rm -f *.lo | |
521 | ||
522 | clean-libtool: | |
523 | -rm -rf .libs _libs | |
524 | ||
525 | ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | |
526 | list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | |
527 | unique=`for i in $$list; do \ | |
528 | if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |
529 | done | \ | |
530 | $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | |
531 | END { if (nonempty) { for (i in files) print i; }; }'`; \ | |
532 | mkid -fID $$unique | |
533 | tags: TAGS | |
534 | ||
535 | TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ | |
536 | $(TAGS_FILES) $(LISP) | |
537 | set x; \ | |
538 | here=`pwd`; \ | |
539 | list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | |
540 | unique=`for i in $$list; do \ | |
541 | if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |
542 | done | \ | |
543 | $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | |
544 | END { if (nonempty) { for (i in files) print i; }; }'`; \ | |
545 | shift; \ | |
546 | if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ | |
547 | test -n "$$unique" || unique=$$empty_fix; \ | |
548 | if test $$# -gt 0; then \ | |
549 | $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |
550 | "$$@" $$unique; \ | |
551 | else \ | |
552 | $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |
553 | $$unique; \ | |
554 | fi; \ | |
555 | fi | |
556 | ctags: CTAGS | |
557 | CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ | |
558 | $(TAGS_FILES) $(LISP) | |
559 | list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | |
560 | unique=`for i in $$list; do \ | |
561 | if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |
562 | done | \ | |
563 | $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | |
564 | END { if (nonempty) { for (i in files) print i; }; }'`; \ | |
565 | test -z "$(CTAGS_ARGS)$$unique" \ | |
566 | || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | |
567 | $$unique | |
568 | ||
569 | GTAGS: | |
570 | here=`$(am__cd) $(top_builddir) && pwd` \ | |
571 | && $(am__cd) $(top_srcdir) \ | |
572 | && gtags -i $(GTAGS_ARGS) "$$here" | |
573 | ||
574 | distclean-tags: | |
575 | -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | |
576 | ||
577 | distdir: $(DISTFILES) | |
578 | @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | |
579 | topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | |
580 | list='$(DISTFILES)'; \ | |
581 | dist_files=`for file in $$list; do echo $$file; done | \ | |
582 | sed -e "s|^$$srcdirstrip/||;t" \ | |
583 | -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ | |
584 | case $$dist_files in \ | |
585 | */*) $(MKDIR_P) `echo "$$dist_files" | \ | |
586 | sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ | |
587 | sort -u` ;; \ | |
588 | esac; \ | |
589 | for file in $$dist_files; do \ | |
590 | if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ | |
591 | if test -d $$d/$$file; then \ | |
592 | dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ | |
593 | if test -d "$(distdir)/$$file"; then \ | |
594 | find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | |
595 | fi; \ | |
596 | if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ | |
597 | cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ | |
598 | find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | |
599 | fi; \ | |
600 | cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ | |
601 | else \ | |
602 | test -f "$(distdir)/$$file" \ | |
603 | || cp -p $$d/$$file "$(distdir)/$$file" \ | |
604 | || exit 1; \ | |
605 | fi; \ | |
606 | done | |
607 | check-am: all-am | |
608 | check: $(BUILT_SOURCES) | |
609 | $(MAKE) $(AM_MAKEFLAGS) check-am | |
610 | all-am: Makefile $(LTLIBRARIES) $(HEADERS) | |
611 | installdirs: | |
612 | for dir in "$(DESTDIR)$(plugindir)"; do \ | |
613 | test -z "$$dir" || $(MKDIR_P) "$$dir"; \ | |
614 | done | |
615 | install: $(BUILT_SOURCES) | |
616 | $(MAKE) $(AM_MAKEFLAGS) install-am | |
617 | install-exec: install-exec-am | |
618 | install-data: install-data-am | |
619 | uninstall: uninstall-am | |
620 | ||
621 | install-am: all-am | |
622 | @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am | |
623 | ||
624 | installcheck: installcheck-am | |
625 | install-strip: | |
626 | $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | |
627 | install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | |
628 | `test -z '$(STRIP)' || \ | |
629 | echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install | |
630 | mostlyclean-generic: | |
631 | ||
632 | clean-generic: | |
633 | -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) | |
634 | ||
635 | distclean-generic: | |
636 | -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) | |
637 | -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) | |
638 | ||
639 | maintainer-clean-generic: | |
640 | @echo "This command is intended for maintainers to use" | |
641 | @echo "it deletes files that may require special tools to rebuild." | |
642 | -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) | |
643 | clean: clean-am | |
644 | ||
645 | clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ | |
646 | clean-pluginLTLIBRARIES mostlyclean-am | |
647 | ||
648 | distclean: distclean-am | |
649 | -rm -rf ./$(DEPDIR) | |
650 | -rm -f Makefile | |
651 | distclean-am: clean-am distclean-compile distclean-generic \ | |
652 | distclean-tags | |
653 | ||
654 | dvi: dvi-am | |
655 | ||
656 | dvi-am: | |
657 | ||
658 | html: html-am | |
659 | ||
660 | html-am: | |
661 | ||
662 | info: info-am | |
663 | ||
664 | info-am: | |
665 | ||
666 | install-data-am: install-pluginLTLIBRARIES | |
667 | ||
668 | install-dvi: install-dvi-am | |
669 | ||
670 | install-dvi-am: | |
671 | ||
672 | install-exec-am: | |
673 | ||
674 | install-html: install-html-am | |
675 | ||
676 | install-html-am: | |
677 | ||
678 | install-info: install-info-am | |
679 | ||
680 | install-info-am: | |
681 | ||
682 | install-man: | |
683 | ||
684 | install-pdf: install-pdf-am | |
685 | ||
686 | install-pdf-am: | |
687 | ||
688 | install-ps: install-ps-am | |
689 | ||
690 | install-ps-am: | |
691 | ||
692 | installcheck-am: | |
693 | ||
694 | maintainer-clean: maintainer-clean-am | |
695 | -rm -rf ./$(DEPDIR) | |
696 | -rm -f Makefile | |
697 | maintainer-clean-am: distclean-am maintainer-clean-generic | |
698 | ||
699 | mostlyclean: mostlyclean-am | |
700 | ||
701 | mostlyclean-am: mostlyclean-compile mostlyclean-generic \ | |
702 | mostlyclean-libtool | |
703 | ||
704 | pdf: pdf-am | |
705 | ||
706 | pdf-am: | |
707 | ||
708 | ps: ps-am | |
709 | ||
710 | ps-am: | |
711 | ||
712 | uninstall-am: uninstall-pluginLTLIBRARIES | |
713 | ||
714 | .MAKE: all check install install-am install-strip | |
715 | ||
716 | .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ | |
717 | clean-libtool clean-noinstLTLIBRARIES clean-pluginLTLIBRARIES \ | |
718 | ctags distclean distclean-compile distclean-generic \ | |
719 | distclean-libtool distclean-tags distdir dvi dvi-am html \ | |
720 | html-am info info-am install install-am install-data \ | |
721 | install-data-am install-dvi install-dvi-am install-exec \ | |
722 | install-exec-am install-html install-html-am install-info \ | |
723 | install-info-am install-man install-pdf install-pdf-am \ | |
724 | install-pluginLTLIBRARIES install-ps install-ps-am \ | |
725 | install-strip installcheck installcheck-am installdirs \ | |
726 | maintainer-clean maintainer-clean-generic mostlyclean \ | |
727 | mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ | |
728 | pdf pdf-am ps ps-am tags uninstall uninstall-am \ | |
729 | uninstall-pluginLTLIBRARIES | |
730 | ||
731 | ||
732 | @ENABLE_GTK_DOC_TRUE@%.doc.c: %.c | |
733 | @ENABLE_GTK_DOC_TRUE@ $(AM_V_GEN)sed -e 's:GST_PLUGIN_DEFINE:GST_PLUGIN_DEFINE_STATIC:' $< > $@ | |
734 | ||
735 | # Tell versions [3.59,3.63) of GNU make to not export all variables. | |
736 | # Otherwise a system limit (for SysV at least) may be exceeded. | |
737 | .NOEXPORT: |
0 | /* | |
1 | * Farsight2 - Farsight Raw Conference Implementation | |
2 | * | |
3 | * Copyright 2007,2010 Collabora Ltd. | |
4 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
5 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
6 | * Copyright 2007 Nokia Corp. | |
7 | * | |
8 | * gstfsrawconference.c - Raw implementation for Farsight Conference Gstreamer | |
9 | * Elements | |
10 | * | |
11 | * This library is free software; you can redistribute it and/or | |
12 | * modify it under the terms of the GNU Lesser General Public | |
13 | * License as published by the Free Software Foundation; either | |
14 | * version 2.1 of the License, or (at your option) any later version. | |
15 | * | |
16 | * This library is distributed in the hope that it will be useful, | |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 | * Lesser General Public License for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU Lesser General Public | |
22 | * License along with this library; if not, write to the Free Software | |
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
24 | */ | |
25 | ||
26 | #ifdef HAVE_CONFIG_H | |
27 | #include "config.h" | |
28 | #endif | |
29 | ||
30 | #include <gst/gst.h> | |
31 | ||
32 | #include "fs-raw-conference.h" | |
33 | ||
34 | static gboolean plugin_init (GstPlugin * plugin) | |
35 | { | |
36 | return gst_element_register (plugin, "fsrawconference", | |
37 | GST_RANK_NONE, FS_TYPE_RAW_CONFERENCE); | |
38 | } | |
39 | ||
40 | GST_PLUGIN_DEFINE ( | |
41 | GST_VERSION_MAJOR, | |
42 | GST_VERSION_MINOR, | |
43 | "fsrawconference", | |
44 | "Farsight Raw Conference plugin", | |
45 | plugin_init, | |
46 | VERSION, | |
47 | "LGPL", | |
48 | "Farsight", | |
49 | "http://farsight.freedesktop.org/" | |
50 | ) |
0 | /* | |
1 | * Farsight2 - Farsight Raw Conference Implementation | |
2 | * | |
3 | * Copyright 2008 Richard Spiers <richard.spiers@gmail.com> | |
4 | * Copyright 2007 Nokia Corp. | |
5 | * Copyright 2007-2010 Collabora Ltd. | |
6 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
7 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
8 | * | |
9 | * fs-raw-conference.c - Raw implementation for Farsight Conference Gstreamer | |
10 | * Elements | |
11 | * | |
12 | * This library is free software; you can redistribute it and/or | |
13 | * modify it under the terms of the GNU Lesser General Public | |
14 | * License as published by the Free Software Foundation; either | |
15 | * version 2.1 of the License, or (at your option) any later version. | |
16 | * | |
17 | * This library is distributed in the hope that it will be useful, | |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
20 | * Lesser General Public License for more details. | |
21 | * | |
22 | * You should have received a copy of the GNU Lesser General Public | |
23 | * License along with this library; if not, write to the Free Software | |
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
25 | */ | |
26 | ||
27 | /** | |
28 | * SECTION:element-fsrawconference | |
29 | * @short_description: Farsight Raw Conference Gstreamer Elements Base class | |
30 | * | |
31 | * This element implements a raw content stream over which any Gstreamer | |
32 | * content may travel. | |
33 | */ | |
34 | ||
35 | ||
36 | #ifdef HAVE_CONFIG_H | |
37 | #include "config.h" | |
38 | #endif | |
39 | ||
40 | #include "fs-raw-conference.h" | |
41 | ||
42 | #include "fs-raw-session.h" | |
43 | #include "fs-raw-participant.h" | |
44 | ||
45 | GST_DEBUG_CATEGORY (fsrawconference_debug); | |
46 | #define GST_CAT_DEFAULT fsrawconference_debug | |
47 | ||
48 | /* Signals */ | |
49 | enum | |
50 | { | |
51 | LAST_SIGNAL | |
52 | }; | |
53 | ||
54 | /* Properties */ | |
55 | enum | |
56 | { | |
57 | PROP_0 | |
58 | }; | |
59 | ||
60 | ||
61 | static GstStaticPadTemplate fs_raw_conference_sink_template = | |
62 | GST_STATIC_PAD_TEMPLATE ("sink_%d", | |
63 | GST_PAD_SINK, | |
64 | GST_PAD_SOMETIMES, | |
65 | GST_STATIC_CAPS_ANY); | |
66 | ||
67 | static GstStaticPadTemplate fs_raw_conference_src_template = | |
68 | GST_STATIC_PAD_TEMPLATE ("src_%d", | |
69 | GST_PAD_SRC, | |
70 | GST_PAD_SOMETIMES, | |
71 | GST_STATIC_CAPS_ANY); | |
72 | ||
73 | #define FS_RAW_CONFERENCE_GET_PRIVATE(obj) \ | |
74 | (G_TYPE_INSTANCE_GET_PRIVATE ((obj), FS_TYPE_RAW_CONFERENCE, \ | |
75 | FsRawConferencePrivate)) | |
76 | ||
77 | struct _FsRawConferencePrivate | |
78 | { | |
79 | gboolean disposed; | |
80 | ||
81 | /* Protected by GST_OBJECT_LOCK */ | |
82 | GList *sessions; | |
83 | guint max_session_id; | |
84 | ||
85 | GList *participants; | |
86 | ||
87 | /* Array of all internal threads, as GThreads */ | |
88 | GPtrArray *threads; | |
89 | }; | |
90 | ||
91 | static void fs_raw_conference_do_init (GType type); | |
92 | ||
93 | ||
94 | GST_BOILERPLATE_FULL (FsRawConference, fs_raw_conference, FsBaseConference, | |
95 | FS_TYPE_BASE_CONFERENCE, fs_raw_conference_do_init); | |
96 | ||
97 | static FsSession *fs_raw_conference_new_session (FsBaseConference *conf, | |
98 | FsMediaType media_type, | |
99 | GError **error); | |
100 | ||
101 | static FsParticipant *fs_raw_conference_new_participant (FsBaseConference *conf, | |
102 | const gchar *cname, | |
103 | GError **error); | |
104 | ||
105 | static void _remove_session (gpointer user_data, | |
106 | GObject *where_the_object_was); | |
107 | ||
108 | static void _remove_participant (gpointer user_data, | |
109 | GObject *where_the_object_was); | |
110 | ||
111 | static void fs_raw_conference_handle_message ( | |
112 | GstBin * bin, | |
113 | GstMessage * message); | |
114 | ||
115 | ||
116 | static void | |
117 | fs_raw_conference_do_init (GType type) | |
118 | { | |
119 | GST_DEBUG_CATEGORY_INIT (fsrawconference_debug, "fsrawconference", 0, | |
120 | "Farsight Raw Conference Element"); | |
121 | } | |
122 | ||
123 | static void | |
124 | fs_raw_conference_dispose (GObject * object) | |
125 | { | |
126 | FsRawConference *self = FS_RAW_CONFERENCE (object); | |
127 | GList *item; | |
128 | ||
129 | if (self->priv->disposed) | |
130 | return; | |
131 | ||
132 | for (item = g_list_first (self->priv->participants); | |
133 | item; | |
134 | item = g_list_next (item)) | |
135 | g_object_weak_unref (G_OBJECT (item->data), _remove_participant, self); | |
136 | g_list_free (self->priv->participants); | |
137 | self->priv->participants = NULL; | |
138 | ||
139 | self->priv->disposed = TRUE; | |
140 | ||
141 | G_OBJECT_CLASS (parent_class)->dispose (object); | |
142 | } | |
143 | ||
144 | static void | |
145 | fs_raw_conference_finalize (GObject * object) | |
146 | { | |
147 | FsRawConference *self = FS_RAW_CONFERENCE (object); | |
148 | ||
149 | g_ptr_array_free (self->priv->threads, TRUE); | |
150 | ||
151 | G_OBJECT_CLASS (parent_class)->finalize (object); | |
152 | } | |
153 | ||
154 | static void | |
155 | fs_raw_conference_class_init (FsRawConferenceClass * klass) | |
156 | { | |
157 | GObjectClass *gobject_class = G_OBJECT_CLASS (klass); | |
158 | FsBaseConferenceClass *baseconf_class = FS_BASE_CONFERENCE_CLASS (klass); | |
159 | GstBinClass *gstbin_class = GST_BIN_CLASS (klass); | |
160 | ||
161 | g_type_class_add_private (klass, sizeof (FsRawConferencePrivate)); | |
162 | ||
163 | baseconf_class->new_session = | |
164 | GST_DEBUG_FUNCPTR (fs_raw_conference_new_session); | |
165 | baseconf_class->new_participant = | |
166 | GST_DEBUG_FUNCPTR (fs_raw_conference_new_participant); | |
167 | ||
168 | gstbin_class->handle_message = | |
169 | GST_DEBUG_FUNCPTR (fs_raw_conference_handle_message); | |
170 | ||
171 | gobject_class->finalize = GST_DEBUG_FUNCPTR (fs_raw_conference_finalize); | |
172 | gobject_class->dispose = GST_DEBUG_FUNCPTR (fs_raw_conference_dispose); | |
173 | } | |
174 | ||
175 | static void | |
176 | fs_raw_conference_base_init (gpointer g_class) | |
177 | { | |
178 | GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class); | |
179 | ||
180 | gst_element_class_add_pad_template (gstelement_class, | |
181 | gst_static_pad_template_get (&fs_raw_conference_sink_template)); | |
182 | gst_element_class_add_pad_template (gstelement_class, | |
183 | gst_static_pad_template_get (&fs_raw_conference_src_template)); | |
184 | } | |
185 | ||
186 | static void | |
187 | fs_raw_conference_init (FsRawConference *conf, | |
188 | FsRawConferenceClass *bclass) | |
189 | { | |
190 | GST_DEBUG_OBJECT (conf, "fs_raw_conference_init"); | |
191 | ||
192 | conf->priv = FS_RAW_CONFERENCE_GET_PRIVATE (conf); | |
193 | ||
194 | conf->priv->max_session_id = 1; | |
195 | ||
196 | conf->priv->threads = g_ptr_array_new (); | |
197 | } | |
198 | ||
199 | /** | |
200 | * fs_rtp_conference_get_session_by_id_locked | |
201 | * @self: The #FsRawConference | |
202 | * @session_id: The session id | |
203 | * | |
204 | * Gets the #FsRawSession from a list of sessions or NULL if it doesnt exist | |
205 | * You have to hold the GST_OBJECT_LOCK to call this function. | |
206 | * | |
207 | * Return value: A #FsRawSession (unref after use) or NULL if it doesn't exist | |
208 | */ | |
209 | static FsRawSession * | |
210 | fs_raw_conference_get_session_by_id_locked (FsRawConference *self, | |
211 | guint session_id) | |
212 | { | |
213 | GList *item = NULL; | |
214 | ||
215 | for (item = g_list_first (self->priv->sessions); | |
216 | item; | |
217 | item = g_list_next (item)) { | |
218 | FsRawSession *session = item->data; | |
219 | ||
220 | if (session->id == session_id) { | |
221 | g_object_ref (session); | |
222 | break; | |
223 | } | |
224 | } | |
225 | ||
226 | if (item) | |
227 | return FS_RAW_SESSION (item->data); | |
228 | else | |
229 | return NULL; | |
230 | } | |
231 | ||
232 | static void | |
233 | _remove_session (gpointer user_data, | |
234 | GObject *where_the_object_was) | |
235 | { | |
236 | FsRawConference *self = FS_RAW_CONFERENCE (user_data); | |
237 | ||
238 | GST_OBJECT_LOCK (self); | |
239 | self->priv->sessions = | |
240 | g_list_remove_all (self->priv->sessions, where_the_object_was); | |
241 | GST_OBJECT_UNLOCK (self); | |
242 | } | |
243 | ||
244 | static void | |
245 | _remove_participant (gpointer user_data, | |
246 | GObject *where_the_object_was) | |
247 | { | |
248 | FsRawConference *self = FS_RAW_CONFERENCE (user_data); | |
249 | ||
250 | GST_OBJECT_LOCK (self); | |
251 | self->priv->participants = | |
252 | g_list_remove_all (self->priv->participants, where_the_object_was); | |
253 | GST_OBJECT_UNLOCK (self); | |
254 | } | |
255 | ||
256 | static FsSession * | |
257 | fs_raw_conference_new_session (FsBaseConference *conf, | |
258 | FsMediaType media_type, | |
259 | GError **error) | |
260 | { | |
261 | FsRawConference *self = FS_RAW_CONFERENCE (conf); | |
262 | FsRawSession *new_session = NULL; | |
263 | guint id; | |
264 | ||
265 | GST_OBJECT_LOCK (self); | |
266 | do { | |
267 | id = self->priv->max_session_id++; | |
268 | } while (fs_raw_conference_get_session_by_id_locked (self, id)); | |
269 | GST_OBJECT_UNLOCK (self); | |
270 | ||
271 | new_session = fs_raw_session_new (media_type, self, id, error); | |
272 | ||
273 | GST_OBJECT_LOCK (self); | |
274 | self->priv->sessions = g_list_append (self->priv->sessions, new_session); | |
275 | GST_OBJECT_UNLOCK (self); | |
276 | ||
277 | g_object_weak_ref (G_OBJECT (new_session), _remove_session, self); | |
278 | ||
279 | return FS_SESSION (new_session); | |
280 | } | |
281 | ||
282 | ||
283 | static FsParticipant * | |
284 | fs_raw_conference_new_participant (FsBaseConference *conf, | |
285 | const gchar *cname, | |
286 | GError **error) | |
287 | { | |
288 | FsRawConference *self = FS_RAW_CONFERENCE (conf); | |
289 | FsParticipant *new_participant = NULL; | |
290 | ||
291 | new_participant = FS_PARTICIPANT_CAST (fs_raw_participant_new ()); | |
292 | ||
293 | GST_OBJECT_LOCK (self); | |
294 | self->priv->participants = g_list_append (self->priv->participants, | |
295 | new_participant); | |
296 | GST_OBJECT_UNLOCK (self); | |
297 | ||
298 | g_object_weak_ref (G_OBJECT (new_participant), _remove_participant, self); | |
299 | ||
300 | return new_participant; | |
301 | } | |
302 | ||
303 | static void | |
304 | fs_raw_conference_handle_message ( | |
305 | GstBin * bin, | |
306 | GstMessage * message) | |
307 | { | |
308 | FsRawConference *self = FS_RAW_CONFERENCE (bin); | |
309 | ||
310 | switch (GST_MESSAGE_TYPE (message)) { | |
311 | case GST_MESSAGE_STREAM_STATUS: | |
312 | { | |
313 | GstStreamStatusType type; | |
314 | guint i; | |
315 | ||
316 | gst_message_parse_stream_status (message, &type, NULL); | |
317 | ||
318 | switch (type) | |
319 | { | |
320 | case GST_STREAM_STATUS_TYPE_ENTER: | |
321 | GST_OBJECT_LOCK (self); | |
322 | for (i = 0; i < self->priv->threads->len; i++) | |
323 | { | |
324 | if (g_ptr_array_index (self->priv->threads, i) == | |
325 | g_thread_self ()) | |
326 | goto done; | |
327 | } | |
328 | g_ptr_array_add (self->priv->threads, g_thread_self ()); | |
329 | done: | |
330 | GST_OBJECT_UNLOCK (self); | |
331 | break; | |
332 | ||
333 | case GST_STREAM_STATUS_TYPE_LEAVE: | |
334 | GST_OBJECT_LOCK (self); | |
335 | while (g_ptr_array_remove_fast (self->priv->threads, | |
336 | g_thread_self ())); | |
337 | GST_OBJECT_UNLOCK (self); | |
338 | break; | |
339 | ||
340 | default: | |
341 | /* Do nothing */ | |
342 | break; | |
343 | } | |
344 | } | |
345 | break; | |
346 | default: | |
347 | break; | |
348 | } | |
349 | ||
350 | /* forward all messages to the parent */ | |
351 | GST_BIN_CLASS (parent_class)->handle_message (bin, message); | |
352 | } | |
353 | ||
354 | /** | |
355 | * fs_codec_to_gst_caps | |
356 | * @codec: A #FsCodec to be converted | |
357 | * | |
358 | * This function converts a #FsCodec to a fixed #GstCaps. | |
359 | * | |
360 | * Return value: A newly-allocated #GstCaps or %NULL if the codec was %NULL | |
361 | */ | |
362 | ||
363 | GstCaps * | |
364 | fs_raw_codec_to_gst_caps (const FsCodec *codec) | |
365 | { | |
366 | GstCaps *caps; | |
367 | ||
368 | if (codec == NULL || codec->encoding_name == NULL) | |
369 | return NULL; | |
370 | ||
371 | caps = gst_caps_from_string (codec->encoding_name); | |
372 | ||
373 | if (!caps) | |
374 | return NULL; | |
375 | ||
376 | if (gst_caps_is_fixed (caps)) | |
377 | return caps; | |
378 | ||
379 | gst_caps_unref (caps); | |
380 | return NULL; | |
381 | } | |
382 | ||
383 | gboolean | |
384 | fs_raw_conference_is_internal_thread (FsRawConference *self) | |
385 | { | |
386 | guint i; | |
387 | gboolean ret = FALSE; | |
388 | ||
389 | GST_OBJECT_LOCK (self); | |
390 | for (i = 0; i < self->priv->threads->len; i++) | |
391 | { | |
392 | if (g_ptr_array_index (self->priv->threads, i)) | |
393 | { | |
394 | ret = TRUE; | |
395 | break; | |
396 | } | |
397 | } | |
398 | GST_OBJECT_UNLOCK (self); | |
399 | ||
400 | return ret; | |
401 | } | |
402 |
0 | /* | |
1 | * Farsight2 - Farsight Raw Conference Implementation | |
2 | * | |
3 | * Copyright 2007,2010 Collabora Ltd. | |
4 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
5 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
6 | * Copyright 2007 Nokia Corp. | |
7 | * | |
8 | * gstfsrawconference.h - Raw implementation for Farsight Conference Gstreamer | |
9 | * Elements | |
10 | * | |
11 | * This library is free software; you can redistribute it and/or | |
12 | * modify it under the terms of the GNU Lesser General Public | |
13 | * License as published by the Free Software Foundation; either | |
14 | * version 2.1 of the License, or (at your option) any later version. | |
15 | * | |
16 | * This library is distributed in the hope that it will be useful, | |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 | * Lesser General Public License for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU Lesser General Public | |
22 | * License along with this library; if not, write to the Free Software | |
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
24 | */ | |
25 | ||
26 | #ifndef __FS_RAW_CONFERENCE_H__ | |
27 | #define __FS_RAW_CONFERENCE_H__ | |
28 | ||
29 | #include <gst/farsight/fs-base-conference.h> | |
30 | ||
31 | G_BEGIN_DECLS | |
32 | ||
33 | #define FS_TYPE_RAW_CONFERENCE \ | |
34 | (fs_raw_conference_get_type ()) | |
35 | #define FS_RAW_CONFERENCE(obj) \ | |
36 | (G_TYPE_CHECK_INSTANCE_CAST((obj),FS_TYPE_RAW_CONFERENCE,FsRawConference)) | |
37 | #define FS_RAW_CONFERENCE_CLASS(klass) \ | |
38 | (G_TYPE_CHECK_CLASS_CAST((klass),FS_TYPE_RAW_CONFERENCE,FsRawConferenceClass)) | |
39 | #define FS_RAW_CONFERENCE_GET_CLASS(obj) \ | |
40 | (G_TYPE_INSTANCE_GET_CLASS((obj),FS_TYPE_RAW_CONFERENCE,FsRawConferenceClass)) | |
41 | #define FS_IS_RAW_CONFERENCE(obj) \ | |
42 | (G_TYPE_CHECK_INSTANCE_TYPE((obj),FS_TYPE_RAW_CONFERENCE)) | |
43 | #define FS_IS_RAW_CONFERENCE_CLASS(klass) \ | |
44 | (G_TYPE_CHECK_CLASS_TYPE((klass),FS_TYPE_RAW_CONFERENCE)) | |
45 | #define FS_RAW_CONFERENCE_CAST(obj) \ | |
46 | ((FsRawConference *)(obj)) | |
47 | ||
48 | typedef struct _FsRawConference FsRawConference; | |
49 | typedef struct _FsRawConferenceClass FsRawConferenceClass; | |
50 | typedef struct _FsRawConferencePrivate FsRawConferencePrivate; | |
51 | ||
52 | struct _FsRawConference | |
53 | { | |
54 | FsBaseConference parent; | |
55 | ||
56 | /*< private >*/ | |
57 | FsRawConferencePrivate *priv; | |
58 | }; | |
59 | ||
60 | struct _FsRawConferenceClass | |
61 | { | |
62 | FsBaseConferenceClass parent_class; | |
63 | }; | |
64 | ||
65 | GType fs_raw_conference_get_type (void); | |
66 | ||
67 | GstCaps *fs_raw_codec_to_gst_caps (const FsCodec *codec); | |
68 | ||
69 | gboolean fs_raw_conference_is_internal_thread (FsRawConference *self); | |
70 | ||
71 | GST_DEBUG_CATEGORY_EXTERN (fsrawconference_debug); | |
72 | ||
73 | G_END_DECLS | |
74 | ||
75 | #endif /* __FS_RAW_CONFERENCE_H__ */ |
0 | /* | |
1 | * Farsight2 - Farsight Raw Participant | |
2 | * | |
3 | * Copyright 2007,2010 Collabora Ltd. | |
4 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
5 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
6 | * Copyright 2007 Nokia Corp. | |
7 | * | |
8 | * fs-raw-participant.c - A Raw Farsight Participant gobject | |
9 | * | |
10 | * This library is free software; you can redistribute it and/or | |
11 | * modify it under the terms of the GNU Lesser General Public | |
12 | * License as published by the Free Software Foundation; either | |
13 | * version 2.1 of the License, or (at your option) any later version. | |
14 | * | |
15 | * This library is distributed in the hope that it will be useful, | |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 | * Lesser General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU Lesser General Public | |
21 | * License along with this library; if not, write to the Free Software | |
22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
23 | */ | |
24 | ||
25 | /** | |
26 | * SECTION:fs-raw-participant | |
27 | * @short_description: A Raw participant in a #FsRawConference | |
28 | * | |
29 | * This object represents one participant or person in a raw conference | |
30 | */ | |
31 | ||
32 | #ifdef HAVE_CONFIG_H | |
33 | #include "config.h" | |
34 | #endif | |
35 | ||
36 | #include "fs-raw-participant.h" | |
37 | ||
38 | /* Signals */ | |
39 | enum | |
40 | { | |
41 | LAST_SIGNAL | |
42 | }; | |
43 | ||
44 | /* props */ | |
45 | enum | |
46 | { | |
47 | PROP_0, | |
48 | }; | |
49 | ||
50 | G_DEFINE_TYPE(FsRawParticipant, fs_raw_participant, FS_TYPE_PARTICIPANT); | |
51 | ||
52 | /* | |
53 | struct _FsRawParticipantPrivate | |
54 | { | |
55 | }; | |
56 | ||
57 | #define FS_RAW_PARTICIPANT_GET_PRIVATE(o) \ | |
58 | (G_TYPE_INSTANCE_GET_PRIVATE ((o), FS_TYPE_PARTICIPANT, \ | |
59 | FsRawParticipantPrivate)) | |
60 | */ | |
61 | ||
62 | // static guint signals[LAST_SIGNAL] = { 0 }; | |
63 | ||
64 | static void | |
65 | fs_raw_participant_class_init (FsRawParticipantClass *klass) | |
66 | { | |
67 | GObjectClass *gobject_class; | |
68 | ||
69 | gobject_class = (GObjectClass *) klass; | |
70 | ||
71 | // g_type_class_add_private (klass, sizeof (FsRawParticipantPrivate)); | |
72 | } | |
73 | ||
74 | static void | |
75 | fs_raw_participant_init (FsRawParticipant *self) | |
76 | { | |
77 | /* member init */ | |
78 | // self->priv = FS_RAW_PARTICIPANT_GET_PRIVATE (self); | |
79 | } | |
80 | ||
81 | FsRawParticipant *fs_raw_participant_new (void) | |
82 | { | |
83 | return g_object_new (FS_TYPE_RAW_PARTICIPANT, NULL); | |
84 | } |
0 | /* | |
1 | * Farsight2 - Farsight Raw Participant | |
2 | * | |
3 | * Copyright 2007,2010 Collabora Ltd. | |
4 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
5 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
6 | * Copyright 2007 Nokia Corp. | |
7 | * | |
8 | * fs-raw-participant.h - A Farsight Raw Participant gobject | |
9 | * | |
10 | * This library is free software; you can redistribute it and/or | |
11 | * modify it under the terms of the GNU Lesser General Public | |
12 | * License as published by the Free Software Foundation; either | |
13 | * version 2.1 of the License, or (at your option) any later version. | |
14 | * | |
15 | * This library is distributed in the hope that it will be useful, | |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 | * Lesser General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU Lesser General Public | |
21 | * License along with this library; if not, write to the Free Software | |
22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
23 | */ | |
24 | ||
25 | #ifndef __FS_RAW_PARTICIPANT_H__ | |
26 | #define __FS_RAW_PARTICIPANT_H__ | |
27 | ||
28 | #include <gst/farsight/fs-participant.h> | |
29 | ||
30 | G_BEGIN_DECLS | |
31 | ||
32 | /* TYPE MACROS */ | |
33 | #define FS_TYPE_RAW_PARTICIPANT (fs_raw_participant_get_type()) | |
34 | #define FS_RAW_PARTICIPANT(obj) \ | |
35 | (G_TYPE_CHECK_INSTANCE_CAST((obj), FS_TYPE_RAW_PARTICIPANT, \ | |
36 | FsRawParticipant)) | |
37 | #define FS_RAW_PARTICIPANT_CLASS(klass) \ | |
38 | (G_TYPE_CHECK_CLASS_CAST((klass), FS_TYPE_RAW_PARTICIPANT, \ | |
39 | FsRawParticipantClass)) | |
40 | #define FS_IS_RAW_PARTICIPANT(obj) \ | |
41 | (G_TYPE_CHECK_INSTANCE_TYPE((obj), FS_TYPE_RAW_PARTICIPANT)) | |
42 | #define FS_IS_RAW_PARTICIPANT_CLASS(klass) \ | |
43 | (G_TYPE_CHECK_CLASS_TYPE((klass), FS_TYPE_RAW_PARTICIPANT)) | |
44 | #define FS_RAW_PARTICIPANT_GET_CLASS(obj) \ | |
45 | (G_TYPE_INSTANCE_GET_CLASS ((obj), FS_TYPE_RAW_PARTICIPANT, \ | |
46 | FsRawParticipantClass)) | |
47 | #define FS_RAW_PARTICIPANT_CAST(obj) ((FsRawParticipant *) (obj)) | |
48 | ||
49 | typedef struct _FsRawParticipant FsRawParticipant; | |
50 | typedef struct _FsRawParticipantClass FsRawParticipantClass; | |
51 | typedef struct _FsRawParticipantPrivate FsRawParticipantPrivate; | |
52 | ||
53 | struct _FsRawParticipantClass | |
54 | { | |
55 | FsParticipantClass parent_class; | |
56 | ||
57 | /*virtual functions */ | |
58 | ||
59 | /*< private >*/ | |
60 | FsRawParticipantPrivate *priv; | |
61 | }; | |
62 | ||
63 | /** | |
64 | * FsRawParticipant: | |
65 | * | |
66 | */ | |
67 | struct _FsRawParticipant | |
68 | { | |
69 | FsParticipant parent; | |
70 | FsRawParticipantPrivate *priv; | |
71 | ||
72 | /*< private >*/ | |
73 | }; | |
74 | ||
75 | GType fs_raw_participant_get_type (void); | |
76 | ||
77 | FsRawParticipant *fs_raw_participant_new (void); | |
78 | ||
79 | G_END_DECLS | |
80 | ||
81 | #endif /* __FS_RAW_PARTICIPANT_H__ */ |
0 | /* | |
1 | * Farsight2 - Farsight Raw Session | |
2 | * | |
3 | * Copyright 2008 Richard Spiers <richard.spiers@gmail.com> | |
4 | * Copyright 2007 Nokia Corp. | |
5 | * Copyright 2007-2010 Collabora Ltd. | |
6 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
7 | * @author: Youness Alaoui <youness.alaoui@collabora.co.uk> | |
8 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
9 | * | |
10 | * fs-raw-session.c - A Farsight Raw Session gobject | |
11 | * | |
12 | * This library is free software; you can redistribute it and/or | |
13 | * modify it under the terms of the GNU Lesser General Public | |
14 | * License as published by the Free Software Foundation; either | |
15 | * version 2.1 of the License, or (at your option) any later version. | |
16 | * | |
17 | * This library is distributed in the hope that it will be useful, | |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
20 | * Lesser General Public License for more details. | |
21 | * | |
22 | * You should have received a copy of the GNU Lesser General Public | |
23 | * License along with this library; if not, write to the Free Software | |
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
25 | */ | |
26 | ||
27 | /** | |
28 | * SECTION:fs-raw-session | |
29 | * @short_description: A Raw session in a #FsRawConference | |
30 | * | |
31 | * The transmitter parameters to the fs_session_new_stream() function are | |
32 | * used to set the initial value of the construct properties of the stream | |
33 | * object. | |
34 | * | |
35 | * The codecs preferences can not be modified. The codec should have the | |
36 | * encoding_name property set to the value returned by gst_caps_to_string. | |
37 | */ | |
38 | ||
39 | #ifdef HAVE_CONFIG_H | |
40 | #include "config.h" | |
41 | #endif | |
42 | ||
43 | #include "fs-raw-session.h" | |
44 | ||
45 | #include <string.h> | |
46 | ||
47 | #include <gst/gst.h> | |
48 | #include <gst/farsight/fs-transmitter.h> | |
49 | ||
50 | #include "fs-raw-stream.h" | |
51 | #include "fs-raw-participant.h" | |
52 | ||
53 | #define GST_CAT_DEFAULT fsrawconference_debug | |
54 | ||
55 | /* Signals */ | |
56 | enum | |
57 | { | |
58 | LAST_SIGNAL | |
59 | }; | |
60 | ||
61 | /* props */ | |
62 | enum | |
63 | { | |
64 | PROP_0, | |
65 | PROP_MEDIA_TYPE, | |
66 | PROP_ID, | |
67 | PROP_SINK_PAD, | |
68 | PROP_CODEC_PREFERENCES, | |
69 | PROP_CODECS, | |
70 | PROP_CODECS_WITHOUT_CONFIG, | |
71 | PROP_CURRENT_SEND_CODEC, | |
72 | PROP_CODECS_READY, | |
73 | PROP_CONFERENCE, | |
74 | PROP_TOS | |
75 | }; | |
76 | ||
77 | ||
78 | ||
79 | struct _FsRawSessionPrivate | |
80 | { | |
81 | FsMediaType media_type; | |
82 | ||
83 | FsRawConference *conference; | |
84 | FsRawStream *stream; | |
85 | ||
86 | GError *construction_error; | |
87 | ||
88 | GstPad *media_sink_pad; | |
89 | GstElement *capsfilter; | |
90 | GList *codecs; | |
91 | FsCodec *send_codec; | |
92 | ||
93 | FsTransmitter *transmitter; | |
94 | ||
95 | guint tos; /* Protected by conf lock */ | |
96 | ||
97 | gulong stream_direction_handler_id; | |
98 | ||
99 | GMutex *mutex; /* protects the conference */ | |
100 | ||
101 | #ifdef DEBUG_MUTEXES | |
102 | guint count; | |
103 | #endif | |
104 | }; | |
105 | ||
106 | G_DEFINE_TYPE (FsRawSession, fs_raw_session, FS_TYPE_SESSION); | |
107 | ||
108 | #define FS_RAW_SESSION_GET_PRIVATE(o) \ | |
109 | (G_TYPE_INSTANCE_GET_PRIVATE ((o), FS_TYPE_RAW_SESSION, FsRawSessionPrivate)) | |
110 | ||
111 | #ifdef DEBUG_MUTEXES | |
112 | ||
113 | #define FS_RAW_SESSION_LOCK(session) \ | |
114 | do { \ | |
115 | g_mutex_lock (FS_RAW_SESSION (session)->priv->mutex); \ | |
116 | g_assert (FS_RAW_SESSION (session)->priv->count == 0); \ | |
117 | FS_RAW_SESSION (session)->priv->count++; \ | |
118 | } while (0); | |
119 | #define FS_RAW_SESSION_UNLOCK(session) \ | |
120 | do { \ | |
121 | g_assert (FS_RAW_SESSION (session)->priv->count == 1); \ | |
122 | FS_RAW_SESSION (session)->priv->count--; \ | |
123 | g_mutex_unlock (FS_RAW_SESSION (session)->priv->mutex); \ | |
124 | } while (0); | |
125 | #define FS_RAW_SESSION_GET_LOCK(session) \ | |
126 | (FS_RAW_SESSION (session)->priv->mutex) | |
127 | #else | |
128 | #define FS_RAW_SESSION_LOCK(session) \ | |
129 | g_mutex_lock ((session)->priv->mutex) | |
130 | #define FS_RAW_SESSION_UNLOCK(session) \ | |
131 | g_mutex_unlock ((session)->priv->mutex) | |
132 | #define FS_RAW_SESSION_GET_LOCK(session) \ | |
133 | ((session)->priv->mutex) | |
134 | #endif | |
135 | ||
136 | static void fs_raw_session_dispose (GObject *object); | |
137 | static void fs_raw_session_finalize (GObject *object); | |
138 | ||
139 | static void fs_raw_session_get_property (GObject *object, | |
140 | guint prop_id, | |
141 | GValue *value, | |
142 | GParamSpec *pspec); | |
143 | static void fs_raw_session_set_property (GObject *object, | |
144 | guint prop_id, | |
145 | const GValue *value, | |
146 | GParamSpec *pspec); | |
147 | ||
148 | static void fs_raw_session_constructed (GObject *object); | |
149 | ||
150 | static FsStream *fs_raw_session_new_stream (FsSession *session, | |
151 | FsParticipant *participant, | |
152 | FsStreamDirection direction, | |
153 | const gchar *transmitter, | |
154 | guint n_parameters, | |
155 | GParameter *parameters, | |
156 | GError **error); | |
157 | ||
158 | static gchar **fs_raw_session_list_transmitters (FsSession *session); | |
159 | ||
160 | static GType | |
161 | fs_raw_session_get_stream_transmitter_type (FsSession *session, | |
162 | const gchar *transmitter); | |
163 | ||
164 | static void | |
165 | fs_raw_session_class_init (FsRawSessionClass *klass) | |
166 | { | |
167 | GObjectClass *gobject_class; | |
168 | FsSessionClass *session_class; | |
169 | ||
170 | gobject_class = (GObjectClass *) klass; | |
171 | session_class = FS_SESSION_CLASS (klass); | |
172 | ||
173 | gobject_class->set_property = fs_raw_session_set_property; | |
174 | gobject_class->get_property = fs_raw_session_get_property; | |
175 | gobject_class->constructed = fs_raw_session_constructed; | |
176 | ||
177 | session_class->new_stream = fs_raw_session_new_stream; | |
178 | session_class->list_transmitters = fs_raw_session_list_transmitters; | |
179 | session_class->get_stream_transmitter_type = | |
180 | fs_raw_session_get_stream_transmitter_type; | |
181 | ||
182 | g_object_class_override_property (gobject_class, | |
183 | PROP_MEDIA_TYPE, "media-type"); | |
184 | g_object_class_override_property (gobject_class, | |
185 | PROP_ID, "id"); | |
186 | g_object_class_override_property (gobject_class, | |
187 | PROP_SINK_PAD, "sink-pad"); | |
188 | ||
189 | g_object_class_override_property (gobject_class, | |
190 | PROP_CODEC_PREFERENCES, "codec-preferences"); | |
191 | g_object_class_override_property (gobject_class, | |
192 | PROP_CODECS, "codecs"); | |
193 | g_object_class_override_property (gobject_class, | |
194 | PROP_CODECS_WITHOUT_CONFIG, "codecs-without-config"); | |
195 | g_object_class_override_property (gobject_class, | |
196 | PROP_CURRENT_SEND_CODEC, "current-send-codec"); | |
197 | g_object_class_override_property (gobject_class, | |
198 | PROP_CODECS_READY, "codecs-ready"); | |
199 | g_object_class_override_property (gobject_class, | |
200 | PROP_TOS, "tos"); | |
201 | ||
202 | g_object_class_install_property (gobject_class, | |
203 | PROP_CONFERENCE, | |
204 | g_param_spec_object ("conference", | |
205 | "The Conference this stream refers to", | |
206 | "This is a convience pointer for the Conference", | |
207 | FS_TYPE_RAW_CONFERENCE, | |
208 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); | |
209 | ||
210 | gobject_class->dispose = fs_raw_session_dispose; | |
211 | gobject_class->finalize = fs_raw_session_finalize; | |
212 | ||
213 | g_type_class_add_private (klass, sizeof (FsRawSessionPrivate)); | |
214 | } | |
215 | ||
216 | static void | |
217 | fs_raw_session_init (FsRawSession *self) | |
218 | { | |
219 | /* member init */ | |
220 | self->priv = FS_RAW_SESSION_GET_PRIVATE (self); | |
221 | self->priv->construction_error = NULL; | |
222 | ||
223 | self->priv->mutex = g_mutex_new (); | |
224 | ||
225 | self->priv->media_type = FS_MEDIA_TYPE_LAST + 1; | |
226 | } | |
227 | ||
228 | ||
229 | static FsRawConference * | |
230 | fs_raw_session_get_conference (FsRawSession *self, GError **error) | |
231 | { | |
232 | FsRawConference *conference; | |
233 | ||
234 | FS_RAW_SESSION_LOCK (self); | |
235 | conference = self->priv->conference; | |
236 | if (conference) | |
237 | g_object_ref (conference); | |
238 | FS_RAW_SESSION_UNLOCK (self); | |
239 | ||
240 | if (!conference) | |
241 | g_set_error (error, FS_ERROR, FS_ERROR_DISPOSED, | |
242 | "Called function after session has been disposed"); | |
243 | ||
244 | return conference; | |
245 | } | |
246 | ||
247 | static void | |
248 | fs_raw_session_dispose (GObject *object) | |
249 | { | |
250 | FsRawSession *self = FS_RAW_SESSION (object); | |
251 | GstBin *conferencebin = NULL; | |
252 | FsRawConference *conference = NULL; | |
253 | GstElement *valve = NULL; | |
254 | GstElement *capsfilter = NULL; | |
255 | gulong handler_id = 0; | |
256 | FsTransmitter *transmitter = NULL; | |
257 | GstPad *media_sink_pad = NULL; | |
258 | ||
259 | FS_RAW_SESSION_LOCK (self); | |
260 | conference = self->priv->conference; | |
261 | self->priv->conference = NULL; | |
262 | FS_RAW_SESSION_UNLOCK (self); | |
263 | ||
264 | if (!conference) | |
265 | goto out; | |
266 | ||
267 | conferencebin = GST_BIN (conference); | |
268 | ||
269 | if (!conferencebin) | |
270 | goto out; | |
271 | ||
272 | GST_OBJECT_LOCK (conference); | |
273 | valve = self->valve; | |
274 | self->valve = NULL; | |
275 | GST_OBJECT_UNLOCK (conference); | |
276 | ||
277 | if (valve) | |
278 | { | |
279 | gst_element_set_locked_state (valve, TRUE); | |
280 | gst_bin_remove (conferencebin, valve); | |
281 | gst_element_set_state (valve, GST_STATE_NULL); | |
282 | gst_object_unref (valve); | |
283 | } | |
284 | ||
285 | GST_OBJECT_LOCK (conference); | |
286 | capsfilter = self->priv->capsfilter; | |
287 | self->priv->capsfilter = capsfilter; | |
288 | GST_OBJECT_UNLOCK (conference); | |
289 | ||
290 | if (capsfilter) | |
291 | { | |
292 | gst_element_set_locked_state (capsfilter, TRUE); | |
293 | gst_bin_remove (conferencebin, capsfilter); | |
294 | gst_element_set_state (capsfilter, GST_STATE_NULL); | |
295 | gst_object_unref (capsfilter); | |
296 | } | |
297 | ||
298 | GST_OBJECT_LOCK (conference); | |
299 | handler_id = self->priv->stream_direction_handler_id; | |
300 | self->priv->stream_direction_handler_id = 0; | |
301 | GST_OBJECT_UNLOCK (conference); | |
302 | ||
303 | if (self->priv->stream) | |
304 | { | |
305 | if (handler_id > 0 && self->priv->stream) | |
306 | g_signal_handler_disconnect (self->priv->stream, handler_id); | |
307 | ||
308 | raw_session_remove_stream(self, FS_STREAM (self->priv->stream)); | |
309 | } | |
310 | ||
311 | GST_OBJECT_LOCK (conference); | |
312 | transmitter = self->priv->transmitter; | |
313 | self->priv->transmitter = NULL; | |
314 | GST_OBJECT_UNLOCK (conference); | |
315 | ||
316 | if (transmitter) | |
317 | { | |
318 | g_object_unref (transmitter); | |
319 | } | |
320 | ||
321 | GST_OBJECT_LOCK (conference); | |
322 | media_sink_pad = self->priv->media_sink_pad; | |
323 | self->priv->media_sink_pad = NULL; | |
324 | GST_OBJECT_UNLOCK (conference); | |
325 | ||
326 | if (media_sink_pad) | |
327 | { | |
328 | gst_element_remove_pad (GST_ELEMENT (conference), media_sink_pad); | |
329 | gst_pad_set_active (media_sink_pad, FALSE); | |
330 | gst_object_unref (media_sink_pad); | |
331 | } | |
332 | ||
333 | gst_object_unref (conference); | |
334 | ||
335 | out: | |
336 | ||
337 | G_OBJECT_CLASS (fs_raw_session_parent_class)->dispose (object); | |
338 | } | |
339 | ||
340 | static void | |
341 | fs_raw_session_finalize (GObject *object) | |
342 | { | |
343 | FsRawSession *self = FS_RAW_SESSION (object); | |
344 | ||
345 | if (self->priv->codecs) | |
346 | fs_codec_list_destroy (self->priv->codecs); | |
347 | ||
348 | if (self->priv->send_codec) | |
349 | fs_codec_destroy (self->priv->send_codec); | |
350 | ||
351 | g_mutex_free (self->priv->mutex); | |
352 | ||
353 | G_OBJECT_CLASS (fs_raw_session_parent_class)->finalize (object); | |
354 | } | |
355 | ||
356 | static void | |
357 | fs_raw_session_get_property (GObject *object, | |
358 | guint prop_id, | |
359 | GValue *value, | |
360 | GParamSpec *pspec) | |
361 | { | |
362 | FsRawSession *self = FS_RAW_SESSION (object); | |
363 | FsRawConference *conference = fs_raw_session_get_conference (self, NULL); | |
364 | ||
365 | if (!conference) | |
366 | return; | |
367 | ||
368 | GST_OBJECT_LOCK (conference); | |
369 | ||
370 | switch (prop_id) | |
371 | { | |
372 | case PROP_MEDIA_TYPE: | |
373 | g_value_set_enum (value, self->priv->media_type); | |
374 | break; | |
375 | case PROP_ID: | |
376 | g_value_set_uint (value, self->id); | |
377 | break; | |
378 | case PROP_CONFERENCE: | |
379 | g_value_set_object (value, self->priv->conference); | |
380 | break; | |
381 | case PROP_SINK_PAD: | |
382 | g_value_set_object (value, self->priv->media_sink_pad); | |
383 | break; | |
384 | case PROP_CODECS_READY: | |
385 | g_value_set_boolean (value, TRUE); | |
386 | break; | |
387 | case PROP_CODEC_PREFERENCES: | |
388 | /* There are no preferences, so return NULL */ | |
389 | break; | |
390 | case PROP_CODECS: | |
391 | case PROP_CODECS_WITHOUT_CONFIG: | |
392 | g_value_set_boxed (value, self->priv->codecs); | |
393 | break; | |
394 | case PROP_CURRENT_SEND_CODEC: | |
395 | g_value_set_boxed (value, self->priv->send_codec); | |
396 | break; | |
397 | case PROP_TOS: | |
398 | g_value_set_uint (value, self->priv->tos); | |
399 | break; | |
400 | default: | |
401 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
402 | break; | |
403 | } | |
404 | ||
405 | GST_OBJECT_UNLOCK (conference); | |
406 | gst_object_unref (conference); | |
407 | } | |
408 | ||
409 | static void | |
410 | fs_raw_session_set_property (GObject *object, | |
411 | guint prop_id, | |
412 | const GValue *value, | |
413 | GParamSpec *pspec) | |
414 | { | |
415 | FsRawSession *self = FS_RAW_SESSION (object); | |
416 | FsRawConference *conference = fs_raw_session_get_conference (self, NULL); | |
417 | ||
418 | if (!conference && !(pspec->flags & G_PARAM_CONSTRUCT_ONLY)) | |
419 | return; | |
420 | ||
421 | if (conference) | |
422 | GST_OBJECT_LOCK (conference); | |
423 | ||
424 | switch (prop_id) | |
425 | { | |
426 | case PROP_MEDIA_TYPE: | |
427 | self->priv->media_type = g_value_get_enum (value); | |
428 | break; | |
429 | case PROP_ID: | |
430 | self->id = g_value_get_uint (value); | |
431 | break; | |
432 | case PROP_CONFERENCE: | |
433 | self->priv->conference = FS_RAW_CONFERENCE (g_value_dup_object (value)); | |
434 | break; | |
435 | case PROP_TOS: | |
436 | self->priv->tos = g_value_get_uint (value); | |
437 | if (self->priv->transmitter) | |
438 | g_object_set (self->priv->transmitter, "tos", self->priv->tos, NULL); | |
439 | break; | |
440 | default: | |
441 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
442 | break; | |
443 | } | |
444 | ||
445 | if (conference) | |
446 | { | |
447 | GST_OBJECT_UNLOCK (conference); | |
448 | gst_object_unref (conference); | |
449 | } | |
450 | } | |
451 | ||
452 | static void | |
453 | fs_raw_session_constructed (GObject *object) | |
454 | { | |
455 | FsRawSession *self = FS_RAW_SESSION (object); | |
456 | GstPad *pad; | |
457 | gchar *tmp; | |
458 | ||
459 | if (self->id == 0) | |
460 | { | |
461 | g_error ("You can not instantiate this element directly, you MUST" | |
462 | " call fs_raw_session_new ()"); | |
463 | return; | |
464 | } | |
465 | ||
466 | g_assert (self->priv->conference); | |
467 | ||
468 | ||
469 | tmp = g_strdup_printf ("send_capsfilter_%u", self->id); | |
470 | self->priv->capsfilter = gst_element_factory_make ("capsfilter", tmp); | |
471 | g_free (tmp); | |
472 | ||
473 | if (!self->priv->capsfilter) | |
474 | { | |
475 | self->priv->construction_error = g_error_new (FS_ERROR, | |
476 | FS_ERROR_CONSTRUCTION, | |
477 | "Could not make send capsfilter"); | |
478 | return; | |
479 | } | |
480 | ||
481 | gst_object_ref_sink (self->priv->capsfilter); | |
482 | ||
483 | if (!gst_bin_add (GST_BIN (self->priv->conference), self->priv->capsfilter)) | |
484 | { | |
485 | self->priv->construction_error = g_error_new (FS_ERROR, | |
486 | FS_ERROR_CONSTRUCTION, "Could not add capsfilter to conference"); | |
487 | gst_object_unref (self->priv->capsfilter); | |
488 | return; | |
489 | } | |
490 | ||
491 | if (!gst_element_sync_state_with_parent (self->priv->capsfilter)) | |
492 | { | |
493 | self->priv->construction_error = g_error_new (FS_ERROR, | |
494 | FS_ERROR_CONSTRUCTION, | |
495 | "Could not sync the send capsfilter's state with its parent"); | |
496 | gst_bin_remove (GST_BIN (self->priv->conference), self->priv->capsfilter); | |
497 | return; | |
498 | } | |
499 | ||
500 | ||
501 | tmp = g_strdup_printf ("send_valve_%u", self->id); | |
502 | self->valve = gst_element_factory_make ("valve", tmp); | |
503 | g_free (tmp); | |
504 | ||
505 | if (!self->valve) | |
506 | { | |
507 | self->priv->construction_error = g_error_new (FS_ERROR, | |
508 | FS_ERROR_CONSTRUCTION, "Could not make send valve"); | |
509 | return; | |
510 | } | |
511 | ||
512 | gst_object_ref_sink (self->valve); | |
513 | ||
514 | if (!gst_bin_add (GST_BIN (self->priv->conference), self->valve)) | |
515 | { | |
516 | self->priv->construction_error = g_error_new (FS_ERROR, | |
517 | FS_ERROR_CONSTRUCTION, "Could not add valve to conference"); | |
518 | gst_object_unref (self->valve); | |
519 | return; | |
520 | } | |
521 | ||
522 | g_object_set (G_OBJECT (self->valve), "drop", TRUE, NULL); | |
523 | ||
524 | if (!gst_element_sync_state_with_parent (self->valve)) | |
525 | { | |
526 | self->priv->construction_error = g_error_new (FS_ERROR, | |
527 | FS_ERROR_CONSTRUCTION, | |
528 | "Could not sync the send valve's state with its parent"); | |
529 | gst_bin_remove (GST_BIN (self->priv->conference), self->valve); | |
530 | return; | |
531 | } | |
532 | ||
533 | if (!gst_element_link_pads (self->valve, "src", | |
534 | self->priv->capsfilter, "sink")) | |
535 | { | |
536 | self->priv->construction_error = g_error_new (FS_ERROR, | |
537 | FS_ERROR_CONSTRUCTION, | |
538 | "Could not link send valve and capsfilter"); | |
539 | return; | |
540 | } | |
541 | ||
542 | ||
543 | pad = gst_element_get_static_pad (self->valve, "sink"); | |
544 | tmp = g_strdup_printf ("sink_%u", self->id); | |
545 | self->priv->media_sink_pad = gst_ghost_pad_new (tmp, pad); | |
546 | g_free (tmp); | |
547 | gst_object_unref (pad); | |
548 | ||
549 | if (!self->priv->media_sink_pad) | |
550 | { | |
551 | self->priv->construction_error = g_error_new (FS_ERROR, | |
552 | FS_ERROR_CONSTRUCTION, "Could not create sink ghost pad"); | |
553 | return; | |
554 | } | |
555 | ||
556 | gst_object_ref_sink (self->priv->media_sink_pad); | |
557 | ||
558 | gst_pad_set_active (self->priv->media_sink_pad, TRUE); | |
559 | if (!gst_element_add_pad (GST_ELEMENT (self->priv->conference), | |
560 | self->priv->media_sink_pad)) | |
561 | { | |
562 | self->priv->construction_error = g_error_new (FS_ERROR, | |
563 | FS_ERROR_CONSTRUCTION, "Could not add sink pad to conference"); | |
564 | gst_object_unref (self->priv->media_sink_pad); | |
565 | self->priv->media_sink_pad = NULL; | |
566 | return; | |
567 | } | |
568 | ||
569 | if (G_OBJECT_CLASS (fs_raw_session_parent_class)->constructed) | |
570 | G_OBJECT_CLASS (fs_raw_session_parent_class)->constructed (object); | |
571 | } | |
572 | ||
573 | static void | |
574 | _stream_remote_codecs_changed (FsRawStream *stream, GParamSpec *pspec, | |
575 | FsRawSession *self) | |
576 | { | |
577 | FsRawConference *conference = fs_raw_session_get_conference (self, NULL); | |
578 | GList *codecs; | |
579 | GstCaps *caps; | |
580 | FsCodec *codec = NULL; | |
581 | ||
582 | g_object_get (stream, "remote-codecs", &codecs, NULL); | |
583 | ||
584 | if (!codecs) | |
585 | return; | |
586 | ||
587 | if (g_list_length (codecs) == 2) | |
588 | codec = codecs->next->data; | |
589 | else if (codecs && codecs->data) | |
590 | codec = codecs->data; | |
591 | ||
592 | caps = fs_raw_codec_to_gst_caps (codec); | |
593 | ||
594 | if (self->priv->capsfilter) | |
595 | g_object_set (self->priv->capsfilter, "caps", caps, NULL); | |
596 | ||
597 | GST_OBJECT_LOCK (conference); | |
598 | if (!fs_codec_are_equal (self->priv->send_codec, codec)) | |
599 | { | |
600 | if (self->priv->send_codec) | |
601 | fs_codec_destroy (self->priv->send_codec); | |
602 | ||
603 | self->priv->send_codec = fs_codec_copy (codec); | |
604 | ||
605 | GST_OBJECT_UNLOCK (conference); | |
606 | g_object_notify (G_OBJECT (self), "current-send-codec"); | |
607 | gst_element_post_message (GST_ELEMENT (self->priv->conference), | |
608 | gst_message_new_element (GST_OBJECT (self->priv->conference), | |
609 | gst_structure_new ("farsight-send-codec-changed", | |
610 | "session", FS_TYPE_SESSION, self, | |
611 | "codec", FS_TYPE_CODEC, codec, | |
612 | "secondary-codecs", FS_TYPE_CODEC_LIST, NULL, | |
613 | NULL))); | |
614 | GST_OBJECT_LOCK (conference); | |
615 | } | |
616 | ||
617 | if (self->priv->codecs) | |
618 | fs_codec_list_destroy (self->priv->codecs); | |
619 | self->priv->codecs = fs_codec_list_copy (codecs); | |
620 | GST_OBJECT_UNLOCK (conference); | |
621 | ||
622 | g_object_notify (G_OBJECT (self), "codecs"); | |
623 | ||
624 | gst_caps_unref (caps); | |
625 | gst_object_unref (conference); | |
626 | } | |
627 | ||
628 | void | |
629 | raw_session_remove_stream (FsRawSession *self, | |
630 | FsStream *stream) | |
631 | { | |
632 | FsRawConference *conference = fs_raw_session_get_conference (self, NULL); | |
633 | FsTransmitter *transmitter = NULL; | |
634 | GstElement *src = NULL; | |
635 | GstElement *sink = NULL; | |
636 | ||
637 | if (!conference) | |
638 | return; | |
639 | ||
640 | g_object_set (G_OBJECT (self->valve), "drop", TRUE, NULL); | |
641 | ||
642 | GST_OBJECT_LOCK (conference); | |
643 | if (self->priv->stream == (FsRawStream *) stream) | |
644 | { | |
645 | self->priv->stream = NULL; | |
646 | transmitter = self->priv->transmitter; | |
647 | self->priv->transmitter = NULL; | |
648 | } | |
649 | GST_OBJECT_UNLOCK (conference); | |
650 | ||
651 | g_object_get (transmitter, | |
652 | "gst-src", &src, | |
653 | "gst-sink", &sink, | |
654 | NULL); | |
655 | ||
656 | gst_element_set_locked_state (src, TRUE); | |
657 | gst_element_set_state (src, GST_STATE_NULL); | |
658 | gst_bin_remove (GST_BIN (conference), src); | |
659 | ||
660 | gst_element_set_locked_state (sink, TRUE); | |
661 | gst_element_set_state (sink, GST_STATE_NULL); | |
662 | gst_bin_remove (GST_BIN (conference), sink); | |
663 | ||
664 | gst_object_unref (src); | |
665 | gst_object_unref (sink); | |
666 | g_object_unref (transmitter); | |
667 | gst_object_unref (conference); | |
668 | } | |
669 | ||
670 | static gboolean | |
671 | _add_transmitter_sink (FsRawSession *self, | |
672 | GstElement *transmitter_sink, | |
673 | GError **error) | |
674 | { | |
675 | if (!transmitter_sink) | |
676 | { | |
677 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
678 | "Unable to get the sink element from the FsTransmitter"); | |
679 | goto error; | |
680 | } | |
681 | ||
682 | if (!gst_bin_add (GST_BIN (self->priv->conference), transmitter_sink)) | |
683 | { | |
684 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
685 | "Could not add the transmitter's sink element" | |
686 | " for session %d to the conference bin", self->id); | |
687 | gst_object_unref (transmitter_sink); | |
688 | transmitter_sink = NULL; | |
689 | goto error; | |
690 | } | |
691 | ||
692 | if (!gst_element_sync_state_with_parent (transmitter_sink)) | |
693 | { | |
694 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
695 | "Could not sync the transmitter's sink element" | |
696 | " with its parent for session %d", self->id); | |
697 | goto error; | |
698 | } | |
699 | ||
700 | if (!gst_element_link (self->priv->capsfilter, transmitter_sink)) | |
701 | { | |
702 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
703 | "Could not link the capsfilter and transmitter's" | |
704 | " sink element for session %d", self->id); | |
705 | goto error; | |
706 | } | |
707 | ||
708 | return TRUE; | |
709 | ||
710 | error: | |
711 | return FALSE; | |
712 | } | |
713 | ||
714 | static void | |
715 | _stream_direction_notify_cb (GObject *stream, | |
716 | GParamSpec *pspec, | |
717 | gpointer user_data) | |
718 | { | |
719 | FsRawSession *self = FS_RAW_SESSION (user_data); | |
720 | FsStreamDirection direction; | |
721 | ||
722 | g_object_get (stream, "direction", &direction, NULL); | |
723 | ||
724 | if (direction & FS_DIRECTION_SEND) | |
725 | { | |
726 | GstElement *transmitter_sink; | |
727 | GError *error = NULL; | |
728 | gulong handler_id = 0; | |
729 | FsRawConference *conference; | |
730 | ||
731 | conference = fs_raw_session_get_conference (self, &error); | |
732 | ||
733 | if (!conference) | |
734 | { | |
735 | fs_session_emit_error (FS_SESSION (self), error->code, error->message, | |
736 | "Unable to add transmitter sink"); | |
737 | g_clear_error (&error); | |
738 | return; | |
739 | } | |
740 | ||
741 | g_object_get (self->priv->transmitter, "gst-sink", &transmitter_sink, NULL); | |
742 | ||
743 | if (!_add_transmitter_sink (self, transmitter_sink, &error)) | |
744 | { | |
745 | fs_session_emit_error (FS_SESSION (self), error->code, error->message, | |
746 | "Unable to add transmitter sink"); | |
747 | g_clear_error (&error); | |
748 | gst_object_unref (conference); | |
749 | return; | |
750 | } | |
751 | ||
752 | GST_OBJECT_LOCK (conference); | |
753 | handler_id = self->priv->stream_direction_handler_id; | |
754 | self->priv->stream_direction_handler_id = 0; | |
755 | GST_OBJECT_UNLOCK (conference); | |
756 | ||
757 | g_signal_handler_disconnect (stream, handler_id); | |
758 | ||
759 | gst_object_unref (conference); | |
760 | } | |
761 | } | |
762 | ||
763 | /** | |
764 | * fs_raw_session_new_stream: | |
765 | * @session: an #FsRawSession | |
766 | * @participant: #FsParticipant of a participant for the new stream | |
767 | * @direction: #FsStreamDirection describing the direction of the new stream | |
768 | * that will be created for this participant | |
769 | * @error: location of a #GError, or NULL if no error occured | |
770 | * | |
771 | * This function creates a stream for the given participant into the active | |
772 | * session. | |
773 | * | |
774 | * Returns: the new #FsStream that has been created. User must unref the | |
775 | * #FsStream when the stream is ended. If an error occured, returns NULL. | |
776 | */ | |
777 | static FsStream * | |
778 | fs_raw_session_new_stream (FsSession *session, | |
779 | FsParticipant *participant, | |
780 | FsStreamDirection direction, | |
781 | const gchar *transmitter, | |
782 | guint n_parameters, | |
783 | GParameter *parameters, | |
784 | GError **error) | |
785 | { | |
786 | FsRawSession *self = FS_RAW_SESSION (session); | |
787 | FsRawParticipant *rawparticipant = NULL; | |
788 | FsStream *new_stream = NULL; | |
789 | FsRawConference *conference; | |
790 | FsTransmitter *fstransmitter = NULL; | |
791 | FsStreamTransmitter *stream_transmitter = NULL; | |
792 | GstElement *transmitter_sink = NULL; | |
793 | GstElement *transmitter_src = NULL; | |
794 | GstPad *transmitter_pad; | |
795 | ||
796 | if (!FS_IS_RAW_PARTICIPANT (participant)) | |
797 | { | |
798 | g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS, | |
799 | "You have to provide a participant of type RAW"); | |
800 | return NULL; | |
801 | } | |
802 | ||
803 | conference = fs_raw_session_get_conference (self, error); | |
804 | if (!conference) | |
805 | return NULL; | |
806 | ||
807 | GST_OBJECT_LOCK (conference); | |
808 | if (self->priv->stream) | |
809 | goto already_have_stream; | |
810 | GST_OBJECT_UNLOCK (conference); | |
811 | ||
812 | fstransmitter = fs_transmitter_new (transmitter, 1, 0, error); | |
813 | ||
814 | if (!fstransmitter) | |
815 | { | |
816 | goto error; | |
817 | } | |
818 | ||
819 | stream_transmitter = fs_transmitter_new_stream_transmitter (fstransmitter, | |
820 | participant, n_parameters, parameters, error); | |
821 | ||
822 | if (!stream_transmitter) | |
823 | { | |
824 | goto error; | |
825 | } | |
826 | ||
827 | g_object_get (fstransmitter, "gst-src", &transmitter_src, NULL); | |
828 | ||
829 | if (!transmitter_src) | |
830 | { | |
831 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
832 | "Unable to get the source element from the FsTransmitter"); | |
833 | goto error; | |
834 | } | |
835 | ||
836 | if (!gst_bin_add (GST_BIN (self->priv->conference), transmitter_src)) | |
837 | { | |
838 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
839 | "Could not add the transmitter's source element" | |
840 | " for session %d to the conference bin", self->id); | |
841 | gst_object_unref (transmitter_src); | |
842 | transmitter_src = NULL; | |
843 | goto error; | |
844 | } | |
845 | ||
846 | transmitter_pad = gst_element_get_static_pad (transmitter_src, "src1"); | |
847 | ||
848 | if (!transmitter_pad) | |
849 | { | |
850 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
851 | "Unable to get the srcpad from the FsTransmitter's gst-src"); | |
852 | goto error; | |
853 | } | |
854 | ||
855 | rawparticipant = FS_RAW_PARTICIPANT (participant); | |
856 | ||
857 | new_stream = FS_STREAM_CAST (fs_raw_stream_new (self, rawparticipant, | |
858 | direction, conference, stream_transmitter, transmitter_pad, error)); | |
859 | ||
860 | /* stream_new takes the reference to this */ | |
861 | stream_transmitter = NULL; | |
862 | ||
863 | /* stream_new doesn't take the reference to this. Perhaps it should */ | |
864 | g_object_unref (transmitter_pad); | |
865 | ||
866 | if (new_stream) | |
867 | { | |
868 | g_signal_connect_object (new_stream, "notify::remote-codecs", | |
869 | G_CALLBACK (_stream_remote_codecs_changed), self, 0); | |
870 | ||
871 | if (!gst_element_sync_state_with_parent (transmitter_src)) | |
872 | { | |
873 | g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, | |
874 | "Could not sync the transmitter's source element" | |
875 | " with its parent for session %d", self->id); | |
876 | goto error; | |
877 | } | |
878 | ||
879 | if (direction & FS_DIRECTION_SEND) | |
880 | { | |
881 | g_object_get (fstransmitter, "gst-sink", &transmitter_sink, NULL); | |
882 | ||
883 | if (!_add_transmitter_sink (self, transmitter_sink, error)) | |
884 | goto error; | |
885 | } | |
886 | else | |
887 | { | |
888 | self->priv->stream_direction_handler_id = | |
889 | g_signal_connect (new_stream, "notify::direction", | |
890 | G_CALLBACK (_stream_direction_notify_cb), self); | |
891 | } | |
892 | ||
893 | GST_OBJECT_LOCK (conference); | |
894 | if (self->priv->stream) | |
895 | { | |
896 | goto already_have_stream; | |
897 | } | |
898 | self->priv->stream = (FsRawStream *) new_stream; | |
899 | ||
900 | if (self->priv->tos) | |
901 | g_object_set (fstransmitter, "tos", self->priv->tos, NULL); | |
902 | ||
903 | self->priv->transmitter = fstransmitter; | |
904 | ||
905 | GST_OBJECT_UNLOCK (conference); | |
906 | ||
907 | goto done; | |
908 | } | |
909 | ||
910 | error: | |
911 | if (transmitter_src != NULL) | |
912 | gst_bin_remove (GST_BIN (conference), transmitter_src); | |
913 | ||
914 | if (transmitter_sink != NULL) | |
915 | gst_bin_remove (GST_BIN (conference), transmitter_sink); | |
916 | ||
917 | if (stream_transmitter != NULL) | |
918 | { | |
919 | fs_stream_transmitter_stop (stream_transmitter); | |
920 | g_object_unref (stream_transmitter); | |
921 | } | |
922 | ||
923 | if (fstransmitter != NULL) | |
924 | g_object_unref (fstransmitter); | |
925 | ||
926 | done: | |
927 | gst_object_unref (conference); | |
928 | return new_stream; | |
929 | ||
930 | already_have_stream: | |
931 | GST_OBJECT_UNLOCK (conference); | |
932 | g_set_error (error, FS_ERROR, FS_ERROR_ALREADY_EXISTS, | |
933 | "There already is a stream in this session"); | |
934 | goto error; | |
935 | } | |
936 | ||
937 | FsRawSession * | |
938 | fs_raw_session_new (FsMediaType media_type, | |
939 | FsRawConference *conference, | |
940 | guint id, | |
941 | GError **error) | |
942 | { | |
943 | FsRawSession *session = g_object_new (FS_TYPE_RAW_SESSION, | |
944 | "media-type", media_type, | |
945 | "conference", conference, | |
946 | "id", id, | |
947 | NULL); | |
948 | ||
949 | if (!session) | |
950 | { | |
951 | *error = g_error_new (FS_ERROR, FS_ERROR_CONSTRUCTION, | |
952 | "Could not create object"); | |
953 | } | |
954 | else if (session->priv->construction_error) | |
955 | { | |
956 | g_propagate_error (error, session->priv->construction_error); | |
957 | g_object_unref (session); | |
958 | return NULL; | |
959 | } | |
960 | ||
961 | return session; | |
962 | } | |
963 | ||
964 | static gchar ** | |
965 | fs_raw_session_list_transmitters (FsSession *session) | |
966 | { | |
967 | return fs_transmitter_list_available (); | |
968 | } | |
969 | ||
970 | static GType | |
971 | fs_raw_session_get_stream_transmitter_type (FsSession *session, | |
972 | const gchar *transmitter) | |
973 | { | |
974 | FsTransmitter *fstransmitter; | |
975 | GType transmitter_type; | |
976 | ||
977 | fstransmitter = fs_transmitter_new (transmitter, 1, 0, NULL); | |
978 | ||
979 | if (!fstransmitter) | |
980 | return G_TYPE_NONE; | |
981 | ||
982 | transmitter_type = fs_transmitter_get_stream_transmitter_type (fstransmitter); | |
983 | ||
984 | g_object_unref (fstransmitter); | |
985 | return transmitter_type; | |
986 | } |
0 | /* | |
1 | * Farsight2 - Farsight Raw Session | |
2 | * | |
3 | * Copyright 2008 Richard Spiers <richard.spiers@gmail.com> | |
4 | * Copyright 2007 Nokia Corp. | |
5 | * Copyright 2007,2010 Collabora Ltd. | |
6 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
7 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
8 | * | |
9 | * fs-raw-session.h - A Farsight Raw Session gobject | |
10 | * | |
11 | * This library is free software; you can redistribute it and/or | |
12 | * modify it under the terms of the GNU Lesser General Public | |
13 | * License as published by the Free Software Foundation; either | |
14 | * version 2.1 of the License, or (at your option) any later version. | |
15 | * | |
16 | * This library is distributed in the hope that it will be useful, | |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 | * Lesser General Public License for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU Lesser General Public | |
22 | * License along with this library; if not, write to the Free Software | |
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
24 | */ | |
25 | ||
26 | #ifndef __FS_RAW_SESSION_H__ | |
27 | #define __FS_RAW_SESSION_H__ | |
28 | ||
29 | #include <gst/gst.h> | |
30 | ||
31 | #include <gst/farsight/fs-session.h> | |
32 | ||
33 | #include "fs-raw-conference.h" | |
34 | ||
35 | G_BEGIN_DECLS | |
36 | ||
37 | /* TYPE MACROS */ | |
38 | #define FS_TYPE_RAW_SESSION \ | |
39 | (fs_raw_session_get_type ()) | |
40 | #define FS_RAW_SESSION(obj) \ | |
41 | (G_TYPE_CHECK_INSTANCE_CAST((obj), FS_TYPE_RAW_SESSION, FsRawSession)) | |
42 | #define FS_RAW_SESSION_CLASS(klass) \ | |
43 | (G_TYPE_CHECK_CLASS_CAST((klass), FS_TYPE_RAW_SESSION, FsRawSessionClass)) | |
44 | #define FS_IS_RAW_SESSION(obj) \ | |
45 | (G_TYPE_CHECK_INSTANCE_TYPE((obj), FS_TYPE_RAW_SESSION)) | |
46 | #define FS_IS_RAW_SESSION_CLASS(klass) \ | |
47 | (G_TYPE_CHECK_CLASS_TYPE((klass), FS_TYPE_RAW_SESSION)) | |
48 | #define FS_RAW_SESSION_GET_CLASS(obj) \ | |
49 | (G_TYPE_INSTANCE_GET_CLASS ((obj), FS_TYPE_RAW_SESSION, FsRawSessionClass)) | |
50 | #define FS_RAW_SESSION_CAST(obj) ((FsRawSession *) (obj)) | |
51 | ||
52 | typedef struct _FsRawSession FsRawSession; | |
53 | typedef struct _FsRawSessionClass FsRawSessionClass; | |
54 | typedef struct _FsRawSessionPrivate FsRawSessionPrivate; | |
55 | ||
56 | struct _FsRawSessionClass | |
57 | { | |
58 | FsSessionClass parent_class; | |
59 | }; | |
60 | ||
61 | /** | |
62 | * FsRawSession: | |
63 | * | |
64 | */ | |
65 | struct _FsRawSession | |
66 | { | |
67 | FsSession parent; | |
68 | ||
69 | /* Protected by the conf lock */ | |
70 | GstElement *valve; | |
71 | ||
72 | /*< private >*/ | |
73 | ||
74 | /* This ID can be accessed by the streams for this session */ | |
75 | guint id; | |
76 | ||
77 | FsRawSessionPrivate *priv; | |
78 | }; | |
79 | ||
80 | ||
81 | GType fs_raw_session_get_type (void); | |
82 | ||
83 | FsRawSession *fs_raw_session_new (FsMediaType media_type, | |
84 | FsRawConference *conference, | |
85 | guint id, | |
86 | GError **error); | |
87 | ||
88 | void raw_session_remove_stream (FsRawSession *self, | |
89 | FsStream *stream); | |
90 | ||
91 | G_END_DECLS | |
92 | ||
93 | #endif /* __FS_RAW_SESSION_H__ */ |
0 | /* | |
1 | * Farsight2 - Farsight Raw Stream | |
2 | * | |
3 | * Copyright 2008 Richard Spiers <richard.spiers@gmail.com> | |
4 | * Copyright 2007 Nokia Corp. | |
5 | * Copyright 2007-2010 Collabora Ltd. | |
6 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
7 | * @author: Youness Alaoui <youness.alaoui@collabora.co.uk> | |
8 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
9 | * | |
10 | * fs-raw-stream.c - A Farsight Raw Stream gobject | |
11 | * | |
12 | * This library is free software; you can redistribute it and/or | |
13 | * modify it under the terms of the GNU Lesser General Public | |
14 | * License as published by the Free Software Foundation; either | |
15 | * version 2.1 of the License, or (at your option) any later version. | |
16 | * | |
17 | * This library is distributed in the hope that it will be useful, | |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
20 | * Lesser General Public License for more details. | |
21 | * | |
22 | * You should have received a copy of the GNU Lesser General Public | |
23 | * License along with this library; if not, write to the Free Software | |
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
25 | */ | |
26 | ||
27 | /** | |
28 | * SECTION:fs-raw-stream | |
29 | * @short_description: A raw stream in a #FsRawSession in a #FsRawConference | |
30 | * | |
31 | * This list of remote codecs set on this stream should contain one or two | |
32 | * codecs. The first codec in this list represents the codec the remote side | |
33 | * will be sending. The second codec, if given, represents what should be | |
34 | * sent to the remote side. If only one codec is passed, and the codec to | |
35 | * send to the remote side hasn't yet been chosen, it will use the first | |
36 | * and only codec in the list. | |
37 | * | |
38 | * The codec content of the codec are ignored except for the "encoding_name" | |
39 | * parameter which has to be a valid caps string that can be parsed with | |
40 | * gst_caps_to_string() to produce fixed caps. | |
41 | */ | |
42 | ||
43 | #ifdef HAVE_CONFIG_H | |
44 | #include "config.h" | |
45 | #endif | |
46 | ||
47 | #include "fs-raw-stream.h" | |
48 | ||
49 | #include <arpa/inet.h> | |
50 | #include <fcntl.h> | |
51 | #include <netinet/in.h> | |
52 | #include <sys/socket.h> | |
53 | #include <string.h> | |
54 | #include <unistd.h> | |
55 | ||
56 | #include <gst/gst.h> | |
57 | ||
58 | ||
59 | #define GST_CAT_DEFAULT fsrawconference_debug | |
60 | ||
61 | /* Signals */ | |
62 | enum | |
63 | { | |
64 | LAST_SIGNAL | |
65 | }; | |
66 | ||
67 | /* props */ | |
68 | enum | |
69 | { | |
70 | PROP_0, | |
71 | PROP_DIRECTION, | |
72 | PROP_PARTICIPANT, | |
73 | PROP_SESSION, | |
74 | PROP_CONFERENCE, | |
75 | PROP_STREAM_TRANSMITTER, | |
76 | PROP_REMOTE_CODECS, | |
77 | PROP_TRANSMITTER_PAD, | |
78 | }; | |
79 | ||
80 | ||
81 | ||
82 | struct _FsRawStreamPrivate | |
83 | { | |
84 | FsRawConference *conference; | |
85 | FsRawSession *session; | |
86 | FsRawParticipant *participant; | |
87 | FsStreamDirection direction; | |
88 | FsStreamTransmitter *stream_transmitter; | |
89 | GstElement *capsfilter; | |
90 | GstElement *recv_valve; | |
91 | GstPad *transmitter_pad; | |
92 | GstPad *src_pad; | |
93 | ||
94 | GList *remote_codecs; | |
95 | ||
96 | gulong blocking_id; | |
97 | ||
98 | GError *construction_error; | |
99 | ||
100 | gulong local_candidates_prepared_handler_id; | |
101 | gulong new_active_candidate_pair_handler_id; | |
102 | gulong new_local_candidate_handler_id; | |
103 | gulong error_handler_id; | |
104 | gulong state_changed_handler_id; | |
105 | ||
106 | GMutex *mutex; /* protects the conference */ | |
107 | ||
108 | gboolean disposed; | |
109 | ||
110 | #ifdef DEBUG_MUTEXES | |
111 | guint count; | |
112 | #endif | |
113 | }; | |
114 | ||
115 | ||
116 | G_DEFINE_TYPE(FsRawStream, fs_raw_stream, FS_TYPE_STREAM); | |
117 | ||
118 | #define FS_RAW_STREAM_GET_PRIVATE(o) \ | |
119 | (G_TYPE_INSTANCE_GET_PRIVATE ((o), FS_TYPE_RAW_STREAM, FsRawStreamPrivate)) | |
120 | ||
121 | #ifdef DEBUG_MUTEXES | |
122 | ||
123 | #define FS_RAW_STREAM_LOCK(stream) \ | |
124 | do { \ | |
125 | g_mutex_lock (FS_RAW_STREAM (stream)->priv->mutex); \ | |
126 | g_assert (FS_RAW_STREAM (stream)->priv->count == 0); \ | |
127 | FS_RAW_STREAM (stream)->priv->count++; \ | |
128 | } while (0); | |
129 | #define FS_RAW_STREAM_UNLOCK(stream) \ | |
130 | do { \ | |
131 | g_assert (FS_RAW_STREAM (stream)->priv->count == 1); \ | |
132 | FS_RAW_STREAM (stream)->priv->count--; \ | |
133 | g_mutex_unlock (FS_RAW_STREAM (stream)->priv->mutex); \ | |
134 | } while (0); | |
135 | #define FS_RAW_STREAM_GET_LOCK(stream) \ | |
136 | (FS_RAW_STREAM (stream)->priv->mutex) | |
137 | #else | |
138 | #define FS_RAW_STREAM_LOCK(stream) \ | |
139 | g_mutex_lock ((stream)->priv->mutex) | |
140 | #define FS_RAW_STREAM_UNLOCK(stream) \ | |
141 | g_mutex_unlock ((stream)->priv->mutex) | |
142 | #define FS_RAW_STREAM_GET_LOCK(stream) \ | |
143 | ((stream)->priv->mutex) | |
144 | #endif | |
145 | ||
146 | static void fs_raw_stream_dispose (GObject *object); | |
147 | static void fs_raw_stream_finalize (GObject *object); | |
148 | ||
149 | static void fs_raw_stream_get_property (GObject *object, | |
150 | guint prop_id, | |
151 | GValue *value, | |
152 | GParamSpec *pspec); | |
153 | static void fs_raw_stream_set_property (GObject *object, | |
154 | guint prop_id, | |
155 | const GValue *value, | |
156 | GParamSpec *pspec); | |
157 | ||
158 | static void fs_raw_stream_constructed (GObject *object); | |
159 | ||
160 | static void _local_candidates_prepared ( | |
161 | FsStreamTransmitter *stream_transmitter, | |
162 | gpointer user_data); | |
163 | static void _new_active_candidate_pair ( | |
164 | FsStreamTransmitter *stream_transmitter, | |
165 | FsCandidate *candidate1, | |
166 | FsCandidate *candidate2, | |
167 | gpointer user_data); | |
168 | static void _new_local_candidate ( | |
169 | FsStreamTransmitter *stream_transmitter, | |
170 | FsCandidate *candidate, | |
171 | gpointer user_data); | |
172 | static void _transmitter_error ( | |
173 | FsStreamTransmitter *stream_transmitter, | |
174 | gint errorno, | |
175 | gchar *error_msg, | |
176 | gchar *debug_msg, | |
177 | gpointer user_data); | |
178 | static void _state_changed (FsStreamTransmitter *stream_transmitter, | |
179 | guint component, | |
180 | FsStreamState state, | |
181 | gpointer user_data); | |
182 | ||
183 | static gboolean fs_raw_stream_set_remote_candidates (FsStream *stream, | |
184 | GList *candidates, | |
185 | GError **error); | |
186 | static gboolean fs_raw_stream_set_remote_codecs (FsStream *stream, | |
187 | GList *remote_codecs, | |
188 | GError **error); | |
189 | ||
190 | static void | |
191 | fs_raw_stream_class_init (FsRawStreamClass *klass) | |
192 | { | |
193 | GObjectClass *gobject_class; | |
194 | FsStreamClass *stream_class = FS_STREAM_CLASS (klass); | |
195 | ||
196 | gobject_class = (GObjectClass *) klass; | |
197 | ||
198 | gobject_class->set_property = fs_raw_stream_set_property; | |
199 | gobject_class->get_property = fs_raw_stream_get_property; | |
200 | gobject_class->constructed = fs_raw_stream_constructed; | |
201 | gobject_class->dispose = fs_raw_stream_dispose; | |
202 | gobject_class->finalize = fs_raw_stream_finalize; | |
203 | ||
204 | stream_class->set_remote_candidates = fs_raw_stream_set_remote_candidates; | |
205 | stream_class->set_remote_codecs = fs_raw_stream_set_remote_codecs; | |
206 | ||
207 | ||
208 | g_type_class_add_private (klass, sizeof (FsRawStreamPrivate)); | |
209 | ||
210 | g_object_class_override_property (gobject_class, | |
211 | PROP_DIRECTION, | |
212 | "direction"); | |
213 | g_object_class_override_property (gobject_class, | |
214 | PROP_PARTICIPANT, | |
215 | "participant"); | |
216 | g_object_class_override_property (gobject_class, | |
217 | PROP_SESSION, | |
218 | "session"); | |
219 | g_object_class_override_property (gobject_class, | |
220 | PROP_REMOTE_CODECS, | |
221 | "remote-codecs"); | |
222 | ||
223 | g_object_class_install_property (gobject_class, | |
224 | PROP_CONFERENCE, | |
225 | g_param_spec_object ("conference", | |
226 | "The Conference this stream refers to", | |
227 | "This is a conveniance pointer for the Conference", | |
228 | FS_TYPE_RAW_CONFERENCE, | |
229 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); | |
230 | ||
231 | g_object_class_install_property (gobject_class, | |
232 | PROP_TRANSMITTER_PAD, | |
233 | g_param_spec_object ("transmitter-pad", | |
234 | "The GstPad this stream is linked to", | |
235 | "This is the pad on which this stream will attach itself", | |
236 | GST_TYPE_PAD, | |
237 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); | |
238 | ||
239 | /** | |
240 | * FsRawStream:stream-transmitter: | |
241 | * | |
242 | * The #FsStreamTransmitter for this stream. | |
243 | * | |
244 | */ | |
245 | g_object_class_install_property (gobject_class, | |
246 | PROP_STREAM_TRANSMITTER, | |
247 | g_param_spec_object ("stream-transmitter", | |
248 | "The transmitter use by the stream", | |
249 | "An FsStreamTransmitter used by this stream", | |
250 | FS_TYPE_STREAM_TRANSMITTER, | |
251 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); | |
252 | } | |
253 | ||
254 | static void | |
255 | fs_raw_stream_init (FsRawStream *self) | |
256 | { | |
257 | /* member init */ | |
258 | self->priv = FS_RAW_STREAM_GET_PRIVATE (self); | |
259 | ||
260 | self->priv->session = NULL; | |
261 | self->priv->participant = NULL; | |
262 | ||
263 | self->priv->direction = FS_DIRECTION_NONE; | |
264 | ||
265 | self->priv->mutex = g_mutex_new (); | |
266 | } | |
267 | ||
268 | ||
269 | static FsRawConference * | |
270 | fs_raw_stream_get_conference (FsRawStream *self, GError **error) | |
271 | { | |
272 | FsRawConference *conference; | |
273 | ||
274 | FS_RAW_STREAM_LOCK (self); | |
275 | conference = self->priv->conference; | |
276 | if (conference) | |
277 | g_object_ref (conference); | |
278 | FS_RAW_STREAM_UNLOCK (self); | |
279 | ||
280 | if (!conference) | |
281 | g_set_error (error, FS_ERROR, FS_ERROR_DISPOSED, | |
282 | "Called function after stream has been disposed"); | |
283 | ||
284 | return conference; | |
285 | } | |
286 | ||
287 | static gpointer | |
288 | trigger_dispose (gpointer data) | |
289 | { | |
290 | g_object_unref (data); | |
291 | return NULL; | |
292 | } | |
293 | ||
294 | static void | |
295 | fs_raw_stream_real_dispose (FsRawStream *self) | |
296 | { | |
297 | FsRawConference *conference; | |
298 | FsStreamTransmitter *st; | |
299 | ||
300 | FS_RAW_STREAM_LOCK (self); | |
301 | conference = self->priv->conference; | |
302 | self->priv->conference = NULL; | |
303 | FS_RAW_STREAM_UNLOCK (self); | |
304 | ||
305 | if (!conference) | |
306 | return; | |
307 | ||
308 | if (self->priv->src_pad) | |
309 | { | |
310 | gst_element_remove_pad (GST_ELEMENT (conference), self->priv->src_pad); | |
311 | gst_pad_set_active (self->priv->src_pad, FALSE); | |
312 | gst_object_unref (self->priv->src_pad); | |
313 | self->priv->src_pad = NULL; | |
314 | } | |
315 | ||
316 | ||
317 | if (self->priv->recv_valve) | |
318 | { | |
319 | gst_element_set_locked_state (self->priv->recv_valve, TRUE); | |
320 | gst_bin_remove (GST_BIN (conference), self->priv->recv_valve); | |
321 | gst_element_set_state (self->priv->recv_valve, GST_STATE_NULL); | |
322 | gst_object_unref (self->priv->recv_valve); | |
323 | self->priv->recv_valve = NULL; | |
324 | } | |
325 | ||
326 | if (self->priv->capsfilter) | |
327 | { | |
328 | gst_element_set_locked_state (self->priv->capsfilter, TRUE); | |
329 | gst_bin_remove (GST_BIN (conference), self->priv->capsfilter); | |
330 | gst_element_set_state (self->priv->capsfilter, GST_STATE_NULL); | |
331 | gst_object_unref (self->priv->capsfilter); | |
332 | self->priv->capsfilter = NULL; | |
333 | } | |
334 | ||
335 | if (self->priv->blocking_id) | |
336 | { | |
337 | if (self->priv->transmitter_pad) | |
338 | gst_pad_remove_data_probe (self->priv->transmitter_pad, | |
339 | self->priv->blocking_id); | |
340 | self->priv->blocking_id = 0; | |
341 | } | |
342 | ||
343 | if (self->priv->transmitter_pad) | |
344 | { | |
345 | gst_object_unref (self->priv->transmitter_pad); | |
346 | self->priv->transmitter_pad = NULL; | |
347 | } | |
348 | ||
349 | st = self->priv->stream_transmitter; | |
350 | self->priv->stream_transmitter = NULL; | |
351 | ||
352 | if (st) | |
353 | { | |
354 | g_signal_handler_disconnect (st, | |
355 | self->priv->local_candidates_prepared_handler_id); | |
356 | g_signal_handler_disconnect (st, | |
357 | self->priv->new_active_candidate_pair_handler_id); | |
358 | g_signal_handler_disconnect (st, | |
359 | self->priv->new_local_candidate_handler_id); | |
360 | g_signal_handler_disconnect (st, | |
361 | self->priv->error_handler_id); | |
362 | g_signal_handler_disconnect (st, | |
363 | self->priv->state_changed_handler_id); | |
364 | ||
365 | fs_stream_transmitter_stop (st); | |
366 | g_object_unref (st); | |
367 | } | |
368 | ||
369 | if (self->priv->participant) | |
370 | { | |
371 | g_object_unref (self->priv->participant); | |
372 | self->priv->participant = NULL; | |
373 | } | |
374 | ||
375 | if (self->priv->session) | |
376 | { | |
377 | raw_session_remove_stream (self->priv->session, (FsStream *)self); | |
378 | ||
379 | g_object_unref (self->priv->session); | |
380 | self->priv->session = NULL; | |
381 | } | |
382 | ||
383 | gst_object_unref (conference); | |
384 | ||
385 | G_OBJECT_CLASS (fs_raw_stream_parent_class)->dispose (G_OBJECT (self)); | |
386 | } | |
387 | ||
388 | static void | |
389 | fs_raw_stream_dispose (GObject *object) | |
390 | { | |
391 | FsRawStream *self = FS_RAW_STREAM (object); | |
392 | FsRawConference *conference = fs_raw_stream_get_conference (self, NULL); | |
393 | gboolean is_internal; | |
394 | ||
395 | if (!conference) | |
396 | return; | |
397 | ||
398 | is_internal = fs_raw_conference_is_internal_thread (conference); | |
399 | ||
400 | GST_OBJECT_LOCK (conference); | |
401 | if (self->priv->disposed) | |
402 | { | |
403 | GST_OBJECT_UNLOCK (conference); | |
404 | return; | |
405 | } | |
406 | ||
407 | if (is_internal) | |
408 | { | |
409 | GST_OBJECT_UNLOCK (conference); | |
410 | g_object_ref (self); | |
411 | if (!g_thread_create (trigger_dispose, self, FALSE, NULL)) | |
412 | g_error ("Could not create dispose thread"); | |
413 | } | |
414 | else | |
415 | { | |
416 | self->priv->disposed = TRUE; | |
417 | GST_OBJECT_UNLOCK (conference); | |
418 | fs_raw_stream_real_dispose (self); | |
419 | } | |
420 | ||
421 | g_object_unref (conference); | |
422 | } | |
423 | ||
424 | static void | |
425 | fs_raw_stream_finalize (GObject *object) | |
426 | { | |
427 | FsRawStream *self = FS_RAW_STREAM (object); | |
428 | ||
429 | fs_codec_list_destroy (self->priv->remote_codecs); | |
430 | ||
431 | g_mutex_free (self->priv->mutex); | |
432 | ||
433 | G_OBJECT_CLASS (fs_raw_stream_parent_class)->finalize (object); | |
434 | } | |
435 | ||
436 | ||
437 | static void | |
438 | fs_raw_stream_get_property (GObject *object, | |
439 | guint prop_id, | |
440 | GValue *value, | |
441 | GParamSpec *pspec) | |
442 | { | |
443 | FsRawStream *self = FS_RAW_STREAM (object); | |
444 | FsRawConference *conference = fs_raw_stream_get_conference (self, NULL); | |
445 | ||
446 | if (!conference && | |
447 | !(pspec->flags & (G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT))) | |
448 | return; | |
449 | ||
450 | if (conference) | |
451 | GST_OBJECT_LOCK (conference); | |
452 | ||
453 | switch (prop_id) | |
454 | { | |
455 | case PROP_SESSION: | |
456 | g_value_set_object (value, self->priv->session); | |
457 | break; | |
458 | case PROP_PARTICIPANT: | |
459 | g_value_set_object (value, self->priv->participant); | |
460 | break; | |
461 | case PROP_DIRECTION: | |
462 | g_value_set_flags (value, self->priv->direction); | |
463 | break; | |
464 | case PROP_CONFERENCE: | |
465 | g_value_set_object (value, self->priv->conference); | |
466 | break; | |
467 | case PROP_REMOTE_CODECS: | |
468 | g_value_set_boxed (value, self->priv->remote_codecs); | |
469 | break; | |
470 | default: | |
471 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
472 | break; | |
473 | } | |
474 | ||
475 | if (conference) | |
476 | { | |
477 | GST_OBJECT_UNLOCK (conference); | |
478 | gst_object_unref (conference); | |
479 | } | |
480 | } | |
481 | ||
482 | static void | |
483 | fs_raw_stream_set_property (GObject *object, | |
484 | guint prop_id, | |
485 | const GValue *value, | |
486 | GParamSpec *pspec) | |
487 | { | |
488 | FsRawStream *self = FS_RAW_STREAM (object); | |
489 | FsRawConference *conference = fs_raw_stream_get_conference (self, NULL); | |
490 | ||
491 | if (!conference && | |
492 | !(pspec->flags & (G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT))) | |
493 | return; | |
494 | ||
495 | if (conference) | |
496 | GST_OBJECT_LOCK (conference); | |
497 | ||
498 | switch (prop_id) | |
499 | { | |
500 | case PROP_SESSION: | |
501 | self->priv->session = FS_RAW_SESSION (g_value_dup_object (value)); | |
502 | break; | |
503 | case PROP_PARTICIPANT: | |
504 | self->priv->participant = FS_RAW_PARTICIPANT (g_value_dup_object (value)); | |
505 | break; | |
506 | case PROP_DIRECTION: | |
507 | if (g_value_get_flags (value) != self->priv->direction) | |
508 | { | |
509 | GstElement *recv_valve = NULL; | |
510 | GstElement *session_valve = NULL; | |
511 | FsStreamTransmitter *st = NULL; | |
512 | ||
513 | if (!conference || | |
514 | !self->priv->recv_valve || | |
515 | !self->priv->session) | |
516 | { | |
517 | self->priv->direction = g_value_get_flags (value); | |
518 | break; | |
519 | } | |
520 | ||
521 | if (self->priv->recv_valve) | |
522 | recv_valve = gst_object_ref (self->priv->recv_valve); | |
523 | if (self->priv->session->valve) | |
524 | session_valve = gst_object_ref (self->priv->session->valve); | |
525 | if (self->priv->stream_transmitter) | |
526 | st = g_object_ref (self->priv->stream_transmitter); | |
527 | ||
528 | self->priv->direction = g_value_get_flags (value); | |
529 | ||
530 | GST_OBJECT_UNLOCK (conference); | |
531 | if (recv_valve) | |
532 | g_object_set (recv_valve, "drop", | |
533 | (self->priv->direction & FS_DIRECTION_RECV) ? FALSE : TRUE, NULL); | |
534 | if (session_valve) | |
535 | g_object_set (session_valve, "drop", | |
536 | (self->priv->direction & FS_DIRECTION_SEND) ? FALSE : TRUE, NULL); | |
537 | if (st) | |
538 | g_object_set (st, "sending", | |
539 | (self->priv->direction & FS_DIRECTION_SEND) ? TRUE : FALSE, NULL); | |
540 | GST_OBJECT_LOCK (conference); | |
541 | ||
542 | if (session_valve) | |
543 | gst_object_unref (session_valve); | |
544 | if (recv_valve) | |
545 | gst_object_unref (recv_valve); | |
546 | if (st) | |
547 | g_object_unref (st); | |
548 | ||
549 | g_object_notify (object, "direction"); | |
550 | } | |
551 | break; | |
552 | case PROP_CONFERENCE: | |
553 | self->priv->conference = FS_RAW_CONFERENCE (g_value_dup_object (value)); | |
554 | break; | |
555 | case PROP_STREAM_TRANSMITTER: | |
556 | self->priv->stream_transmitter = g_value_get_object (value); | |
557 | break; | |
558 | case PROP_TRANSMITTER_PAD: | |
559 | self->priv->transmitter_pad = GST_PAD (g_value_dup_object (value)); | |
560 | break; | |
561 | default: | |
562 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
563 | break; | |
564 | } | |
565 | ||
566 | if (conference) | |
567 | { | |
568 | GST_OBJECT_UNLOCK (conference); | |
569 | gst_object_unref (conference); | |
570 | } | |
571 | } | |
572 | ||
573 | static gboolean | |
574 | _transmitter_pad_have_data_callback (GstPad *pad, GstMiniObject *miniobj, | |
575 | gpointer user_data) | |
576 | { | |
577 | FsRawStream *self = FS_RAW_STREAM_CAST (user_data); | |
578 | FsRawConference *conference = fs_raw_stream_get_conference (self, NULL); | |
579 | GList *remote_codecs = NULL; | |
580 | GstElement *capsfilter = NULL; | |
581 | gulong blocking_id = 0; | |
582 | gboolean ret = TRUE; | |
583 | gboolean remove = FALSE; | |
584 | ||
585 | GST_OBJECT_LOCK (conference); | |
586 | remote_codecs = self->priv->remote_codecs; | |
587 | capsfilter = self->priv->capsfilter; | |
588 | GST_OBJECT_UNLOCK (conference); | |
589 | ||
590 | if (!remote_codecs || !capsfilter) | |
591 | { | |
592 | ret = FALSE; | |
593 | } | |
594 | else if (GST_IS_BUFFER (miniobj)) | |
595 | { | |
596 | GstCaps *caps; | |
597 | FsCodec *codec = remote_codecs->data; | |
598 | caps = fs_raw_codec_to_gst_caps (codec); | |
599 | ||
600 | if (!GST_IS_CAPS (caps)) | |
601 | ret = FALSE; | |
602 | else | |
603 | remove = TRUE; | |
604 | ||
605 | gst_caps_unref (caps); | |
606 | } | |
607 | ||
608 | blocking_id = self->priv->blocking_id; | |
609 | ||
610 | if (remove && blocking_id) | |
611 | { | |
612 | GstPad *ghostpad; | |
613 | GstPad *srcpad; | |
614 | gchar *padname; | |
615 | ||
616 | gst_pad_remove_data_probe (pad, blocking_id); | |
617 | GST_OBJECT_LOCK (conference); | |
618 | if (self->priv->blocking_id == blocking_id) | |
619 | self->priv->blocking_id = 0; | |
620 | GST_OBJECT_UNLOCK (conference); | |
621 | ||
622 | srcpad = gst_element_get_static_pad (capsfilter, "src"); | |
623 | ||
624 | if (!srcpad) | |
625 | { | |
626 | GST_WARNING ("Unable to get capsfilter (%p) srcpad", capsfilter); | |
627 | return FALSE; | |
628 | } | |
629 | ||
630 | padname = g_strdup_printf ("src_%d", self->priv->session->id); | |
631 | ghostpad = gst_ghost_pad_new_from_template (padname, srcpad, | |
632 | gst_element_class_get_pad_template ( | |
633 | GST_ELEMENT_GET_CLASS (self->priv->conference), | |
634 | "src_%d")); | |
635 | g_free (padname); | |
636 | ||
637 | gst_object_ref_sink (ghostpad); | |
638 | ||
639 | /* XXX Should this really be needed? */ | |
640 | if (!gst_pad_set_active (ghostpad, TRUE)) | |
641 | GST_WARNING ("Unable to set ghost pad active"); | |
642 | ||
643 | ||
644 | if (!gst_element_add_pad (GST_ELEMENT (self->priv->conference), ghostpad)) | |
645 | { | |
646 | GST_WARNING ("Unable to add ghost pad to conference"); | |
647 | return FALSE; | |
648 | } | |
649 | ||
650 | GST_OBJECT_LOCK (conference); | |
651 | if (self->priv->src_pad) | |
652 | { | |
653 | GST_WARNING ("Src pad %p already exists in session %d", | |
654 | self->priv->src_pad, self->priv->session->id); | |
655 | gst_object_unref (self->priv->src_pad); | |
656 | } | |
657 | ||
658 | self->priv->src_pad = ghostpad; | |
659 | GST_OBJECT_UNLOCK (conference); | |
660 | ||
661 | fs_stream_emit_src_pad_added (FS_STREAM (self), ghostpad, | |
662 | remote_codecs->data); | |
663 | } | |
664 | ||
665 | return ret; | |
666 | } | |
667 | ||
668 | static void | |
669 | fs_raw_stream_constructed (GObject *object) | |
670 | { | |
671 | FsRawStream *self = FS_RAW_STREAM_CAST (object); | |
672 | GstPad *valve_sink_pad = NULL; | |
673 | GstPadLinkReturn linkret; | |
674 | gchar *tmp; | |
675 | ||
676 | if (!self->priv->conference) { | |
677 | self->priv->construction_error = g_error_new (FS_ERROR, | |
678 | FS_ERROR_INVALID_ARGUMENTS, "A Stream needs a conference object"); | |
679 | return; | |
680 | } | |
681 | ||
682 | tmp = g_strdup_printf ("recv_capsfilter_%d", self->priv->session->id); | |
683 | self->priv->capsfilter = gst_element_factory_make ("capsfilter", tmp); | |
684 | g_free (tmp); | |
685 | ||
686 | if (!self->priv->capsfilter) { | |
687 | self->priv->construction_error = g_error_new (FS_ERROR, | |
688 | FS_ERROR_CONSTRUCTION, "Could not create a capsfilter element for" | |
689 | " session %d", self->priv->session->id); | |
690 | return; | |
691 | } | |
692 | ||
693 | gst_object_ref_sink (self->priv->capsfilter); | |
694 | ||
695 | if (!gst_bin_add (GST_BIN (self->priv->conference), self->priv->capsfilter)) { | |
696 | self->priv->construction_error = g_error_new (FS_ERROR, | |
697 | FS_ERROR_CONSTRUCTION, "Could not add the capsfilter element for" | |
698 | " session %d", self->priv->session->id); | |
699 | gst_object_unref (self->priv->capsfilter); | |
700 | return; | |
701 | } | |
702 | ||
703 | if (gst_element_set_state (self->priv->capsfilter, GST_STATE_PLAYING) == | |
704 | GST_STATE_CHANGE_FAILURE) { | |
705 | self->priv->construction_error = g_error_new (FS_ERROR, | |
706 | FS_ERROR_CONSTRUCTION, "Could not set the capsfilter element for" | |
707 | " session %d", self->priv->session->id); | |
708 | return; | |
709 | } | |
710 | ||
711 | ||
712 | tmp = g_strdup_printf ("recv_valve_%d", self->priv->session->id); | |
713 | self->priv->recv_valve = gst_element_factory_make ("valve", tmp); | |
714 | g_free (tmp); | |
715 | ||
716 | if (!self->priv->recv_valve) { | |
717 | self->priv->construction_error = g_error_new (FS_ERROR, | |
718 | FS_ERROR_CONSTRUCTION, "Could not create a valve element for" | |
719 | " session %d", self->priv->session->id); | |
720 | return; | |
721 | } | |
722 | ||
723 | gst_object_ref_sink (self->priv->recv_valve); | |
724 | ||
725 | if (!gst_bin_add (GST_BIN (self->priv->conference), self->priv->recv_valve)) | |
726 | { | |
727 | self->priv->construction_error = g_error_new (FS_ERROR, | |
728 | FS_ERROR_CONSTRUCTION, "Could not add the valve element for session" | |
729 | " %d to the conference bin", self->priv->session->id); | |
730 | gst_object_unref (self->priv->recv_valve); | |
731 | return; | |
732 | } | |
733 | ||
734 | if (gst_element_set_state (self->priv->recv_valve, GST_STATE_PLAYING) == | |
735 | GST_STATE_CHANGE_FAILURE) { | |
736 | self->priv->construction_error = g_error_new (FS_ERROR, | |
737 | FS_ERROR_CONSTRUCTION, "Could not set the valve element for session" | |
738 | " %d to the playing state", self->priv->session->id); | |
739 | return; | |
740 | } | |
741 | ||
742 | if (!gst_element_link (self->priv->recv_valve, self->priv->capsfilter)) | |
743 | { | |
744 | self->priv->construction_error = g_error_new (FS_ERROR, | |
745 | FS_ERROR_CONSTRUCTION, "Could not link the recv valve" | |
746 | " and the capsfilter"); | |
747 | return; | |
748 | } | |
749 | ||
750 | valve_sink_pad = gst_element_get_static_pad (self->priv->recv_valve, "sink"); | |
751 | if (!valve_sink_pad) | |
752 | { | |
753 | self->priv->construction_error = g_error_new (FS_ERROR, | |
754 | FS_ERROR_CONSTRUCTION, | |
755 | "Could not get the valve's sink pad"); | |
756 | return; | |
757 | } | |
758 | ||
759 | linkret = gst_pad_link (self->priv->transmitter_pad, valve_sink_pad); | |
760 | ||
761 | gst_object_unref (valve_sink_pad); | |
762 | ||
763 | if (GST_PAD_LINK_FAILED (linkret)) | |
764 | { | |
765 | self->priv->construction_error = g_error_new (FS_ERROR, | |
766 | FS_ERROR_CONSTRUCTION, | |
767 | "Could not link the recv_valve to the codec bin (%d)", linkret); | |
768 | return; | |
769 | } | |
770 | ||
771 | self->priv->blocking_id = gst_pad_add_data_probe ( | |
772 | self->priv->transmitter_pad, | |
773 | G_CALLBACK (_transmitter_pad_have_data_callback), self); | |
774 | ||
775 | if (!self->priv->stream_transmitter) { | |
776 | self->priv->construction_error = g_error_new (FS_ERROR, | |
777 | FS_ERROR_CONSTRUCTION, "The Stream Transmitter has not been set"); | |
778 | return; | |
779 | } | |
780 | ||
781 | g_object_set (self->priv->stream_transmitter, "sending", | |
782 | (self->priv->direction & FS_DIRECTION_SEND) ? TRUE : FALSE, NULL); | |
783 | ||
784 | self->priv->local_candidates_prepared_handler_id = | |
785 | g_signal_connect_object (self->priv->stream_transmitter, | |
786 | "local-candidates-prepared", | |
787 | G_CALLBACK (_local_candidates_prepared), | |
788 | self, 0); | |
789 | self->priv->new_active_candidate_pair_handler_id = | |
790 | g_signal_connect_object (self->priv->stream_transmitter, | |
791 | "new-active-candidate-pair", | |
792 | G_CALLBACK (_new_active_candidate_pair), | |
793 | self, 0); | |
794 | self->priv->new_local_candidate_handler_id = | |
795 | g_signal_connect_object (self->priv->stream_transmitter, | |
796 | "new-local-candidate", | |
797 | G_CALLBACK (_new_local_candidate), | |
798 | self, 0); | |
799 | self->priv->error_handler_id = | |
800 | g_signal_connect_object (self->priv->stream_transmitter, | |
801 | "error", | |
802 | G_CALLBACK (_transmitter_error), | |
803 | self, 0); | |
804 | self->priv->state_changed_handler_id = | |
805 | g_signal_connect_object (self->priv->stream_transmitter, | |
806 | "state-changed", | |
807 | G_CALLBACK (_state_changed), | |
808 | self, 0); | |
809 | ||
810 | if (!fs_stream_transmitter_gather_local_candidates ( | |
811 | self->priv->stream_transmitter, | |
812 | &self->priv->construction_error)) | |
813 | { | |
814 | if (!self->priv->construction_error) | |
815 | self->priv->construction_error = g_error_new (FS_ERROR, | |
816 | FS_ERROR_INTERNAL, | |
817 | "Unknown error while gathering local candidates"); | |
818 | return; | |
819 | } | |
820 | ||
821 | if (self->priv->recv_valve) | |
822 | g_object_set (self->priv->recv_valve, "drop", | |
823 | (self->priv->direction & FS_DIRECTION_RECV) ? FALSE : TRUE, NULL); | |
824 | if (self->priv->session->valve) | |
825 | g_object_set (self->priv->session->valve, "drop", | |
826 | (self->priv->direction & FS_DIRECTION_SEND) ? FALSE : TRUE, NULL); | |
827 | ||
828 | if (G_OBJECT_CLASS (fs_raw_stream_parent_class)->constructed) | |
829 | G_OBJECT_CLASS (fs_raw_stream_parent_class)->constructed (object); | |
830 | } | |
831 | ||
832 | ||
833 | static void | |
834 | _local_candidates_prepared (FsStreamTransmitter *stream_transmitter, | |
835 | gpointer user_data) | |
836 | { | |
837 | FsRawStream *self = FS_RAW_STREAM (user_data); | |
838 | GstElement *conf = GST_ELEMENT (fs_raw_stream_get_conference (self, NULL)); | |
839 | ||
840 | if (!conf) | |
841 | return; | |
842 | ||
843 | gst_element_post_message (conf, | |
844 | gst_message_new_element (GST_OBJECT (conf), | |
845 | gst_structure_new ("farsight-local-candidates-prepared", | |
846 | "stream", FS_TYPE_STREAM, self, | |
847 | NULL))); | |
848 | ||
849 | gst_object_unref (conf); | |
850 | } | |
851 | ||
852 | ||
853 | static void | |
854 | _new_active_candidate_pair ( | |
855 | FsStreamTransmitter *stream_transmitter, | |
856 | FsCandidate *local_candidate, | |
857 | FsCandidate *remote_candidate, | |
858 | gpointer user_data) | |
859 | { | |
860 | FsRawStream *self = FS_RAW_STREAM (user_data); | |
861 | GstElement *conf = GST_ELEMENT (fs_raw_stream_get_conference (self, NULL)); | |
862 | ||
863 | if (!conf) | |
864 | return; | |
865 | ||
866 | gst_element_post_message (conf, | |
867 | gst_message_new_element (GST_OBJECT (conf), | |
868 | gst_structure_new ("farsight-new-active-candidate-pair", | |
869 | "stream", FS_TYPE_STREAM, self, | |
870 | "local-candidate", FS_TYPE_CANDIDATE, local_candidate, | |
871 | "remote-candidate", FS_TYPE_CANDIDATE, remote_candidate, | |
872 | NULL))); | |
873 | ||
874 | gst_object_unref (conf); | |
875 | } | |
876 | ||
877 | ||
878 | static void | |
879 | _new_local_candidate ( | |
880 | FsStreamTransmitter *stream_transmitter, | |
881 | FsCandidate *candidate, | |
882 | gpointer user_data) | |
883 | { | |
884 | FsRawStream *self = FS_RAW_STREAM (user_data); | |
885 | GstElement *conf = GST_ELEMENT (fs_raw_stream_get_conference (self, NULL)); | |
886 | ||
887 | if (!conf) | |
888 | return; | |
889 | ||
890 | gst_element_post_message (conf, | |
891 | gst_message_new_element (GST_OBJECT (conf), | |
892 | gst_structure_new ("farsight-new-local-candidate", | |
893 | "stream", FS_TYPE_STREAM, self, | |
894 | "candidate", FS_TYPE_CANDIDATE, candidate, | |
895 | NULL))); | |
896 | ||
897 | gst_object_unref (conf); | |
898 | } | |
899 | ||
900 | static void | |
901 | _transmitter_error ( | |
902 | FsStreamTransmitter *stream_transmitter, | |
903 | gint errorno, | |
904 | gchar *error_msg, | |
905 | gchar *debug_msg, | |
906 | gpointer user_data) | |
907 | { | |
908 | FsStream *stream = FS_STREAM (user_data); | |
909 | ||
910 | fs_stream_emit_error (stream, errorno, error_msg, debug_msg); | |
911 | } | |
912 | ||
913 | static void | |
914 | _state_changed (FsStreamTransmitter *stream_transmitter, | |
915 | guint component, | |
916 | FsStreamState state, | |
917 | gpointer user_data) | |
918 | { | |
919 | FsRawStream *self = FS_RAW_STREAM (user_data); | |
920 | GstElement *conf = GST_ELEMENT (fs_raw_stream_get_conference (self, NULL)); | |
921 | ||
922 | if (!conf) | |
923 | return; | |
924 | ||
925 | gst_element_post_message (conf, | |
926 | gst_message_new_element (GST_OBJECT (conf), | |
927 | gst_structure_new ("farsight-component-state-changed", | |
928 | "stream", FS_TYPE_STREAM, self, | |
929 | "component", G_TYPE_UINT, component, | |
930 | "state", FS_TYPE_STREAM_STATE, state, | |
931 | NULL))); | |
932 | ||
933 | gst_object_unref (conf); | |
934 | ||
935 | if (component == 1 && state == FS_STREAM_STATE_FAILED) | |
936 | fs_stream_emit_error (FS_STREAM (self), FS_ERROR_CONNECTION_FAILED, | |
937 | "Could not establish connection", "Could not establish connection"); | |
938 | } | |
939 | ||
940 | /** | |
941 | * fs_raw_stream_set_remote_candidate: | |
942 | */ | |
943 | static gboolean | |
944 | fs_raw_stream_set_remote_candidates (FsStream *stream, GList *candidates, | |
945 | GError **error) | |
946 | { | |
947 | FsRawStream *self = FS_RAW_STREAM (stream); | |
948 | FsRawConference *conference = fs_raw_stream_get_conference (self, error); | |
949 | FsStreamTransmitter *st = NULL; | |
950 | gboolean ret = FALSE; | |
951 | ||
952 | if (!conference) | |
953 | return FALSE; | |
954 | ||
955 | GST_OBJECT_LOCK (conference); | |
956 | if (self->priv->stream_transmitter) | |
957 | st = g_object_ref (self->priv->stream_transmitter); | |
958 | GST_OBJECT_UNLOCK (conference); | |
959 | ||
960 | if (st) | |
961 | { | |
962 | ret = fs_stream_transmitter_set_remote_candidates (st, candidates, error); | |
963 | g_object_unref (st); | |
964 | } | |
965 | ||
966 | gst_object_unref (conference); | |
967 | ||
968 | return ret; | |
969 | } | |
970 | ||
971 | ||
972 | /** | |
973 | * fs_raw_stream_set_remote_codecs: | |
974 | * @stream: an #FsStream | |
975 | * @remote_codecs: a #GList of #FsCodec representing the remote codecs | |
976 | * @error: location of a #GError, or NULL if no error occured | |
977 | * | |
978 | * This function will set the list of remote codecs for this stream. This list | |
979 | * should contain one or two codecs. The first codec in this list represents | |
980 | * the codec the remote side will be sending. The second codec, if given, | |
981 | * represents what should be sent to the remote side. If only one codec is | |
982 | * passed, and the codec to send to the remote side hasn't yet been chosen, | |
983 | * it will use the first and only codec in the list. If the list isn't in this | |
984 | * format, @error will be set and %FALSE will be returned. The @remote_codecs | |
985 | * list will be copied so it must be free'd using fs_codec_list_destroy() | |
986 | * when done. | |
987 | * | |
988 | * Returns: %FALSE if the remote codecs couldn't be set. | |
989 | */ | |
990 | static gboolean | |
991 | fs_raw_stream_set_remote_codecs (FsStream *stream, | |
992 | GList *remote_codecs, | |
993 | GError **error) | |
994 | { | |
995 | FsRawStream *self = FS_RAW_STREAM (stream); | |
996 | GList *item = NULL; | |
997 | FsRawSession *session; | |
998 | FsRawConference *conf = fs_raw_stream_get_conference (self, error); | |
999 | gboolean is_new = TRUE; | |
1000 | ||
1001 | if (!conf) | |
1002 | return FALSE; | |
1003 | ||
1004 | GST_OBJECT_LOCK (conf); | |
1005 | session = self->priv->session; | |
1006 | if (session) | |
1007 | g_object_ref (session); | |
1008 | GST_OBJECT_UNLOCK (conf); | |
1009 | ||
1010 | if (!session) | |
1011 | { | |
1012 | g_set_error (error, FS_ERROR, FS_ERROR_DISPOSED, | |
1013 | "Called function after stream has been disposed"); | |
1014 | return FALSE; | |
1015 | } | |
1016 | ||
1017 | if (remote_codecs == NULL) { | |
1018 | g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS, | |
1019 | "You can not set NULL remote codecs"); | |
1020 | goto error; | |
1021 | } | |
1022 | ||
1023 | if (g_list_length (remote_codecs) > 2) { | |
1024 | g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS, | |
1025 | "Too many codecs passed"); | |
1026 | goto error; | |
1027 | } | |
1028 | ||
1029 | for (item = g_list_first (remote_codecs); item; item = g_list_next (item)) | |
1030 | { | |
1031 | FsCodec *codec = item->data; | |
1032 | GstCaps *caps; | |
1033 | ||
1034 | if (!codec->encoding_name) | |
1035 | { | |
1036 | g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS, | |
1037 | "The codec must have an encoding name"); | |
1038 | goto error; | |
1039 | } | |
1040 | ||
1041 | caps = fs_raw_codec_to_gst_caps (codec); | |
1042 | if (!caps) | |
1043 | { | |
1044 | g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS, | |
1045 | "The encoding name for codec %s is not valid GstCaps", | |
1046 | codec->encoding_name); | |
1047 | goto error; | |
1048 | } | |
1049 | gst_caps_unref (caps); | |
1050 | } | |
1051 | ||
1052 | GST_OBJECT_LOCK (conf); | |
1053 | if (self->priv->remote_codecs) | |
1054 | { | |
1055 | is_new = !fs_codec_list_are_equal (self->priv->remote_codecs, | |
1056 | remote_codecs); | |
1057 | fs_codec_list_destroy (self->priv->remote_codecs); | |
1058 | } | |
1059 | self->priv->remote_codecs = fs_codec_list_copy (remote_codecs); | |
1060 | GST_OBJECT_UNLOCK (conf); | |
1061 | ||
1062 | if (is_new) | |
1063 | { | |
1064 | FsCodec *codec = remote_codecs->data; | |
1065 | GstCaps *caps; | |
1066 | ||
1067 | caps = fs_raw_codec_to_gst_caps (codec); | |
1068 | g_object_set (self->priv->capsfilter, "caps", caps, NULL); | |
1069 | gst_caps_unref (caps); | |
1070 | ||
1071 | g_object_notify (G_OBJECT (stream), "remote-codecs"); | |
1072 | } | |
1073 | ||
1074 | g_object_unref (session); | |
1075 | g_object_unref (conf); | |
1076 | return TRUE; | |
1077 | ||
1078 | error: | |
1079 | ||
1080 | g_object_unref (session); | |
1081 | g_object_unref (conf); | |
1082 | return FALSE; | |
1083 | } | |
1084 | ||
1085 | ||
1086 | /** | |
1087 | * fs_raw_stream_new: | |
1088 | * @session: The #FsRawSession this stream is a child of | |
1089 | * @participant: The #FsRawParticipant this stream is for | |
1090 | * @direction: the initial #FsDirection for this stream | |
1091 | * | |
1092 | * | |
1093 | * This function create a new stream | |
1094 | * | |
1095 | * Returns: the newly created string or NULL on error | |
1096 | */ | |
1097 | ||
1098 | FsRawStream * | |
1099 | fs_raw_stream_new (FsRawSession *session, | |
1100 | FsRawParticipant *participant, | |
1101 | FsStreamDirection direction, | |
1102 | FsRawConference *conference, | |
1103 | FsStreamTransmitter *stream_transmitter, | |
1104 | GstPad *transmitter_pad, | |
1105 | GError **error) | |
1106 | { | |
1107 | FsRawStream *self; | |
1108 | ||
1109 | g_return_val_if_fail (session, NULL); | |
1110 | g_return_val_if_fail (participant, NULL); | |
1111 | g_return_val_if_fail (stream_transmitter, NULL); | |
1112 | ||
1113 | self = g_object_new (FS_TYPE_RAW_STREAM, | |
1114 | "session", session, | |
1115 | "participant", participant, | |
1116 | "direction", direction, | |
1117 | "conference", conference, | |
1118 | "stream-transmitter", stream_transmitter, | |
1119 | "transmitter-pad", transmitter_pad, | |
1120 | NULL); | |
1121 | ||
1122 | if (!self) | |
1123 | { | |
1124 | *error = g_error_new (FS_ERROR, FS_ERROR_CONSTRUCTION, | |
1125 | "Could not create object"); | |
1126 | return NULL; | |
1127 | } | |
1128 | else if (self->priv->construction_error) | |
1129 | { | |
1130 | g_propagate_error (error, self->priv->construction_error); | |
1131 | g_object_unref (self); | |
1132 | return NULL; | |
1133 | } | |
1134 | ||
1135 | return self; | |
1136 | } | |
1137 |
0 | /* | |
1 | * Farsight2 - Farsight Raw Stream | |
2 | * | |
3 | * Copyright 2008 Richard Spiers <richard.spiers@gmail.com> | |
4 | * Copyright 2007 Nokia Corp. | |
5 | * Copyright 2007,2010 Collabora Ltd. | |
6 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
7 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
8 | * | |
9 | * fs-raw-stream.h - A Farsight Raw Stream | |
10 | * | |
11 | * This library is free software; you can redistribute it and/or | |
12 | * modify it under the terms of the GNU Lesser General Public | |
13 | * License as published by the Free Software Foundation; either | |
14 | * version 2.1 of the License, or (at your option) any later version. | |
15 | * | |
16 | * This library is distributed in the hope that it will be useful, | |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 | * Lesser General Public License for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU Lesser General Public | |
22 | * License along with this library; if not, write to the Free Software | |
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
24 | */ | |
25 | ||
26 | #ifndef __FS_RAW_STREAM_H__ | |
27 | #define __FS_RAW_STREAM_H__ | |
28 | ||
29 | #include <gst/farsight/fs-stream.h> | |
30 | #include <gst/farsight/fs-stream-transmitter.h> | |
31 | ||
32 | #include "fs-raw-participant.h" | |
33 | #include "fs-raw-session.h" | |
34 | ||
35 | G_BEGIN_DECLS | |
36 | ||
37 | /* TYPE MACROS */ | |
38 | #define FS_TYPE_RAW_STREAM \ | |
39 | (fs_raw_stream_get_type ()) | |
40 | #define FS_RAW_STREAM(obj) \ | |
41 | (G_TYPE_CHECK_INSTANCE_CAST((obj), FS_TYPE_RAW_STREAM, FsRawStream)) | |
42 | #define FS_RAW_STREAM_CLASS(klass) \ | |
43 | (G_TYPE_CHECK_CLASS_CAST((klass), FS_TYPE_RAW_STREAM, FsRawStreamClass)) | |
44 | #define FS_IS_RAW_STREAM(obj) \ | |
45 | (G_TYPE_CHECK_INSTANCE_TYPE((obj), FS_TYPE_RAW_STREAM)) | |
46 | #define FS_IS_RAW_STREAM_CLASS(klass) \ | |
47 | (G_TYPE_CHECK_CLASS_TYPE((klass), FS_TYPE_RAW_STREAM)) | |
48 | #define FS_RAW_STREAM_GET_CLASS(obj) \ | |
49 | (G_TYPE_INSTANCE_GET_CLASS ((obj), FS_TYPE_RAW_STREAM, FsRawStreamClass)) | |
50 | #define FS_RAW_STREAM_CAST(obj) ((FsRawStream*) (obj)) | |
51 | ||
52 | typedef struct _FsRawStream FsRawStream; | |
53 | typedef struct _FsRawStreamClass FsRawStreamClass; | |
54 | typedef struct _FsRawStreamPrivate FsRawStreamPrivate; | |
55 | ||
56 | ||
57 | struct _FsRawStreamClass | |
58 | { | |
59 | FsStreamClass parent_class; | |
60 | ||
61 | }; | |
62 | ||
63 | /** | |
64 | * FsRawStream: | |
65 | * | |
66 | */ | |
67 | struct _FsRawStream | |
68 | { | |
69 | FsStream parent; | |
70 | ||
71 | /*< private >*/ | |
72 | FsRawStreamPrivate *priv; | |
73 | }; | |
74 | ||
75 | GType fs_raw_stream_get_type (void); | |
76 | ||
77 | FsRawStream *fs_raw_stream_new (FsRawSession *session, | |
78 | FsRawParticipant *participant, | |
79 | FsStreamDirection direction, | |
80 | FsRawConference *conference, | |
81 | FsStreamTransmitter *stream_transmitter, | |
82 | GstPad *transmitter_pad, | |
83 | GError **error); | |
84 | ||
85 | ||
86 | G_END_DECLS | |
87 | ||
88 | #endif /* __FS_RAW_STREAM_H__ */ |
59 | 59 | |
60 | 60 | libfsrtpconference_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) |
61 | 61 | |
62 | preferencesdir = $(datadir)/$(PACKAGE_TARNAME)/$(FS2_MAJORMINOR)/fsrtpconference | |
63 | preferences_DATA = \ | |
64 | default-codec-preferences \ | |
65 | default-element-properties | |
66 | ||
67 | EXTRA_DIST = $(preferences_DATA) | |
68 | ||
62 | 69 | # Optionally build a library to allow building the gtk-doc |
63 | 70 | |
64 | 71 | if ENABLE_GTK_DOC |
21 | 21 | #glib_enum_define=GST_COLOR_BALANCE |
22 | 22 | #glib_gen_prefix=gst_color_balance |
23 | 23 | #glib_gen_basename=colorbalance |
24 | ||
24 | 25 | |
25 | 26 | |
26 | 27 | VPATH = @srcdir@ |
97 | 98 | am__base_list = \ |
98 | 99 | sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ |
99 | 100 | sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' |
100 | am__installdirs = "$(DESTDIR)$(plugindir)" | |
101 | am__installdirs = "$(DESTDIR)$(plugindir)" \ | |
102 | "$(DESTDIR)$(preferencesdir)" | |
101 | 103 | LTLIBRARIES = $(noinst_LTLIBRARIES) $(plugin_LTLIBRARIES) |
102 | 104 | libfsrtpconference_convenience_la_LIBADD = |
103 | 105 | am_libfsrtpconference_convenience_la_OBJECTS = fs-rtp-conference.lo \ |
168 | 170 | $(nodist_libfsrtpconference_doc_la_SOURCES) |
169 | 171 | DIST_SOURCES = $(libfsrtpconference_convenience_la_SOURCES) \ |
170 | 172 | $(libfsrtpconference_la_SOURCES) |
173 | DATA = $(preferences_DATA) | |
171 | 174 | HEADERS = $(noinst_HEADERS) |
172 | 175 | ETAGS = etags |
173 | 176 | CTAGS = ctags |
428 | 431 | -lgstrtp-@GST_MAJORMINOR@ |
429 | 432 | |
430 | 433 | libfsrtpconference_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) |
434 | preferencesdir = $(datadir)/$(PACKAGE_TARNAME)/$(FS2_MAJORMINOR)/fsrtpconference | |
435 | preferences_DATA = \ | |
436 | default-codec-preferences \ | |
437 | default-element-properties | |
438 | ||
439 | EXTRA_DIST = $(preferences_DATA) | |
431 | 440 | @ENABLE_GTK_DOC_TRUE@nodist_libfsrtpconference_doc_la_SOURCES = \ |
432 | 441 | @ENABLE_GTK_DOC_TRUE@ fs-rtp-conference-plugin.doc.c \ |
433 | 442 | @ENABLE_GTK_DOC_TRUE@ $(nodist_libfsrtpconference_la_SOURCES) |
570 | 579 | |
571 | 580 | clean-libtool: |
572 | 581 | -rm -rf .libs _libs |
582 | install-preferencesDATA: $(preferences_DATA) | |
583 | @$(NORMAL_INSTALL) | |
584 | test -z "$(preferencesdir)" || $(MKDIR_P) "$(DESTDIR)$(preferencesdir)" | |
585 | @list='$(preferences_DATA)'; test -n "$(preferencesdir)" || list=; \ | |
586 | for p in $$list; do \ | |
587 | if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ | |
588 | echo "$$d$$p"; \ | |
589 | done | $(am__base_list) | \ | |
590 | while read files; do \ | |
591 | echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(preferencesdir)'"; \ | |
592 | $(INSTALL_DATA) $$files "$(DESTDIR)$(preferencesdir)" || exit $$?; \ | |
593 | done | |
594 | ||
595 | uninstall-preferencesDATA: | |
596 | @$(NORMAL_UNINSTALL) | |
597 | @list='$(preferences_DATA)'; test -n "$(preferencesdir)" || list=; \ | |
598 | files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ | |
599 | test -n "$$files" || exit 0; \ | |
600 | echo " ( cd '$(DESTDIR)$(preferencesdir)' && rm -f" $$files ")"; \ | |
601 | cd "$(DESTDIR)$(preferencesdir)" && rm -f $$files | |
573 | 602 | |
574 | 603 | ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) |
575 | 604 | list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ |
656 | 685 | check-am: all-am |
657 | 686 | check: $(BUILT_SOURCES) |
658 | 687 | $(MAKE) $(AM_MAKEFLAGS) check-am |
659 | all-am: Makefile $(LTLIBRARIES) $(HEADERS) | |
688 | all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) | |
660 | 689 | installdirs: |
661 | for dir in "$(DESTDIR)$(plugindir)"; do \ | |
690 | for dir in "$(DESTDIR)$(plugindir)" "$(DESTDIR)$(preferencesdir)"; do \ | |
662 | 691 | test -z "$$dir" || $(MKDIR_P) "$$dir"; \ |
663 | 692 | done |
664 | 693 | install: $(BUILT_SOURCES) |
712 | 741 | |
713 | 742 | info-am: |
714 | 743 | |
715 | install-data-am: install-pluginLTLIBRARIES | |
744 | install-data-am: install-pluginLTLIBRARIES install-preferencesDATA | |
716 | 745 | |
717 | 746 | install-dvi: install-dvi-am |
718 | 747 | |
758 | 787 | |
759 | 788 | ps-am: |
760 | 789 | |
761 | uninstall-am: uninstall-pluginLTLIBRARIES | |
790 | uninstall-am: uninstall-pluginLTLIBRARIES uninstall-preferencesDATA | |
762 | 791 | |
763 | 792 | .MAKE: all check install install-am install-strip |
764 | 793 | |
770 | 799 | install-data-am install-dvi install-dvi-am install-exec \ |
771 | 800 | install-exec-am install-html install-html-am install-info \ |
772 | 801 | install-info-am install-man install-pdf install-pdf-am \ |
773 | install-pluginLTLIBRARIES install-ps install-ps-am \ | |
774 | install-strip installcheck installcheck-am installdirs \ | |
775 | maintainer-clean maintainer-clean-generic mostlyclean \ | |
776 | mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ | |
777 | pdf pdf-am ps ps-am tags uninstall uninstall-am \ | |
778 | uninstall-pluginLTLIBRARIES | |
802 | install-pluginLTLIBRARIES install-preferencesDATA install-ps \ | |
803 | install-ps-am install-strip installcheck installcheck-am \ | |
804 | installdirs maintainer-clean maintainer-clean-generic \ | |
805 | mostlyclean mostlyclean-compile mostlyclean-generic \ | |
806 | mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ | |
807 | uninstall-am uninstall-pluginLTLIBRARIES \ | |
808 | uninstall-preferencesDATA | |
779 | 809 | |
780 | 810 | |
781 | 811 | @ENABLE_GTK_DOC_TRUE@%.doc.c: %.c |
0 | ################ | |
1 | # Audio codecs # | |
2 | ################ | |
3 | ||
4 | [audio/SPEEX:8000] | |
5 | clock-rate=8000 | |
6 | ||
7 | [audio/SPEEX:16000] | |
8 | clock-rate=16000 | |
9 | ||
10 | [audio/AMR] | |
11 | ||
12 | [audio/G729] | |
13 | ||
14 | [audio/ILBC] | |
15 | ||
16 | ||
17 | # Disabled audio codecs | |
18 | # These are unsuitable for calling | |
19 | ||
20 | [audio/DV] | |
21 | id=-1 | |
22 | ||
23 | [audio/MPA] | |
24 | id=-1 | |
25 | ||
26 | [audio/VORBIS] | |
27 | id=-1 | |
28 | ||
29 | [audio/MP3] | |
30 | id=-1 | |
31 | ||
32 | ################ | |
33 | # Video codecs # | |
34 | ################ | |
35 | ||
36 | [video/H264] | |
37 | ||
38 | [video/H263] | |
39 | ||
40 | [video/THEORA] | |
41 | ||
42 | [video/JPEG] | |
43 | ||
44 | # Disable the ones we don't want | |
45 | ||
46 | [video/DV] | |
47 | id=-1 | |
48 | ||
49 | [video/MPV] | |
50 | id=-1 | |
51 | ||
52 | # Payloader is broken, see gnome bug #577784 | |
53 | [video/H263-2000] | |
54 | id=-1 | |
55 |
0 | # Put the desired properties in the style of | |
1 | # | |
2 | # [element name] | |
3 | # prop1=val1 | |
4 | ||
5 | # | |
6 | # Video codecs default to 256 kbps | |
7 | # | |
8 | ||
9 | # 100ms for the jitterbuffer is a good tradeoff | |
10 | [gstrtpbin] | |
11 | latency=100 | |
12 | ||
13 | [x264enc] | |
14 | byte-stream=1 | |
15 | bitrate=256 | |
16 | profile=baseline | |
17 | # Zerolatency is needed because the default latency is pretty high | |
18 | tune=zerolatency | |
19 | # 3 is "veryfast", presets go from 1 (ultrafast) to 10 (veryslow) | |
20 | speed-preset=3 | |
21 | # These are all included in profile=baseline but stay here for older versions | |
22 | bframes=0 | |
23 | b-adapt=0 | |
24 | cabac=0 | |
25 | dct8x8=0 | |
26 | # With zerolatency, threads are per slice, but slices confuse some decoders | |
27 | threads=1 | |
28 | # Access-Unit Delimiters are a waste of bandwidth | |
29 | aud=0 | |
30 | ||
31 | # Try to make GOBs as small as possible | |
32 | [ffenc_h263] | |
33 | rtp-payload-size=1 | |
34 | ||
35 | [theoraenc] | |
36 | bitrate=256 | |
37 | ||
38 | [vp8enc] | |
39 | bitrate=256000 | |
40 | max-latency=1 | |
41 | speed=2 | |
42 | error-resilient=true | |
43 | ||
44 | [rtppcmupay] | |
45 | ptime-multiple=20000000 | |
46 | ||
47 | [rtppcmapay] | |
48 | ptime-multiple=20000000 |
11 | 11 | fs-stream-transmitter.h \ |
12 | 12 | fs-plugin.h \ |
13 | 13 | fs-element-added-notifier.h \ |
14 | fs-interfaces.h | |
14 | fs-interfaces.h \ | |
15 | fs-utils.h | |
15 | 16 | |
16 | 17 | nodist_libgstfarsightinclude_HEADERS = \ |
17 | 18 | fs-enum-types.h |
41 | 42 | fs-plugin.c \ |
42 | 43 | fs-element-added-notifier.c \ |
43 | 44 | fs-interfaces.c \ |
45 | fs-utils.c \ | |
44 | 46 | fs-private.h |
45 | 47 | |
46 | 48 | nodist_libgstfarsight_@GST_MAJORMINOR@_la_SOURCES = \ |
80 | 82 | fs-participant.h \ |
81 | 83 | fs-session.h \ |
82 | 84 | fs-stream.h \ |
83 | fs-conference-iface.h | |
85 | fs-conference-iface.h \ | |
86 | fs-utils.h | |
84 | 87 | |
85 | 88 | glib_enum_headers=$(public_headers) |
86 | 89 | glib_enum_define=FS |
113 | 113 | libgstfarsight_@GST_MAJORMINOR@_la-fs-stream-transmitter.lo \ |
114 | 114 | libgstfarsight_@GST_MAJORMINOR@_la-fs-plugin.lo \ |
115 | 115 | libgstfarsight_@GST_MAJORMINOR@_la-fs-element-added-notifier.lo \ |
116 | libgstfarsight_@GST_MAJORMINOR@_la-fs-interfaces.lo | |
116 | libgstfarsight_@GST_MAJORMINOR@_la-fs-interfaces.lo \ | |
117 | libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.lo | |
117 | 118 | nodist_libgstfarsight_@GST_MAJORMINOR@_la_OBJECTS = \ |
118 | 119 | libgstfarsight_@GST_MAJORMINOR@_la-fs-marshal.lo \ |
119 | 120 | libgstfarsight_@GST_MAJORMINOR@_la-fs-enumtypes.lo |
373 | 374 | fs-stream-transmitter.h \ |
374 | 375 | fs-plugin.h \ |
375 | 376 | fs-element-added-notifier.h \ |
376 | fs-interfaces.h | |
377 | fs-interfaces.h \ | |
378 | fs-utils.h | |
377 | 379 | |
378 | 380 | nodist_libgstfarsightinclude_HEADERS = \ |
379 | 381 | fs-enum-types.h |
397 | 399 | fs-plugin.c \ |
398 | 400 | fs-element-added-notifier.c \ |
399 | 401 | fs-interfaces.c \ |
402 | fs-utils.c \ | |
400 | 403 | fs-private.h |
401 | 404 | |
402 | 405 | nodist_libgstfarsight_@GST_MAJORMINOR@_la_SOURCES = \ |
424 | 427 | fs-participant.h \ |
425 | 428 | fs-session.h \ |
426 | 429 | fs-stream.h \ |
427 | fs-conference-iface.h | |
430 | fs-conference-iface.h \ | |
431 | fs-utils.h | |
428 | 432 | |
429 | 433 | glib_enum_headers = $(public_headers) |
430 | 434 | glib_enum_define = FS |
520 | 524 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-stream-transmitter.Plo@am__quote@ |
521 | 525 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-stream.Plo@am__quote@ |
522 | 526 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-transmitter.Plo@am__quote@ |
527 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.Plo@am__quote@ | |
523 | 528 | |
524 | 529 | .c.o: |
525 | 530 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< |
640 | 645 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fs-interfaces.c' object='libgstfarsight_@GST_MAJORMINOR@_la-fs-interfaces.lo' libtool=yes @AMDEPBACKSLASH@ |
641 | 646 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
642 | 647 | @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfarsight_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfarsight_@GST_MAJORMINOR@_la-fs-interfaces.lo `test -f 'fs-interfaces.c' || echo '$(srcdir)/'`fs-interfaces.c |
648 | ||
649 | libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.lo: fs-utils.c | |
650 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfarsight_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.lo -MD -MP -MF $(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.Tpo -c -o libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.lo `test -f 'fs-utils.c' || echo '$(srcdir)/'`fs-utils.c | |
651 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.Tpo $(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.Plo | |
652 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
653 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fs-utils.c' object='libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.lo' libtool=yes @AMDEPBACKSLASH@ | |
654 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
655 | @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfarsight_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfarsight_@GST_MAJORMINOR@_la-fs-utils.lo `test -f 'fs-utils.c' || echo '$(srcdir)/'`fs-utils.c | |
643 | 656 | |
644 | 657 | libgstfarsight_@GST_MAJORMINOR@_la-fs-marshal.lo: fs-marshal.c |
645 | 658 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfarsight_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfarsight_@GST_MAJORMINOR@_la-fs-marshal.lo -MD -MP -MF $(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-marshal.Tpo -c -o libgstfarsight_@GST_MAJORMINOR@_la-fs-marshal.lo `test -f 'fs-marshal.c' || echo '$(srcdir)/'`fs-marshal.c |
0 | /* | |
1 | * Farsight2 - Miscellaneous useful functions | |
2 | * | |
3 | * Copyright 2011 Collabora Ltd. | |
4 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
5 | * Copyright 2011 Nokia Corp. | |
6 | * | |
7 | * This library is free software; you can redistribute it and/or | |
8 | * modify it under the terms of the GNU Lesser General Public | |
9 | * License as published by the Free Software Foundation; either | |
10 | * version 2.1 of the License, or (at your option) any later version. | |
11 | * | |
12 | * This library is distributed in the hope that it will be useful, | |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * Lesser General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU Lesser General Public | |
18 | * License along with this library; if not, write to the Free Software | |
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | */ | |
21 | ||
22 | #ifdef HAVE_CONFIG_H | |
23 | # include <config.h> | |
24 | #endif | |
25 | ||
26 | #include "fs-utils.h" | |
27 | ||
28 | #include <string.h> | |
29 | ||
30 | /** | |
31 | * SECTION:fs-utils | |
32 | * @short_description: Miscellaneous useful functions | |
33 | */ | |
34 | ||
35 | static GList * | |
36 | load_default_codec_preferences_from_path (const gchar *element_name, | |
37 | const gchar *path) | |
38 | { | |
39 | GList *codec_prefs = NULL; | |
40 | gchar *filename; | |
41 | ||
42 | filename = g_build_filename (path, PACKAGE, FS2_MAJORMINOR, element_name, | |
43 | "default-codec-preferences", NULL); | |
44 | codec_prefs = fs_codec_list_from_keyfile (filename, NULL); | |
45 | g_free (filename); | |
46 | ||
47 | return codec_prefs; | |
48 | } | |
49 | ||
50 | static const gchar * | |
51 | factory_name_from_element (GstElement *element) | |
52 | { | |
53 | GstElementFactory *factory = gst_element_get_factory (element); | |
54 | ||
55 | if (factory) | |
56 | return gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)); | |
57 | else | |
58 | return NULL; | |
59 | } | |
60 | ||
61 | /** | |
62 | * fs_utils_get_default_codec_preferences: | |
63 | * @element: Element for which to fetch default codec preferences | |
64 | * | |
65 | * These default codec preferences should work with the elements that are | |
66 | * available in the main GStreamer element repositories. | |
67 | * They should be suitable for standards based protocols like SIP or XMPP. | |
68 | * | |
69 | * Returns: The default codec preferences for this plugin, | |
70 | * this #GList should be freed with fs_codec_list_destroy() | |
71 | */ | |
72 | GList * | |
73 | fs_utils_get_default_codec_preferences (GstElement *element) | |
74 | { | |
75 | const gchar * const * system_data_dirs = g_get_system_data_dirs (); | |
76 | GList *codec_prefs = NULL; | |
77 | guint i; | |
78 | const gchar *factory_name = factory_name_from_element (element); | |
79 | ||
80 | if (!factory_name) | |
81 | return NULL; | |
82 | ||
83 | codec_prefs = load_default_codec_preferences_from_path (factory_name, | |
84 | g_get_user_data_dir ()); | |
85 | if (codec_prefs) | |
86 | return codec_prefs; | |
87 | ||
88 | for (i = 0; system_data_dirs[i]; i++) | |
89 | { | |
90 | codec_prefs = load_default_codec_preferences_from_path (factory_name, | |
91 | system_data_dirs[i]); | |
92 | if (codec_prefs) | |
93 | return codec_prefs; | |
94 | } | |
95 | ||
96 | return NULL; | |
97 | } | |
98 | ||
99 | /** | |
100 | * fs_utils_get_default_element_properties: | |
101 | * @element: Element for which to fetch default element properties | |
102 | * | |
103 | * This function produces a #GKeyFile that can be fed to | |
104 | * fs_element_added_notifier_set_properties_from_keyfile(). If no | |
105 | * default properties have been found, it will return %NULL. | |
106 | * | |
107 | * Returns: a #GKeyFile containing the default element properties for this | |
108 | * element or %NULL if no properties were found. Caller must free | |
109 | * the #GKeyFile when he is done. | |
110 | */ | |
111 | ||
112 | GKeyFile * | |
113 | fs_utils_get_default_element_properties (GstElement *element) | |
114 | { | |
115 | gboolean file_loaded; | |
116 | GKeyFile *keyfile = g_key_file_new (); | |
117 | gchar *filename; | |
118 | const gchar *factory_name = factory_name_from_element (element); | |
119 | ||
120 | filename = g_build_filename (PACKAGE, FS2_MAJORMINOR, factory_name, | |
121 | "default-element-properties", NULL); | |
122 | file_loaded = g_key_file_load_from_data_dirs (keyfile, filename, NULL, | |
123 | G_KEY_FILE_NONE, NULL); | |
124 | g_free (filename); | |
125 | ||
126 | if (file_loaded) | |
127 | { | |
128 | return keyfile; | |
129 | } | |
130 | else | |
131 | { | |
132 | g_key_file_free (keyfile); | |
133 | return NULL; | |
134 | } | |
135 | } |
0 | /* | |
1 | * Farsight2 - Miscellaneous useful functions | |
2 | * | |
3 | * Copyright 2011 Collabora Ltd. | |
4 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
5 | * Copyright 2011 Nokia Corp. | |
6 | * | |
7 | * This library is free software; you can redistribute it and/or | |
8 | * modify it under the terms of the GNU Lesser General Public | |
9 | * License as published by the Free Software Foundation; either | |
10 | * version 2.1 of the License, or (at your option) any later version. | |
11 | * | |
12 | * This library is distributed in the hope that it will be useful, | |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * Lesser General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU Lesser General Public | |
18 | * License along with this library; if not, write to the Free Software | |
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | */ | |
21 | ||
22 | ||
23 | ||
24 | #ifndef __FS_UTILS_H__ | |
25 | #define __FS_UTILS_H__ | |
26 | ||
27 | #include <gst/gst.h> | |
28 | #include <gst/farsight/fs-codec.h> | |
29 | ||
30 | G_BEGIN_DECLS | |
31 | ||
32 | GList *fs_utils_get_default_codec_preferences (GstElement *element); | |
33 | ||
34 | GKeyFile *fs_utils_get_default_element_properties (GstElement *element); | |
35 | ||
36 | G_END_DECLS | |
37 | ||
38 | #endif /* __FS_UTILS_H__ */ |
48 | 48 | transmitter/multicast \ |
49 | 49 | transmitter/nice \ |
50 | 50 | transmitter/shm \ |
51 | raw/conference \ | |
51 | 52 | rtp/codecs \ |
52 | 53 | rtp/sendcodecs \ |
53 | 54 | rtp/conference \ |
121 | 122 | transmitter/generic.h \ |
122 | 123 | transmitter/shm.c |
123 | 124 | |
125 | raw_conference_CFLAGS = $(AM_CFLAGS) | |
126 | raw_conference_SOURCES = \ | |
127 | check-threadsafe.h \ | |
128 | testutils.c \ | |
129 | testutils.h \ | |
130 | raw/conference.c | |
131 | ||
124 | 132 | rtp_conference_CFLAGS = $(AM_CFLAGS) |
125 | 133 | rtp_conference_SOURCES = \ |
126 | 134 | check-threadsafe.h \ |
37 | 37 | check_PROGRAMS = base/fscodec$(EXEEXT) base/fstransmitter$(EXEEXT) \ |
38 | 38 | transmitter/rawudp$(EXEEXT) transmitter/multicast$(EXEEXT) \ |
39 | 39 | transmitter/nice$(EXEEXT) transmitter/shm$(EXEEXT) \ |
40 | rtp/codecs$(EXEEXT) rtp/sendcodecs$(EXEEXT) \ | |
41 | rtp/conference$(EXEEXT) rtp/recvcodecs$(EXEEXT) \ | |
42 | msn/conference$(EXEEXT) utils/binadded$(EXEEXT) \ | |
43 | elements/rtcpfilter$(EXEEXT) elements/funnel$(EXEEXT) | |
40 | raw/conference$(EXEEXT) rtp/codecs$(EXEEXT) \ | |
41 | rtp/sendcodecs$(EXEEXT) rtp/conference$(EXEEXT) \ | |
42 | rtp/recvcodecs$(EXEEXT) msn/conference$(EXEEXT) \ | |
43 | utils/binadded$(EXEEXT) elements/rtcpfilter$(EXEEXT) \ | |
44 | elements/funnel$(EXEEXT) | |
44 | 45 | subdir = tests/check |
45 | 46 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
46 | 47 | am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ |
116 | 117 | msn_conference_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ |
117 | 118 | $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ |
118 | 119 | $(msn_conference_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ |
120 | $@ | |
121 | am_raw_conference_OBJECTS = raw_conference-testutils.$(OBJEXT) \ | |
122 | raw_conference-conference.$(OBJEXT) | |
123 | raw_conference_OBJECTS = $(am_raw_conference_OBJECTS) | |
124 | raw_conference_LDADD = $(LDADD) | |
125 | raw_conference_DEPENDENCIES = \ | |
126 | $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \ | |
127 | $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) | |
128 | raw_conference_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ | |
129 | $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ | |
130 | $(raw_conference_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ | |
119 | 131 | $@ |
120 | 132 | am_rtp_codecs_OBJECTS = rtp_codecs-generic.$(OBJEXT) \ |
121 | 133 | rtp_codecs-codecs.$(OBJEXT) |
238 | 250 | am__v_GEN_0 = @echo " GEN " $@; |
239 | 251 | SOURCES = $(base_fscodec_SOURCES) base/fstransmitter.c \ |
240 | 252 | $(elements_funnel_SOURCES) $(elements_rtcpfilter_SOURCES) \ |
241 | $(msn_conference_SOURCES) $(rtp_codecs_SOURCES) \ | |
242 | $(rtp_conference_SOURCES) rtp/recvcodecs.c \ | |
243 | $(rtp_sendcodecs_SOURCES) $(transmitter_multicast_SOURCES) \ | |
244 | $(transmitter_nice_SOURCES) $(transmitter_rawudp_SOURCES) \ | |
245 | $(transmitter_shm_SOURCES) $(utils_binadded_SOURCES) | |
253 | $(msn_conference_SOURCES) $(raw_conference_SOURCES) \ | |
254 | $(rtp_codecs_SOURCES) $(rtp_conference_SOURCES) \ | |
255 | rtp/recvcodecs.c $(rtp_sendcodecs_SOURCES) \ | |
256 | $(transmitter_multicast_SOURCES) $(transmitter_nice_SOURCES) \ | |
257 | $(transmitter_rawudp_SOURCES) $(transmitter_shm_SOURCES) \ | |
258 | $(utils_binadded_SOURCES) | |
246 | 259 | DIST_SOURCES = $(base_fscodec_SOURCES) base/fstransmitter.c \ |
247 | 260 | $(elements_funnel_SOURCES) $(elements_rtcpfilter_SOURCES) \ |
248 | $(msn_conference_SOURCES) $(rtp_codecs_SOURCES) \ | |
249 | $(rtp_conference_SOURCES) rtp/recvcodecs.c \ | |
250 | $(rtp_sendcodecs_SOURCES) $(transmitter_multicast_SOURCES) \ | |
251 | $(transmitter_nice_SOURCES) $(transmitter_rawudp_SOURCES) \ | |
252 | $(transmitter_shm_SOURCES) $(utils_binadded_SOURCES) | |
261 | $(msn_conference_SOURCES) $(raw_conference_SOURCES) \ | |
262 | $(rtp_codecs_SOURCES) $(rtp_conference_SOURCES) \ | |
263 | rtp/recvcodecs.c $(rtp_sendcodecs_SOURCES) \ | |
264 | $(transmitter_multicast_SOURCES) $(transmitter_nice_SOURCES) \ | |
265 | $(transmitter_rawudp_SOURCES) $(transmitter_shm_SOURCES) \ | |
266 | $(utils_binadded_SOURCES) | |
253 | 267 | ETAGS = etags |
254 | 268 | CTAGS = ctags |
255 | 269 | am__tty_colors = \ |
549 | 563 | transmitter/generic.h \ |
550 | 564 | transmitter/shm.c |
551 | 565 | |
566 | raw_conference_CFLAGS = $(AM_CFLAGS) | |
567 | raw_conference_SOURCES = \ | |
568 | check-threadsafe.h \ | |
569 | testutils.c \ | |
570 | testutils.h \ | |
571 | raw/conference.c | |
572 | ||
552 | 573 | rtp_conference_CFLAGS = $(AM_CFLAGS) |
553 | 574 | rtp_conference_SOURCES = \ |
554 | 575 | check-threadsafe.h \ |
653 | 674 | msn/conference$(EXEEXT): $(msn_conference_OBJECTS) $(msn_conference_DEPENDENCIES) msn/$(am__dirstamp) |
654 | 675 | @rm -f msn/conference$(EXEEXT) |
655 | 676 | $(AM_V_CCLD)$(msn_conference_LINK) $(msn_conference_OBJECTS) $(msn_conference_LDADD) $(LIBS) |
677 | raw/$(am__dirstamp): | |
678 | @$(MKDIR_P) raw | |
679 | @: > raw/$(am__dirstamp) | |
680 | raw/conference$(EXEEXT): $(raw_conference_OBJECTS) $(raw_conference_DEPENDENCIES) raw/$(am__dirstamp) | |
681 | @rm -f raw/conference$(EXEEXT) | |
682 | $(AM_V_CCLD)$(raw_conference_LINK) $(raw_conference_OBJECTS) $(raw_conference_LDADD) $(LIBS) | |
656 | 683 | rtp/$(am__dirstamp): |
657 | 684 | @$(MKDIR_P) rtp |
658 | 685 | @: > rtp/$(am__dirstamp) |
701 | 728 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fscodec.Po@am__quote@ |
702 | 729 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstransmitter.Po@am__quote@ |
703 | 730 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msn_conference-conference.Po@am__quote@ |
731 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw_conference-conference.Po@am__quote@ | |
732 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raw_conference-testutils.Po@am__quote@ | |
704 | 733 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recvcodecs.Po@am__quote@ |
705 | 734 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtp_codecs-codecs.Po@am__quote@ |
706 | 735 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtp_codecs-generic.Po@am__quote@ |
830 | 859 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
831 | 860 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(msn_conference_CFLAGS) $(CFLAGS) -c -o msn_conference-conference.obj `if test -f 'msn/conference.c'; then $(CYGPATH_W) 'msn/conference.c'; else $(CYGPATH_W) '$(srcdir)/msn/conference.c'; fi` |
832 | 861 | |
862 | raw_conference-testutils.o: testutils.c | |
863 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -MT raw_conference-testutils.o -MD -MP -MF $(DEPDIR)/raw_conference-testutils.Tpo -c -o raw_conference-testutils.o `test -f 'testutils.c' || echo '$(srcdir)/'`testutils.c | |
864 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/raw_conference-testutils.Tpo $(DEPDIR)/raw_conference-testutils.Po | |
865 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
866 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutils.c' object='raw_conference-testutils.o' libtool=no @AMDEPBACKSLASH@ | |
867 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
868 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -c -o raw_conference-testutils.o `test -f 'testutils.c' || echo '$(srcdir)/'`testutils.c | |
869 | ||
870 | raw_conference-testutils.obj: testutils.c | |
871 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -MT raw_conference-testutils.obj -MD -MP -MF $(DEPDIR)/raw_conference-testutils.Tpo -c -o raw_conference-testutils.obj `if test -f 'testutils.c'; then $(CYGPATH_W) 'testutils.c'; else $(CYGPATH_W) '$(srcdir)/testutils.c'; fi` | |
872 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/raw_conference-testutils.Tpo $(DEPDIR)/raw_conference-testutils.Po | |
873 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
874 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testutils.c' object='raw_conference-testutils.obj' libtool=no @AMDEPBACKSLASH@ | |
875 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
876 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -c -o raw_conference-testutils.obj `if test -f 'testutils.c'; then $(CYGPATH_W) 'testutils.c'; else $(CYGPATH_W) '$(srcdir)/testutils.c'; fi` | |
877 | ||
878 | raw_conference-conference.o: raw/conference.c | |
879 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -MT raw_conference-conference.o -MD -MP -MF $(DEPDIR)/raw_conference-conference.Tpo -c -o raw_conference-conference.o `test -f 'raw/conference.c' || echo '$(srcdir)/'`raw/conference.c | |
880 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/raw_conference-conference.Tpo $(DEPDIR)/raw_conference-conference.Po | |
881 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
882 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='raw/conference.c' object='raw_conference-conference.o' libtool=no @AMDEPBACKSLASH@ | |
883 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
884 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -c -o raw_conference-conference.o `test -f 'raw/conference.c' || echo '$(srcdir)/'`raw/conference.c | |
885 | ||
886 | raw_conference-conference.obj: raw/conference.c | |
887 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -MT raw_conference-conference.obj -MD -MP -MF $(DEPDIR)/raw_conference-conference.Tpo -c -o raw_conference-conference.obj `if test -f 'raw/conference.c'; then $(CYGPATH_W) 'raw/conference.c'; else $(CYGPATH_W) '$(srcdir)/raw/conference.c'; fi` | |
888 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/raw_conference-conference.Tpo $(DEPDIR)/raw_conference-conference.Po | |
889 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
890 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='raw/conference.c' object='raw_conference-conference.obj' libtool=no @AMDEPBACKSLASH@ | |
891 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
892 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(raw_conference_CFLAGS) $(CFLAGS) -c -o raw_conference-conference.obj `if test -f 'raw/conference.c'; then $(CYGPATH_W) 'raw/conference.c'; else $(CYGPATH_W) '$(srcdir)/raw/conference.c'; fi` | |
893 | ||
833 | 894 | rtp_codecs-generic.o: rtp/generic.c |
834 | 895 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtp_codecs_CFLAGS) $(CFLAGS) -MT rtp_codecs-generic.o -MD -MP -MF $(DEPDIR)/rtp_codecs-generic.Tpo -c -o rtp_codecs-generic.o `test -f 'rtp/generic.c' || echo '$(srcdir)/'`rtp/generic.c |
835 | 896 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/rtp_codecs-generic.Tpo $(DEPDIR)/rtp_codecs-generic.Po |
1206 | 1267 | -rm -rf base/.libs base/_libs |
1207 | 1268 | -rm -rf elements/.libs elements/_libs |
1208 | 1269 | -rm -rf msn/.libs msn/_libs |
1270 | -rm -rf raw/.libs raw/_libs | |
1209 | 1271 | -rm -rf rtp/.libs rtp/_libs |
1210 | 1272 | -rm -rf transmitter/.libs transmitter/_libs |
1211 | 1273 | -rm -rf utils/.libs utils/_libs |
1415 | 1477 | -rm -f base/$(am__dirstamp) |
1416 | 1478 | -rm -f elements/$(am__dirstamp) |
1417 | 1479 | -rm -f msn/$(am__dirstamp) |
1480 | -rm -f raw/$(am__dirstamp) | |
1418 | 1481 | -rm -f rtp/$(am__dirstamp) |
1419 | 1482 | -rm -f transmitter/$(am__dirstamp) |
1420 | 1483 | -rm -f utils/$(am__dirstamp) |
0 | /* Farsight 2 unit tests for fsrawconference | |
1 | * | |
2 | * Copyright (C) 2007,2010 Collabora, Nokia | |
3 | * @author: Olivier Crete <olivier.crete@collabora.co.uk> | |
4 | * @author: Mike Ruprecht <mike.ruprecht@collabora.co.uk> | |
5 | * | |
6 | * This library is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU Lesser General Public | |
8 | * License as published by the Free Software Foundation; either | |
9 | * version 2.1 of the License, or (at your option) any later version. | |
10 | * | |
11 | * This library is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public | |
17 | * License along with this library; if not, write to the Free Software | |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
19 | */ | |
20 | ||
21 | #ifdef HAVE_CONFIG_H | |
22 | # include <config.h> | |
23 | #endif | |
24 | ||
25 | #include <gst/check/gstcheck.h> | |
26 | #include <gst/farsight/fs-conference-iface.h> | |
27 | #include <gst/farsight/fs-stream-transmitter.h> | |
28 | ||
29 | #include "check-threadsafe.h" | |
30 | ||
31 | #include "testutils.h" | |
32 | ||
33 | struct SimpleTestConference { | |
34 | gint id; | |
35 | gchar *cname; | |
36 | ||
37 | GstElement *pipeline; | |
38 | GstElement *conference; | |
39 | FsSession *session; | |
40 | GstElement *fakesrc; | |
41 | ||
42 | gboolean started; | |
43 | ||
44 | GList *streams; | |
45 | }; | |
46 | ||
47 | ||
48 | struct SimpleTestStream { | |
49 | struct SimpleTestConference *dat; | |
50 | struct SimpleTestConference *target; | |
51 | ||
52 | FsCandidate *candidate; | |
53 | FsParticipant *participant; | |
54 | FsStream *stream; | |
55 | ||
56 | gchar *transmitter; | |
57 | ||
58 | gint buffer_count; | |
59 | ||
60 | GCallback handoff_handler; | |
61 | ||
62 | gboolean got_candidates; | |
63 | ||
64 | gint flags; | |
65 | }; | |
66 | ||
67 | static struct SimpleTestStream * | |
68 | find_pointback_stream ( | |
69 | struct SimpleTestConference *dat, | |
70 | struct SimpleTestConference *target); | |
71 | ||
72 | ||
73 | struct SimpleTestConference **dats; | |
74 | GMainLoop *loop; | |
75 | int count = 0; | |
76 | ||
77 | #define WAITING_ON_LAST_CODEC (1<<0) | |
78 | #define SHOULD_BE_LAST_CODEC (1<<1) | |
79 | #define HAS_BEEN_RESET (1<<2) | |
80 | ||
81 | gint max_buffer_count = 20; | |
82 | ||
83 | guint max_src_pads = 1; | |
84 | ||
85 | GStaticMutex testlock = G_STATIC_MUTEX_INIT; | |
86 | ||
87 | #define TEST_LOCK() g_static_mutex_lock (&testlock) | |
88 | #define TEST_UNLOCK() g_static_mutex_unlock (&testlock) | |
89 | ||
90 | gboolean select_last_codec = FALSE; | |
91 | gboolean reset_to_last_codec = FALSE; | |
92 | ||
93 | static GstBusSyncReply | |
94 | default_sync_handler (GstBus *bus, GstMessage *message, gpointer data) | |
95 | { | |
96 | struct SimpleTestConference *dat = data; | |
97 | gboolean ready; | |
98 | ||
99 | /* Get the codecs-ready property which takes the session lock to make sure | |
100 | * it is not held across signal emissions | |
101 | */ | |
102 | if (dat->session) | |
103 | g_object_get (dat->session, "codecs-ready", &ready, NULL); | |
104 | ||
105 | return GST_BUS_PASS; | |
106 | } | |
107 | ||
108 | struct SimpleTestConference * | |
109 | setup_simple_conference_full ( | |
110 | gint id, | |
111 | gchar *conference_elem, | |
112 | gchar *cname, | |
113 | FsMediaType mediatype) | |
114 | { | |
115 | struct SimpleTestConference *dat = g_new0 (struct SimpleTestConference, 1); | |
116 | GError *error = NULL; | |
117 | guint tos; | |
118 | GstBus *bus; | |
119 | ||
120 | dat->id = id; | |
121 | ||
122 | dat->pipeline = gst_pipeline_new ("pipeline"); | |
123 | fail_if (dat->pipeline == NULL); | |
124 | ||
125 | bus = gst_pipeline_get_bus (GST_PIPELINE (dat->pipeline)); | |
126 | fail_if (bus == NULL); | |
127 | gst_bus_set_sync_handler (bus, default_sync_handler, dat); | |
128 | gst_object_unref (bus); | |
129 | ||
130 | dat->conference = gst_element_factory_make (conference_elem, NULL); | |
131 | fail_if (dat->conference == NULL, "Could not build %s", conference_elem); | |
132 | fail_unless (gst_bin_add (GST_BIN (dat->pipeline), dat->conference), | |
133 | "Could not add conference to the pipeline"); | |
134 | ||
135 | dat->session = fs_conference_new_session (FS_CONFERENCE (dat->conference), | |
136 | mediatype, &error); | |
137 | if (error) | |
138 | fail ("Error while creating new session (%d): %s", | |
139 | error->code, error->message); | |
140 | fail_if (dat->session == NULL, "Could not make session, but no GError!"); | |
141 | ||
142 | g_object_set (dat->session, "tos", 2, NULL); | |
143 | g_object_get (dat->session, "tos", &tos, NULL); | |
144 | fail_unless (tos == 2); | |
145 | ||
146 | ||
147 | g_object_set_data (G_OBJECT (dat->conference), "dat", dat); | |
148 | ||
149 | return dat; | |
150 | } | |
151 | ||
152 | ||
153 | struct SimpleTestConference * | |
154 | setup_simple_conference ( | |
155 | gint id, | |
156 | gchar *conference_elem, | |
157 | gchar *cname) | |
158 | { | |
159 | return setup_simple_conference_full (id, conference_elem, cname, | |
160 | FS_MEDIA_TYPE_AUDIO); | |
161 | } | |
162 | ||
163 | struct SimpleTestStream * | |
164 | simple_conference_add_stream ( | |
165 | struct SimpleTestConference *dat, | |
166 | struct SimpleTestConference *target, | |
167 | const gchar *transmitter, | |
168 | guint st_param_count, | |
169 | GParameter *st_params) | |
170 | { | |
171 | struct SimpleTestStream *st = g_new0 (struct SimpleTestStream, 1); | |
172 | GError *error = NULL; | |
173 | ||
174 | st->dat = dat; | |
175 | st->target = target; | |
176 | st->transmitter = g_strdup (transmitter); | |
177 | ||
178 | st->participant = fs_conference_new_participant ( | |
179 | FS_CONFERENCE (dat->conference), NULL, &error); | |
180 | if (error) | |
181 | fail ("Error while creating new participant (%d): %s", | |
182 | error->code, error->message); | |
183 | fail_if (st->participant == NULL, "Could not make participant, but no GError!"); | |
184 | ||
185 | st->stream = fs_session_new_stream (dat->session, st->participant, | |
186 | FS_DIRECTION_BOTH, transmitter, st_param_count, st_params, &error); | |
187 | if (error) | |
188 | fail ("Error while creating new stream (%d): %s", | |
189 | error->code, error->message); | |
190 | fail_if (st->stream == NULL, "Could not make stream, but no GError!"); | |
191 | ||
192 | g_object_set_data (G_OBJECT (st->stream), "SimpleTestStream", st); | |
193 | ||
194 | dat->streams = g_list_append (dat->streams, st); | |
195 | ||
196 | return st; | |
197 | } | |
198 | ||
199 | ||
200 | void | |
201 | cleanup_simple_stream (struct SimpleTestStream *st) | |
202 | { | |
203 | if (st->stream) | |
204 | g_object_unref (st->stream); | |
205 | g_object_unref (st->participant); | |
206 | fs_candidate_destroy (st->candidate); | |
207 | g_free (st->transmitter); | |
208 | g_free (st); | |
209 | } | |
210 | ||
211 | void | |
212 | cleanup_simple_conference (struct SimpleTestConference *dat) | |
213 | { | |
214 | ||
215 | g_list_foreach (dat->streams, (GFunc) cleanup_simple_stream, NULL); | |
216 | g_list_free (dat->streams); | |
217 | ||
218 | if (dat->session) | |
219 | g_object_unref (dat->session); | |
220 | gst_object_unref (dat->pipeline); | |
221 | g_free (dat); | |
222 | } | |
223 | ||
224 | ||
225 | void | |
226 | setup_fakesrc (struct SimpleTestConference *dat) | |
227 | { | |
228 | GstPad *sinkpad = NULL, *srcpad = NULL; | |
229 | ||
230 | GST_DEBUG ("Adding fakesrc"); | |
231 | ||
232 | ||
233 | g_object_get (dat->session, "sink-pad", &sinkpad, NULL); | |
234 | fail_if (sinkpad == NULL, "Could not get session sinkpad"); | |
235 | ||
236 | dat->fakesrc = gst_element_factory_make ("audiotestsrc", NULL); | |
237 | fail_if (dat->fakesrc == NULL, "Could not make audiotestsrc"); | |
238 | gst_bin_add (GST_BIN (dat->pipeline), dat->fakesrc); | |
239 | ||
240 | g_object_set (dat->fakesrc, | |
241 | "blocksize", 10, | |
242 | "is-live", TRUE, | |
243 | "volume", 0.3, | |
244 | NULL); | |
245 | ||
246 | srcpad = gst_element_get_static_pad (dat->fakesrc, "src"); | |
247 | ||
248 | fail_unless (gst_pad_link (srcpad, sinkpad) == GST_PAD_LINK_OK, | |
249 | "Could not link the capsfilter and the fsrawconference"); | |
250 | ||
251 | gst_object_unref (sinkpad); | |
252 | gst_object_unref (srcpad); | |
253 | ||
254 | if (dat->started) | |
255 | gst_element_set_state (dat->pipeline, GST_STATE_PLAYING); | |
256 | } | |
257 | ||
258 | static gboolean | |
259 | pad_count_fold (gpointer pad, GValue *val, gpointer user_data) | |
260 | { | |
261 | g_value_set_uint (val, g_value_get_uint (val) + 1); | |
262 | ||
263 | gst_object_unref (pad); | |
264 | ||
265 | return TRUE; | |
266 | } | |
267 | ||
268 | guint | |
269 | count_stream_pads (FsStream *stream) | |
270 | { | |
271 | GstIterator *iter = fs_stream_get_src_pads_iterator (stream); | |
272 | guint count = 0; | |
273 | ||
274 | fail_if (iter == NULL); | |
275 | ||
276 | for (;;) | |
277 | { | |
278 | GstIteratorResult res; | |
279 | GValue val = {0}; | |
280 | ||
281 | g_value_init (&val, G_TYPE_UINT); | |
282 | ||
283 | res = gst_iterator_fold (iter, pad_count_fold, &val, NULL); | |
284 | ||
285 | fail_if (res == GST_ITERATOR_ERROR); | |
286 | ||
287 | if (res != GST_ITERATOR_RESYNC) | |
288 | { | |
289 | count = g_value_get_uint (&val); | |
290 | break; | |
291 | } | |
292 | ||
293 | gst_iterator_resync (iter); | |
294 | } | |
295 | ||
296 | gst_iterator_free (iter); | |
297 | ||
298 | return count; | |
299 | } | |
300 | ||
301 | GST_START_TEST (test_rawconference_new) | |
302 | { | |
303 | struct SimpleTestConference *dat = NULL; | |
304 | struct SimpleTestStream *st = NULL; | |
305 | guint id = 999; | |
306 | GList *codecs = NULL; | |
307 | FsMediaType media_type; | |
308 | GstPad *sinkpad = NULL; | |
309 | gchar *str = NULL; | |
310 | GstElement *conf = NULL; | |
311 | FsSession *sess = NULL; | |
312 | FsParticipant *part = NULL; | |
313 | FsStreamDirection dir; | |
314 | ||
315 | dat = setup_simple_conference (1, "fsrawconference", "bob@127.0.0.1"); | |
316 | st = simple_conference_add_stream (dat, dat, "shm", 0, NULL); | |
317 | ||
318 | g_object_get (dat->session, | |
319 | "id", &id, | |
320 | "codecs", &codecs, | |
321 | "media-type", &media_type, | |
322 | "sink-pad", &sinkpad, | |
323 | "conference", &conf, | |
324 | NULL); | |
325 | ||
326 | ts_fail_unless (id == 1, "The id of the first session should be 1 not %d", | |
327 | id); | |
328 | ts_fail_unless (codecs == NULL, "Codecs should be NULL"); | |
329 | fs_codec_list_destroy (codecs); | |
330 | ts_fail_unless (media_type == FS_MEDIA_TYPE_AUDIO, "Media type isnt audio," | |
331 | " its %d", media_type); | |
332 | ts_fail_if (sinkpad == NULL, "Sink pad should not be null"); | |
333 | str = g_strdup_printf ("sink_%d", id); | |
334 | ts_fail_unless (!strcmp (str, GST_OBJECT_NAME (sinkpad)), "Sink pad is %s" | |
335 | " instead of being %d", GST_OBJECT_NAME (sinkpad), str); | |
336 | gst_object_unref (sinkpad); | |
337 | g_free (str); | |
338 | ts_fail_unless (conf == dat->conference, "Conference pointer from the session" | |
339 | " is wrong"); | |
340 | gst_object_unref (conf); | |
341 | ||
342 | ||
343 | g_object_get (st->stream, | |
344 | "participant", &part, | |
345 | "session", &sess, | |
346 | "direction", &dir, | |
347 | NULL); | |
348 | ts_fail_unless (part == st->participant, "The stream does not have the right" | |
349 | " participant"); | |
350 | g_object_unref (part); | |
351 | ts_fail_unless (sess == dat->session, "The stream does not have the right" | |
352 | " session"); | |
353 | g_object_unref (sess); | |
354 | ts_fail_unless (dir == FS_DIRECTION_BOTH, "The direction is not both"); | |
355 | ||
356 | ts_fail_unless (count_stream_pads (st->stream) == 0); | |
357 | g_object_set (st->stream, "direction", FS_DIRECTION_NONE, NULL); | |
358 | g_object_get (st->stream, "direction", &dir, NULL); | |
359 | ts_fail_unless (dir == FS_DIRECTION_NONE, "The direction is not both"); | |
360 | ||
361 | cleanup_simple_conference (dat); | |
362 | } | |
363 | GST_END_TEST; | |
364 | ||
365 | ||
366 | static void | |
367 | _new_local_candidate (FsStream *stream, FsCandidate *candidate) | |
368 | { | |
369 | struct SimpleTestStream *st = g_object_get_data (G_OBJECT (stream), | |
370 | "SimpleTestStream"); | |
371 | gboolean ret; | |
372 | GError *error = NULL; | |
373 | struct SimpleTestStream *other_st; | |
374 | GList *candidates = NULL; | |
375 | ||
376 | TEST_LOCK (); | |
377 | ||
378 | if (st->stream == NULL) | |
379 | { | |
380 | TEST_UNLOCK (); | |
381 | return; | |
382 | } | |
383 | ||
384 | other_st = find_pointback_stream (st->target, st->dat); | |
385 | if (other_st->stream == NULL) | |
386 | { | |
387 | TEST_UNLOCK (); | |
388 | return; | |
389 | } | |
390 | ||
391 | if (st->candidate) | |
392 | fs_candidate_destroy (st->candidate); | |
393 | st->candidate = fs_candidate_copy (candidate); | |
394 | st->got_candidates = TRUE; | |
395 | ||
396 | GST_DEBUG ("%d:%d: Setting remote candidate for component %d", | |
397 | other_st->dat->id, | |
398 | other_st->target->id, | |
399 | candidate->component_id); | |
400 | ||
401 | if (!strcmp ("shm", st->transmitter) && other_st->candidate) | |
402 | { | |
403 | if (other_st->candidate->username) | |
404 | g_free ((gchar *)other_st->candidate->username); | |
405 | other_st->candidate->username = g_strdup (candidate->ip); | |
406 | candidates = g_list_prepend (NULL, other_st->candidate); | |
407 | } | |
408 | else | |
409 | { | |
410 | candidates = g_list_prepend (NULL, candidate); | |
411 | } | |
412 | ||
413 | ret = fs_stream_set_remote_candidates (other_st->stream, candidates, &error); | |
414 | g_list_free (candidates); | |
415 | ||
416 | if (error) | |
417 | ts_fail ("Error while adding candidate: (%s:%d) %s", | |
418 | g_quark_to_string (error->domain), error->code, error->message); | |
419 | ||
420 | ts_fail_unless (ret == TRUE, "No detailed error from add_remote_candidate"); | |
421 | ||
422 | TEST_UNLOCK (); | |
423 | } | |
424 | ||
425 | static void | |
426 | _current_send_codec_changed (FsSession *session, FsCodec *codec) | |
427 | { | |
428 | struct SimpleTestConference *dat = NULL; | |
429 | FsConference *conf = NULL; | |
430 | gchar *str = NULL; | |
431 | ||
432 | g_object_get (session, "conference", &conf, NULL); | |
433 | dat = g_object_get_data (G_OBJECT (conf), "dat"); | |
434 | gst_object_unref (conf); | |
435 | ||
436 | str = fs_codec_to_string (codec); | |
437 | GST_DEBUG ("%d: New send codec: %s", dat->id, str); | |
438 | g_free (str); | |
439 | } | |
440 | ||
441 | static void | |
442 | _local_candidates_prepared (FsStream *stream) | |
443 | { | |
444 | struct SimpleTestStream *st = g_object_get_data (G_OBJECT (stream), | |
445 | "SimpleTestStream"); | |
446 | ||
447 | if (!st->got_candidates) | |
448 | { | |
449 | g_debug ("Skipping test because there are no candidates"); | |
450 | g_main_loop_quit (loop); | |
451 | } | |
452 | ||
453 | } | |
454 | ||
455 | ||
456 | static gboolean | |
457 | _bus_callback (GstBus *bus, GstMessage *message, gpointer user_data) | |
458 | { | |
459 | struct SimpleTestConference *dat = user_data; | |
460 | ||
461 | switch (GST_MESSAGE_TYPE (message)) | |
462 | { | |
463 | case GST_MESSAGE_ELEMENT: | |
464 | { | |
465 | const GstStructure *s = gst_message_get_structure (message); | |
466 | ts_fail_if (s==NULL, "NULL structure in element message"); | |
467 | if (gst_structure_has_name (s, "farsight-error")) | |
468 | { | |
469 | const GValue *value; | |
470 | FsError errorno; | |
471 | const gchar *error, *debug; | |
472 | ||
473 | ts_fail_unless ( | |
474 | gst_implements_interface_check (GST_MESSAGE_SRC (message), | |
475 | FS_TYPE_CONFERENCE), | |
476 | "Received farsight-error from non-farsight element"); | |
477 | ||
478 | ts_fail_unless ( | |
479 | gst_structure_has_field_typed (s, "src-object", G_TYPE_OBJECT), | |
480 | "farsight-error structure has no src-object field"); | |
481 | ts_fail_unless ( | |
482 | gst_structure_has_field_typed (s, "error-no", FS_TYPE_ERROR), | |
483 | "farsight-error structure has no src-object field"); | |
484 | ts_fail_unless ( | |
485 | gst_structure_has_field_typed (s, "error-msg", G_TYPE_STRING), | |
486 | "farsight-error structure has no src-object field"); | |
487 | ts_fail_unless ( | |
488 | gst_structure_has_field_typed (s, "debug-msg", G_TYPE_STRING), | |
489 | "farsight-error structure has no src-object field"); | |
490 | ||
491 | value = gst_structure_get_value (s, "error-no"); | |
492 | errorno = g_value_get_enum (value); | |
493 | error = gst_structure_get_string (s, "error-msg"); | |
494 | debug = gst_structure_get_string (s, "debug-msg"); | |
495 | ||
496 | ts_fail ("Error on BUS (%d) %s .. %s", errorno, error, debug); | |
497 | } | |
498 | else if (gst_structure_has_name (s, "farsight-new-local-candidate")) | |
499 | { | |
500 | FsStream *stream; | |
501 | FsCandidate *candidate; | |
502 | const GValue *value; | |
503 | ||
504 | ts_fail_unless ( | |
505 | gst_implements_interface_check (GST_MESSAGE_SRC (message), | |
506 | FS_TYPE_CONFERENCE), | |
507 | "Received farsight-error from non-farsight element"); | |
508 | ||
509 | ts_fail_unless ( | |
510 | gst_structure_has_field_typed (s, "stream", FS_TYPE_STREAM), | |
511 | "farsight-new-local-candidate structure has no stream field"); | |
512 | ts_fail_unless ( | |
513 | gst_structure_has_field_typed (s, "candidate", FS_TYPE_CANDIDATE), | |
514 | "farsight-new-local-candidate structure has no candidate field"); | |
515 | ||
516 | value = gst_structure_get_value (s, "stream"); | |
517 | stream = g_value_get_object (value); | |
518 | ||
519 | value = gst_structure_get_value (s, "candidate"); | |
520 | candidate = g_value_get_boxed (value); | |
521 | ||
522 | ts_fail_unless (stream && candidate, "new-local-candidate with NULL" | |
523 | " stream(%p) or candidate(%p)", stream, candidate); | |
524 | ||
525 | _new_local_candidate (stream, candidate); | |
526 | } | |
527 | else if (gst_structure_has_name (s, | |
528 | "farsight-new-active-candidate-pair")) | |
529 | { | |
530 | FsStream *stream; | |
531 | FsCandidate *local_candidate, *remote_candidate; | |
532 | const GValue *value; | |
533 | ||
534 | ts_fail_unless ( | |
535 | gst_implements_interface_check (GST_MESSAGE_SRC (message), | |
536 | FS_TYPE_CONFERENCE), | |
537 | "Received farsight-error from non-farsight element"); | |
538 | ||
539 | ts_fail_unless ( | |
540 | gst_structure_has_field_typed (s, "stream", FS_TYPE_STREAM), | |
541 | "farsight-new-active-candidate-pair structure" | |
542 | " has no stream field"); | |
543 | ts_fail_unless ( | |
544 | gst_structure_has_field_typed (s, "local-candidate", | |
545 | FS_TYPE_CANDIDATE), | |
546 | "farsight-new-active-candidate-pair structure" | |
547 | " has no local-candidate field"); | |
548 | ts_fail_unless ( | |
549 | gst_structure_has_field_typed (s, "remote-candidate", | |
550 | FS_TYPE_CANDIDATE), | |
551 | "farsight-new-active-candidate-pair structure" | |
552 | " has no remote-candidate field"); | |
553 | ||
554 | value = gst_structure_get_value (s, "stream"); | |
555 | stream = g_value_get_object (value); | |
556 | value = gst_structure_get_value (s, "local-candidate"); | |
557 | local_candidate = g_value_get_boxed (value); | |
558 | value = gst_structure_get_value (s, "remote-candidate"); | |
559 | remote_candidate = g_value_get_boxed (value); | |
560 | ||
561 | ts_fail_unless (stream && local_candidate && remote_candidate, | |
562 | "new-local-candidate with NULL stream(%p)" | |
563 | " or local_candidate(%p) or remote_candidate(%p)", | |
564 | stream, local_candidate, remote_candidate); | |
565 | } | |
566 | else if (gst_structure_has_name (s, | |
567 | "farsight-current-send-codec-changed")) | |
568 | { | |
569 | FsSession *session; | |
570 | FsCodec *codec; | |
571 | const GValue *value; | |
572 | ||
573 | ts_fail_unless ( | |
574 | gst_implements_interface_check (GST_MESSAGE_SRC (message), | |
575 | FS_TYPE_CONFERENCE), | |
576 | "Received farsight-current-send-codec-change from non-farsight" | |
577 | " element"); | |
578 | ||
579 | ts_fail_unless ( | |
580 | gst_structure_has_field_typed (s, "session", FS_TYPE_SESSION), | |
581 | "farsight-current-send-codec-changed structure" | |
582 | " has no session field"); | |
583 | ts_fail_unless ( | |
584 | gst_structure_has_field_typed (s, "codec", | |
585 | FS_TYPE_CODEC), | |
586 | ""); | |
587 | ||
588 | value = gst_structure_get_value (s, "session"); | |
589 | session = g_value_get_object (value); | |
590 | value = gst_structure_get_value (s, "codec"); | |
591 | codec = g_value_get_boxed (value); | |
592 | ||
593 | ts_fail_unless (session && codec, | |
594 | "current-send-codec-changed with NULL session(%p) or codec(%p)", | |
595 | session, codec); | |
596 | ||
597 | _current_send_codec_changed (session, codec); | |
598 | } | |
599 | else if (gst_structure_has_name (s, | |
600 | "farsight-local-candidates-prepared")) | |
601 | { | |
602 | FsStream *stream; | |
603 | const GValue *value; | |
604 | ||
605 | ts_fail_unless ( | |
606 | gst_implements_interface_check (GST_MESSAGE_SRC (message), | |
607 | FS_TYPE_CONFERENCE), | |
608 | "Received farsight-local-candidates-prepared from non-farsight" | |
609 | " element"); | |
610 | ||
611 | ts_fail_unless ( | |
612 | gst_structure_has_field_typed (s, "stream", FS_TYPE_STREAM), | |
613 | "farsight-local-candidates-prepared structure" | |
614 | " has no stream field"); | |
615 | ||
616 | value = gst_structure_get_value (s, "stream"); | |
617 | stream = g_value_get_object (value); | |
618 | ||
619 | _local_candidates_prepared (stream); | |
620 | } | |
621 | ||
622 | } | |
623 | break; | |
624 | case GST_MESSAGE_ERROR: | |
625 | { | |
626 | GError *error = NULL; | |
627 | gchar *debug = NULL; | |
628 | gst_message_parse_error (message, &error, &debug); | |
629 | ||
630 | ts_fail ("Got an error on the BUS (%d): %s (%s)", error->code, | |
631 | error->message, debug); | |
632 | g_error_free (error); | |
633 | g_free (debug); | |
634 | } | |
635 | break; | |
636 | case GST_MESSAGE_WARNING: | |
637 | { | |
638 | GError *error = NULL; | |
639 | gchar *debug = NULL; | |
640 | gst_message_parse_warning (message, &error, &debug); | |
641 | ||
642 | GST_WARNING ("%d: Got a warning on the BUS (%d): %s (%s)", dat->id, | |
643 | error->code, | |
644 | error->message, debug); | |
645 | g_error_free (error); | |
646 | g_free (debug); | |
647 | } | |
648 | break; | |
649 | default: | |
650 | break; | |
651 | } | |
652 | ||
653 | return TRUE; | |
654 | } | |
655 | ||
656 | static void | |
657 | _handoff_handler (GstElement *element, GstBuffer *buffer, GstPad *pad, | |
658 | gpointer user_data) | |
659 | { | |
660 | struct SimpleTestStream *st = user_data; | |
661 | int i; | |
662 | gboolean stop = TRUE; | |
663 | GList *codecs = NULL; | |
664 | ||
665 | if (st->dat->session == NULL) | |
666 | return; | |
667 | ||
668 | g_object_get (st->dat->session, | |
669 | "codecs", &codecs, | |
670 | NULL); | |
671 | ||
672 | ts_fail_if (codecs == NULL, "Could not get codecs"); | |
673 | ||
674 | if (st->flags & WAITING_ON_LAST_CODEC) | |
675 | { | |
676 | if (fs_codec_are_equal ( | |
677 | g_list_last (codecs)->data, | |
678 | g_object_get_data (G_OBJECT (element), "codec"))) | |
679 | { | |
680 | st->flags &= ~WAITING_ON_LAST_CODEC; | |
681 | st->flags |= SHOULD_BE_LAST_CODEC; | |
682 | max_buffer_count += st->buffer_count; | |
683 | GST_DEBUG ("We HAVE last codec"); | |
684 | } | |
685 | else | |
686 | { | |
687 | #if 0 | |
688 | gchar *str = fs_codec_to_string ( | |
689 | g_object_get_data (G_OBJECT (element), "codec")); | |
690 | gchar *str2 = fs_codec_to_string (g_list_last (codecs)->data); | |
691 | GST_DEBUG ("not yet the last codec, skipping (we have %s, we want %s)", | |
692 | str, str2); | |
693 | g_free (str); | |
694 | g_free (str2); | |
695 | #endif | |
696 | fs_codec_list_destroy (codecs); | |
697 | return; | |
698 | } | |
699 | } | |
700 | ||
701 | ||
702 | if (select_last_codec || st->flags & SHOULD_BE_LAST_CODEC) | |
703 | { | |
704 | if (!fs_codec_are_equal ( | |
705 | g_list_last (codecs)->data, | |
706 | g_object_get_data (G_OBJECT (element), "codec"))) | |
707 | { | |
708 | if (!reset_to_last_codec) | |
709 | ts_fail ("The handoff handler got a buffer from the wrong codec" | |
710 | " (ie. not the last)"); | |
711 | fs_codec_list_destroy (codecs); | |
712 | return; | |
713 | } | |
714 | } | |
715 | else | |
716 | ts_fail_unless ( | |
717 | fs_codec_are_equal ( | |
718 | g_list_first (codecs)->data, | |
719 | g_object_get_data (G_OBJECT (element), "codec")), | |
720 | "The handoff handler got a buffer from the wrong codec"); | |
721 | ||
722 | fs_codec_list_destroy (codecs); | |
723 | ||
724 | ||
725 | st->buffer_count++; | |
726 | GST_LOG ("%d:%d: Buffer %d", st->dat->id, st->target->id, st->buffer_count); | |
727 | ||
728 | ||
729 | /* | |
730 | ts_fail_if (dat->buffer_count > max_buffer_count, | |
731 | "Too many buffers %d > max_buffer_count", dat->buffer_count); | |
732 | */ | |
733 | ||
734 | for (i = 0; i < count && !stop ; i++) | |
735 | { | |
736 | GList *item; | |
737 | ||
738 | ||
739 | for (item = g_list_first (dats[i]->streams); | |
740 | item; | |
741 | item = g_list_next (item)) | |
742 | { | |
743 | struct SimpleTestStream *st2 = item->data; | |
744 | ||
745 | if (st2->buffer_count < max_buffer_count) | |
746 | { | |
747 | stop = FALSE; | |
748 | break; | |
749 | } | |
750 | } | |
751 | } | |
752 | ||
753 | if (stop) | |
754 | { | |
755 | if (reset_to_last_codec && !(st->flags & HAS_BEEN_RESET)) { | |
756 | //GError *error = NULL; | |
757 | GList *nego_codecs = NULL; | |
758 | //gchar *str = NULL; | |
759 | ||
760 | g_object_get (st->target->session, | |
761 | "codecs", &nego_codecs, | |
762 | NULL); | |
763 | #if 0 | |
764 | ts_fail_if (nego_codecs == NULL, "No codecs"); | |
765 | ts_fail_if (g_list_length (nego_codecs) < 2, "Only one negotiated codec"); | |
766 | ||
767 | str = fs_codec_to_string (g_list_last (nego_codecs)->data); | |
768 | GST_DEBUG ("Setting codec to: %s", str); | |
769 | g_free (str); | |
770 | ||
771 | ts_fail_unless (fs_session_set_send_codec (st->target->session, | |
772 | g_list_last (nego_codecs)->data, &error), | |
773 | "Could not set the send codec: %s", | |
774 | error ? error->message : "NO GError!!!"); | |
775 | g_clear_error (&error); | |
776 | #endif | |
777 | fs_codec_list_destroy (nego_codecs); | |
778 | ||
779 | st->flags |= HAS_BEEN_RESET | WAITING_ON_LAST_CODEC; | |
780 | ||
781 | GST_DEBUG ("RESET TO LAST CODEC"); | |
782 | ||
783 | } else { | |
784 | g_main_loop_quit (loop); | |
785 | } | |
786 | } | |
787 | } | |
788 | ||
789 | static void | |
790 | _src_pad_added (FsStream *stream, GstPad *pad, FsCodec *codec, | |
791 | gpointer user_data) | |
792 | { | |
793 | struct SimpleTestStream *st = user_data; | |
794 | GstElement *fakesink = gst_element_factory_make ("fakesink", NULL); | |
795 | GstPad *fakesink_pad = NULL; | |
796 | GstPadLinkReturn ret; | |
797 | FsCodec *codeccopy = fs_codec_copy (codec); | |
798 | gchar *str = NULL; | |
799 | ||
800 | g_assert (fakesink); | |
801 | ||
802 | g_object_set (fakesink, | |
803 | "signal-handoffs", TRUE, | |
804 | "sync", TRUE, | |
805 | "async", TRUE, | |
806 | NULL); | |
807 | ||
808 | ts_fail_if (codec->encoding_name == NULL, | |
809 | "Got invalid codec without an encoding_name with id %u" | |
810 | " and clock_rate %u", codec->id, codec->clock_rate); | |
811 | ||
812 | g_object_set_data (G_OBJECT (fakesink), "codec", codeccopy); | |
813 | g_object_weak_ref (G_OBJECT (fakesink), | |
814 | (GWeakNotify) fs_codec_destroy, codeccopy); | |
815 | ||
816 | g_signal_connect (fakesink, "handoff", st->handoff_handler, st); | |
817 | ||
818 | gst_bin_add (GST_BIN (st->dat->pipeline), fakesink); | |
819 | ||
820 | fakesink_pad = gst_element_get_static_pad (fakesink, "sink"); | |
821 | ret = gst_pad_link (pad, fakesink_pad); | |
822 | gst_object_unref (fakesink_pad); | |
823 | ||
824 | ts_fail_if (GST_PAD_LINK_FAILED(ret), "Could not link fakesink"); | |
825 | ||
826 | ts_fail_if (gst_element_set_state (fakesink, GST_STATE_PLAYING) == | |
827 | GST_STATE_CHANGE_FAILURE, "Could not set the fakesink to playing"); | |
828 | ||
829 | str = fs_codec_to_string (codec); | |
830 | GST_DEBUG ("%d:%d: Added Fakesink for codec %s", st->dat->id, st->target->id, | |
831 | str); | |
832 | g_free (str); | |
833 | ||
834 | if (max_src_pads > 1) | |
835 | ts_fail_unless (count_stream_pads (stream) <= max_src_pads); | |
836 | else | |
837 | ts_fail_unless (count_stream_pads (stream) == 1); | |
838 | } | |
839 | ||
840 | ||
841 | static struct SimpleTestStream * | |
842 | find_pointback_stream ( | |
843 | struct SimpleTestConference *dat, | |
844 | struct SimpleTestConference *target) | |
845 | { | |
846 | GList *item = NULL; | |
847 | ||
848 | for (item = g_list_first (dat->streams); | |
849 | item; | |
850 | item = g_list_next (item)) | |
851 | { | |
852 | struct SimpleTestStream *st = item->data; | |
853 | ||
854 | if (st->target == target) | |
855 | return st; | |
856 | } | |
857 | ||
858 | ts_fail ("We did not find a return stream for %d in %d", target->id, dat->id); | |
859 | return NULL; | |
860 | } | |
861 | ||
862 | ||
863 | static void | |
864 | rawconference_connect_signals (struct SimpleTestConference *dat) | |
865 | { | |
866 | GstBus *bus = NULL; | |
867 | ||
868 | bus = gst_element_get_bus (dat->pipeline); | |
869 | gst_bus_add_watch (bus, _bus_callback, dat); | |
870 | gst_object_unref (bus); | |
871 | } | |
872 | ||
873 | ||
874 | static gboolean | |
875 | _start_pipeline (gpointer user_data) | |
876 | { | |
877 | struct SimpleTestConference *dat = user_data; | |
878 | ||
879 | GST_DEBUG ("%d: Starting pipeline", dat->id); | |
880 | ||
881 | ts_fail_if (gst_element_set_state (dat->pipeline, GST_STATE_PLAYING) == | |
882 | GST_STATE_CHANGE_FAILURE, "Could not set the pipeline to playing"); | |
883 | ||
884 | dat->started = TRUE; | |
885 | ||
886 | return FALSE; | |
887 | } | |
888 | ||
889 | static gboolean | |
890 | _compare_codec_lists (GList *list1, GList *list2) | |
891 | { | |
892 | for (; list1 && list2; | |
893 | list1 = g_list_next (list1), | |
894 | list2 = g_list_next (list2)) { | |
895 | if (!fs_codec_are_equal (list1->data, list2->data)) | |
896 | return FALSE; | |
897 | } | |
898 | ||
899 | if (list1 == NULL && list2 == NULL) | |
900 | return TRUE; | |
901 | else | |
902 | return FALSE; | |
903 | } | |
904 | ||
905 | static void | |
906 | _negotiated_codecs_notify (GObject *object, GParamSpec *paramspec, | |
907 | gpointer user_data) | |
908 | { | |
909 | struct SimpleTestConference *dat = user_data; | |
910 | FsSession *session = FS_SESSION (object); | |
911 | GList *codecs = NULL; | |
912 | GError *error = NULL; | |
913 | GList *item = NULL; | |
914 | ||
915 | GST_DEBUG ("%d: New negotiated codecs", dat->id); | |
916 | ||
917 | ts_fail_if (session != dat->session, "Got signal from the wrong object"); | |
918 | ||
919 | g_object_get (dat->session, "codecs", &codecs, NULL); | |
920 | ts_fail_if (codecs == NULL, "Could not get the negotiated codecs"); | |
921 | ||
922 | ||
923 | /* We have to find the stream from the target that points back to us */ | |
924 | for (item = g_list_first (dat->streams); item; item = g_list_next (item)) | |
925 | { | |
926 | struct SimpleTestStream *st = item->data; | |
927 | struct SimpleTestStream *st2 = find_pointback_stream (st->target, dat); | |
928 | GList *rcodecs2; | |
929 | ||
930 | GST_DEBUG ("Setting negotiated remote codecs on %d:%d from %d",st2->dat->id, | |
931 | st2->target->id, dat->id); | |
932 | if (!fs_stream_set_remote_codecs (st2->stream, codecs, &error)) | |
933 | { | |
934 | if (error) | |
935 | ts_fail ("Could not set the remote codecs on stream %d:%d (%d): %s", | |
936 | st2->dat->id, st2->target->id, | |
937 | error->code, | |
938 | error->message); | |
939 | else | |
940 | ts_fail ("Could not set the remote codecs on stream %d:%d" | |
941 | " and we DID not get a GError!!", | |
942 | st2->dat->id, st2->target->id); | |
943 | } | |
944 | g_object_get (st2->stream, "remote-codecs", &rcodecs2, NULL); | |
945 | ts_fail_unless (_compare_codec_lists (rcodecs2, codecs), | |
946 | "Can not get remote codecs correctly"); | |
947 | ||
948 | fs_codec_list_destroy (rcodecs2); | |
949 | ||
950 | if (select_last_codec) | |
951 | ts_fail_unless ( | |
952 | fs_session_set_send_codec (st2->dat->session, | |
953 | g_list_last (codecs)->data, | |
954 | &error), | |
955 | "Error setting the send codec to the last codec: %s", | |
956 | error ? error->message : "No GError"); | |
957 | ||
958 | g_clear_error (&error); | |
959 | break; | |
960 | } | |
961 | fs_codec_list_destroy (codecs); | |
962 | } | |
963 | ||
964 | ||
965 | static void | |
966 | set_initial_codecs ( | |
967 | struct SimpleTestConference *from, | |
968 | struct SimpleTestStream *to) | |
969 | { | |
970 | FsCodec *codec; | |
971 | GList *codecs = NULL; | |
972 | GList *filtered_codecs = NULL; | |
973 | GList *rcodecs2 = NULL; | |
974 | GError *error = NULL; | |
975 | ||
976 | if (to->stream == NULL || from->session == NULL) | |
977 | return; | |
978 | ||
979 | g_object_get (from->session, "codecs", &codecs, NULL); | |
980 | ||
981 | ts_fail_unless (codecs == NULL, "Shouldn't generate codecs codecs"); | |
982 | ||
983 | codec = fs_codec_new (0, "audio/x-raw-int," | |
984 | "endianness=(int)1234, signed=(bool)true, " | |
985 | "width=(int)16, depth=(int)16, " | |
986 | "rate=(int)44100", FS_MEDIA_TYPE_AUDIO, 0); | |
987 | codecs = g_list_append (codecs, codec); | |
988 | ||
989 | filtered_codecs = g_list_append (filtered_codecs, codecs->data); | |
990 | ||
991 | GST_DEBUG ("Setting initial remote codecs on %d:%d from %d", | |
992 | to->dat->id, to->target->id, | |
993 | from->id); | |
994 | ||
995 | if (!fs_stream_set_remote_codecs (to->stream, filtered_codecs, &error)) | |
996 | { | |
997 | if (error) | |
998 | ts_fail ("Could not set the remote codecs on stream %d:%d (%d): %s", | |
999 | to->dat->id, to->target->id, | |
1000 | error->code, | |
1001 | error->message); | |
1002 | else | |
1003 | ts_fail ("Could not set the remote codecs on stream %d" | |
1004 | " and we DID not get a GError!!", to->target->id); | |
1005 | } | |
1006 | g_object_get (to->stream, "remote-codecs", &rcodecs2, NULL); | |
1007 | ts_fail_unless (_compare_codec_lists (rcodecs2, filtered_codecs), | |
1008 | "Can not get remote codecs correctly"); | |
1009 | fs_codec_list_destroy (rcodecs2); | |
1010 | ||
1011 | ||
1012 | if (select_last_codec) | |
1013 | ts_fail_unless ( | |
1014 | fs_session_set_send_codec (to->dat->session, | |
1015 | g_list_last (filtered_codecs)->data, | |
1016 | &error), | |
1017 | "Error setting the send codec to the last codec: %s", | |
1018 | error ? error->message : "No GError"); | |
1019 | g_clear_error (&error); | |
1020 | ||
1021 | g_list_free (filtered_codecs); | |
1022 | fs_codec_list_destroy (codecs); | |
1023 | } | |
1024 | ||
1025 | typedef void (*extra_conf_init) (struct SimpleTestConference *dat, | |
1026 | guint confid); | |
1027 | typedef void (*extra_stream_init) (struct SimpleTestStream *st, guint confid, | |
1028 | guint streamid); | |
1029 | ||
1030 | static void | |
1031 | nway_test (int in_count, extra_conf_init extra_conf_init, | |
1032 | extra_stream_init extra_stream_init, const gchar *transmitter, | |
1033 | guint st_param_count, GParameter *st_params) | |
1034 | { | |
1035 | int i, j; | |
1036 | GParameter *params = NULL; | |
1037 | ||
1038 | ||
1039 | if (!strcmp ("rawudp", transmitter)) | |
1040 | { | |
1041 | params = g_new0 (GParameter, st_param_count+2); | |
1042 | ||
1043 | memcpy (params, st_params, st_param_count * sizeof (GParameter)); | |
1044 | ||
1045 | params[st_param_count].name = "upnp-discovery"; | |
1046 | g_value_init (¶ms[st_param_count].value, G_TYPE_BOOLEAN); | |
1047 | g_value_set_boolean (¶ms[st_param_count].value, FALSE); | |
1048 | ||
1049 | params[st_param_count+1].name = "upnp-mapping"; | |
1050 | g_value_init (¶ms[st_param_count+1].value, G_TYPE_BOOLEAN); | |
1051 | g_value_set_boolean (¶ms[st_param_count+1].value, FALSE); | |
1052 | ||
1053 | st_param_count += 2; | |
1054 | st_params = params; | |
1055 | } | |
1056 | ||
1057 | count = in_count; | |
1058 | ||
1059 | loop = g_main_loop_new (NULL, FALSE); | |
1060 | ||
1061 | dats = g_new0 (struct SimpleTestConference *, count); | |
1062 | ||
1063 | for (i = 0; i < count; i++) | |
1064 | { | |
1065 | gchar *tmp = g_strdup_printf ("tester%d@hostname", i); | |
1066 | dats[i] = setup_simple_conference (i, "fsrawconference", tmp); | |
1067 | g_free (tmp); | |
1068 | ||
1069 | ||
1070 | if (extra_conf_init) | |
1071 | extra_conf_init (dats[i], i); | |
1072 | ||
1073 | rawconference_connect_signals (dats[i]); | |
1074 | g_idle_add (_start_pipeline, dats[i]); | |
1075 | ||
1076 | setup_fakesrc (dats[i]); | |
1077 | ||
1078 | if (i != 0) | |
1079 | g_signal_connect (dats[i]->session, "notify::codecs", | |
1080 | G_CALLBACK (_negotiated_codecs_notify), dats[i]); | |
1081 | } | |
1082 | ||
1083 | TEST_LOCK (); | |
1084 | ||
1085 | for (i = 0; i < count; i++) | |
1086 | for (j = 0; j < count; j++) | |
1087 | if (i != j) | |
1088 | { | |
1089 | struct SimpleTestStream *st = NULL; | |
1090 | ||
1091 | st = simple_conference_add_stream (dats[i], dats[j], transmitter, | |
1092 | st_param_count, st_params); | |
1093 | st->handoff_handler = G_CALLBACK (_handoff_handler); | |
1094 | g_signal_connect (st->stream, "src-pad-added", | |
1095 | G_CALLBACK (_src_pad_added), st); | |
1096 | ||
1097 | if (!strcmp ("shm", transmitter)) | |
1098 | { | |
1099 | FsCandidate *candidate = fs_candidate_new ("1", 1, | |
1100 | FS_CANDIDATE_TYPE_HOST, FS_NETWORK_PROTOCOL_UDP, | |
1101 | "/tmp/test-stream", 0); | |
1102 | st->candidate = fs_candidate_copy (candidate); | |
1103 | fs_stream_set_remote_candidates (st->stream, | |
1104 | g_list_prepend (NULL, candidate), NULL); | |
1105 | } | |
1106 | ||
1107 | if (extra_stream_init) | |
1108 | extra_stream_init (st, i, j); | |
1109 | } | |
1110 | ||
1111 | ||
1112 | for (i = 1; i < count; i++) | |
1113 | { | |
1114 | struct SimpleTestStream *st = find_pointback_stream (dats[i], dats[0]); | |
1115 | set_initial_codecs (dats[0], st); | |
1116 | } | |
1117 | ||
1118 | TEST_UNLOCK (); | |
1119 | ||
1120 | g_main_loop_run (loop); | |
1121 | ||
1122 | for (i = 0; i < count; i++) | |
1123 | gst_element_set_state (dats[i]->pipeline, GST_STATE_NULL); | |
1124 | ||
1125 | for (i = 0; i < count; i++) | |
1126 | cleanup_simple_conference (dats[i]); | |
1127 | ||
1128 | g_free (dats); | |
1129 | ||
1130 | g_main_loop_unref (loop); | |
1131 | ||
1132 | g_free (params); | |
1133 | } | |
1134 | ||
1135 | ||
1136 | GST_START_TEST (test_rawconference_two_way) | |
1137 | { | |
1138 | nway_test (2, NULL, NULL, "rawudp", 0, NULL); | |
1139 | } | |
1140 | GST_END_TEST; | |
1141 | ||
1142 | ||
1143 | GST_START_TEST (test_rawconference_two_way_shm) | |
1144 | { | |
1145 | nway_test (2, NULL, NULL, "shm", 0, NULL); | |
1146 | } | |
1147 | GST_END_TEST; | |
1148 | ||
1149 | ||
1150 | GST_START_TEST (test_rawconference_errors) | |
1151 | { | |
1152 | struct SimpleTestConference *dat = NULL; | |
1153 | FsParticipant *participant = NULL; | |
1154 | FsStream *stream = NULL; | |
1155 | GError *error = NULL; | |
1156 | ||
1157 | dat = setup_simple_conference (1, "fsrawconference", "bob@127.0.0.1"); | |
1158 | ||
1159 | participant = fs_conference_new_participant (FS_CONFERENCE (dat->conference), | |
1160 | "bob2@127.0.0.1", | |
1161 | NULL); | |
1162 | ts_fail_if (participant == NULL, "Could not create participant"); | |
1163 | ||
1164 | stream = fs_session_new_stream (dat->session, participant, FS_DIRECTION_NONE, | |
1165 | "invalid-transmitter-name", 0, NULL, &error); | |
1166 | ||
1167 | ts_fail_unless (stream == NULL, "A stream was created with an invalid" | |
1168 | " transmitter name"); | |
1169 | ts_fail_if (error == NULL, "Error was not set"); | |
1170 | ts_fail_unless (error->domain == FS_ERROR && | |
1171 | error->code == FS_ERROR_CONSTRUCTION, | |
1172 | "The wrong domain or code (%d) was returned", error->code); | |
1173 | ||
1174 | g_clear_error (&error); | |
1175 | ||
1176 | g_object_unref (participant); | |
1177 | ||
1178 | cleanup_simple_conference (dat); | |
1179 | ||
1180 | } | |
1181 | GST_END_TEST; | |
1182 | ||
1183 | ||
1184 | static void | |
1185 | _error_handoff_handler (GstElement *element, GstBuffer *buffer, GstPad *pad, | |
1186 | gpointer user_data) | |
1187 | { | |
1188 | ts_fail ("Received a buffer when we shouldn't have"); | |
1189 | } | |
1190 | ||
1191 | static void | |
1192 | _normal_handoff_handler (GstElement *element, GstBuffer *buffer, GstPad *pad, | |
1193 | gpointer user_data) | |
1194 | { | |
1195 | struct SimpleTestStream *st = user_data; | |
1196 | ||
1197 | st->buffer_count++; | |
1198 | ||
1199 | if (st->buffer_count > 100) | |
1200 | g_main_loop_quit (loop); | |
1201 | ||
1202 | } | |
1203 | ||
1204 | gint error_conf; | |
1205 | ||
1206 | static void | |
1207 | _recv_only_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1208 | { | |
1209 | if (confid == error_conf) | |
1210 | { | |
1211 | st->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
1212 | } | |
1213 | else | |
1214 | { | |
1215 | st->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1216 | g_object_set (st->stream, "direction", FS_DIRECTION_RECV, NULL); | |
1217 | } | |
1218 | ||
1219 | } | |
1220 | ||
1221 | GST_START_TEST (test_rawconference_recv_only) | |
1222 | { | |
1223 | error_conf = 0; | |
1224 | nway_test (2, NULL, _recv_only_init, "rawudp", 0, NULL); | |
1225 | error_conf = 1; | |
1226 | nway_test (2, NULL, _recv_only_init, "rawudp", 0, NULL); | |
1227 | } | |
1228 | GST_END_TEST; | |
1229 | ||
1230 | static void | |
1231 | _send_only_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1232 | { | |
1233 | if (confid == error_conf) | |
1234 | { | |
1235 | st->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
1236 | g_object_set (st->stream, "direction", FS_DIRECTION_SEND, NULL); | |
1237 | } | |
1238 | else | |
1239 | { | |
1240 | st->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1241 | } | |
1242 | } | |
1243 | ||
1244 | GST_START_TEST (test_rawconference_send_only) | |
1245 | { | |
1246 | error_conf = 0; | |
1247 | nway_test (2, NULL, _send_only_init, "rawudp", 0, NULL); | |
1248 | error_conf = 1; | |
1249 | nway_test (2, NULL, _send_only_init, "rawudp", 0, NULL); | |
1250 | } | |
1251 | GST_END_TEST; | |
1252 | ||
1253 | ||
1254 | ||
1255 | static void | |
1256 | _switch_handoff_handler (GstElement *element, GstBuffer *buffer, GstPad *pad, | |
1257 | gpointer user_data) | |
1258 | { | |
1259 | struct SimpleTestStream *st = user_data; | |
1260 | ||
1261 | st->buffer_count++; | |
1262 | ||
1263 | if (st->buffer_count == 20) | |
1264 | g_object_set (st->stream, "direction", FS_DIRECTION_SEND, NULL); | |
1265 | ||
1266 | if (st->buffer_count > 20) | |
1267 | ts_fail ("Received a buffer on a stream that should have been sendonly"); | |
1268 | } | |
1269 | ||
1270 | ||
1271 | static void | |
1272 | _change_to_send_only_init (struct SimpleTestStream *st, guint confid, | |
1273 | guint streamid) | |
1274 | { | |
1275 | if (confid == 0) | |
1276 | st->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1277 | else | |
1278 | st->handoff_handler = G_CALLBACK (_switch_handoff_handler); | |
1279 | } | |
1280 | ||
1281 | GST_START_TEST (test_rawconference_change_to_send_only) | |
1282 | { | |
1283 | nway_test (2, NULL, _change_to_send_only_init, "rawudp", 0, NULL); | |
1284 | } | |
1285 | GST_END_TEST; | |
1286 | ||
1287 | ||
1288 | GST_START_TEST (test_rawconference_dispose) | |
1289 | { | |
1290 | FsConference *conf; | |
1291 | FsParticipant *part; | |
1292 | FsSession *session; | |
1293 | FsStream *stream; | |
1294 | GError *error = NULL; | |
1295 | ||
1296 | conf = FS_CONFERENCE (gst_element_factory_make ("fsrawconference", NULL)); | |
1297 | fail_if (conf == NULL); | |
1298 | ||
1299 | session = fs_conference_new_session (conf, FS_MEDIA_TYPE_AUDIO, &error); | |
1300 | fail_if (session == NULL || error != NULL); | |
1301 | ||
1302 | part = fs_conference_new_participant (conf, "name@1.2.3.4", &error); | |
1303 | fail_if (part == NULL || error != NULL); | |
1304 | ||
1305 | stream = fs_session_new_stream (session, part, FS_DIRECTION_BOTH, "rawudp", | |
1306 | 0, NULL, &error); | |
1307 | fail_if (stream == NULL || error != NULL); | |
1308 | ||
1309 | g_object_run_dispose (G_OBJECT (stream)); | |
1310 | ||
1311 | fail_if (fs_stream_set_remote_candidates (stream, NULL, &error)); | |
1312 | fail_unless (error->domain == FS_ERROR && error->code == FS_ERROR_DISPOSED); | |
1313 | g_clear_error (&error); | |
1314 | ||
1315 | fail_if (fs_stream_set_remote_codecs (stream, NULL, &error)); | |
1316 | fail_unless (error->domain == FS_ERROR && error->code == FS_ERROR_DISPOSED); | |
1317 | g_clear_error (&error); | |
1318 | ||
1319 | fail_if (fs_stream_force_remote_candidates (stream, NULL, &error)); | |
1320 | fail_unless (error->domain == FS_ERROR && | |
1321 | error->code == FS_ERROR_NOT_IMPLEMENTED); | |
1322 | g_clear_error (&error); | |
1323 | ||
1324 | g_object_unref (stream); | |
1325 | ||
1326 | stream = fs_session_new_stream (session, part, FS_DIRECTION_BOTH, "rawudp", | |
1327 | 0, NULL, &error); | |
1328 | fail_if (stream == NULL || error != NULL); | |
1329 | ||
1330 | g_object_run_dispose (G_OBJECT (stream)); | |
1331 | ||
1332 | fail_if (fs_stream_set_remote_candidates (stream, NULL, &error)); | |
1333 | fail_unless (error->domain == FS_ERROR && error->code == FS_ERROR_DISPOSED); | |
1334 | g_clear_error (&error); | |
1335 | ||
1336 | fail_if (fs_stream_set_remote_codecs (stream, NULL, &error)); | |
1337 | fail_unless (error->domain == FS_ERROR && error->code == FS_ERROR_DISPOSED); | |
1338 | g_clear_error (&error); | |
1339 | ||
1340 | fail_if (fs_stream_force_remote_candidates (stream, NULL, &error)); | |
1341 | fail_unless (error->domain == FS_ERROR && | |
1342 | error->code == FS_ERROR_NOT_IMPLEMENTED); | |
1343 | g_clear_error (&error); | |
1344 | ||
1345 | g_object_run_dispose (G_OBJECT (session)); | |
1346 | ||
1347 | fail_if (fs_session_start_telephony_event (session, 1, 2, | |
1348 | FS_DTMF_METHOD_AUTO)); | |
1349 | fail_if (fs_session_stop_telephony_event (session, FS_DTMF_METHOD_AUTO)); | |
1350 | ||
1351 | fail_if (fs_session_set_send_codec (session, NULL, &error)); | |
1352 | fail_unless (error->domain == FS_ERROR && | |
1353 | error->code == FS_ERROR_NOT_IMPLEMENTED); | |
1354 | g_clear_error (&error); | |
1355 | ||
1356 | fail_if (fs_session_set_codec_preferences (session, NULL, &error)); | |
1357 | fail_unless (error->domain == FS_ERROR && | |
1358 | error->code == FS_ERROR_NOT_IMPLEMENTED); | |
1359 | g_clear_error (&error); | |
1360 | ||
1361 | g_object_unref (session); | |
1362 | g_object_unref (part); | |
1363 | g_object_unref (stream); | |
1364 | gst_object_unref (conf); | |
1365 | } | |
1366 | GST_END_TEST; | |
1367 | ||
1368 | static void unref_session_on_src_pad_added (FsStream *stream, | |
1369 | GstPad *pad, FsCodec *codec, struct SimpleTestStream *st) | |
1370 | { | |
1371 | TEST_LOCK (); | |
1372 | ||
1373 | g_object_unref (st->dat->session); | |
1374 | st->dat->session = NULL; | |
1375 | g_object_unref (st->stream); | |
1376 | st->stream = NULL; | |
1377 | ||
1378 | TEST_UNLOCK (); | |
1379 | ||
1380 | g_main_loop_quit (loop); | |
1381 | } | |
1382 | ||
1383 | static void unref_session_init (struct SimpleTestStream *st, guint confid, | |
1384 | guint streamid) | |
1385 | { | |
1386 | g_signal_connect (st->stream, "src-pad-added", | |
1387 | G_CALLBACK (unref_session_on_src_pad_added), st); | |
1388 | } | |
1389 | ||
1390 | GST_START_TEST (test_rawconference_unref_session_in_pad_added) | |
1391 | { | |
1392 | nway_test (2, NULL, unref_session_init, "rawudp", 0, NULL); | |
1393 | } | |
1394 | GST_END_TEST; | |
1395 | ||
1396 | static const gchar *signal_name; | |
1397 | ||
1398 | static GstBusSyncReply | |
1399 | unref_stream_sync_handler (GstBus *bus, GstMessage *message, | |
1400 | gpointer data) | |
1401 | { | |
1402 | struct SimpleTestConference *dat = data; | |
1403 | const GstStructure *s; | |
1404 | FsStream *stream; | |
1405 | const GValue *v; | |
1406 | GList *item; | |
1407 | ||
1408 | if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT) | |
1409 | return GST_BUS_PASS; | |
1410 | ||
1411 | s = gst_message_get_structure (message); | |
1412 | ||
1413 | if (!gst_structure_has_name (s, signal_name)) | |
1414 | return GST_BUS_PASS; | |
1415 | ||
1416 | v = gst_structure_get_value (s, "stream"); | |
1417 | ts_fail_unless (G_VALUE_HOLDS (v, FS_TYPE_STREAM)); | |
1418 | stream = g_value_get_object (v); | |
1419 | ||
1420 | TEST_LOCK (); | |
1421 | ||
1422 | for (item = dat->streams; item; item = item->next) | |
1423 | { | |
1424 | struct SimpleTestStream *st = item->data; | |
1425 | if (st->stream == stream) | |
1426 | { | |
1427 | g_object_unref (stream); | |
1428 | st->stream = NULL; | |
1429 | gst_message_unref (message); | |
1430 | g_main_loop_quit (loop); | |
1431 | TEST_UNLOCK (); | |
1432 | return GST_BUS_DROP; | |
1433 | } | |
1434 | } | |
1435 | ||
1436 | TEST_UNLOCK (); | |
1437 | ||
1438 | gst_message_unref (message); | |
1439 | return GST_BUS_DROP; | |
1440 | } | |
1441 | ||
1442 | static void unref_stream_init (struct SimpleTestConference *dat, guint confid) | |
1443 | { | |
1444 | GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (dat->pipeline)); | |
1445 | ||
1446 | gst_bus_set_sync_handler (bus, NULL, NULL); | |
1447 | gst_bus_set_sync_handler (bus, unref_stream_sync_handler, dat); | |
1448 | gst_object_unref (bus); | |
1449 | } | |
1450 | ||
1451 | GST_START_TEST (test_rawconference_unref_stream_in_nice_thread_prepared) | |
1452 | { | |
1453 | signal_name = "farsight-local-candidates-prepared"; | |
1454 | nway_test (2, unref_stream_init, NULL, "nice", 0, NULL); | |
1455 | } | |
1456 | GST_END_TEST; | |
1457 | ||
1458 | GST_START_TEST (test_rawconference_unref_stream_in_nice_thread_new_active) | |
1459 | { | |
1460 | signal_name = "farsight-new-active-candidate-pair"; | |
1461 | nway_test (2, unref_stream_init, NULL, "nice", 0, NULL); | |
1462 | } | |
1463 | GST_END_TEST; | |
1464 | ||
1465 | GST_START_TEST (test_rawconference_unref_stream_in_nice_thread_state_changed) | |
1466 | { | |
1467 | signal_name = "farsight-component-state-changed"; | |
1468 | nway_test (2, unref_stream_init, NULL, "nice", 0, NULL); | |
1469 | } | |
1470 | GST_END_TEST; | |
1471 | ||
1472 | ||
1473 | static Suite * | |
1474 | fsrawconference_suite (void) | |
1475 | { | |
1476 | Suite *s = suite_create ("fsrawconference"); | |
1477 | TCase *tc_chain; | |
1478 | GLogLevelFlags fatal_mask; | |
1479 | ||
1480 | fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK); | |
1481 | fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL; | |
1482 | g_log_set_always_fatal (fatal_mask); | |
1483 | ||
1484 | tc_chain = tcase_create ("fsrawconference_base"); | |
1485 | tcase_add_test (tc_chain, test_rawconference_new); | |
1486 | suite_add_tcase (s, tc_chain); | |
1487 | ||
1488 | tc_chain = tcase_create ("fsrawconference_two_way"); | |
1489 | tcase_add_test (tc_chain, test_rawconference_two_way); | |
1490 | suite_add_tcase (s, tc_chain); | |
1491 | ||
1492 | tc_chain = tcase_create ("fsrawconference_two_way_shm"); | |
1493 | tcase_add_test (tc_chain, test_rawconference_two_way_shm); | |
1494 | suite_add_tcase (s, tc_chain); | |
1495 | ||
1496 | tc_chain = tcase_create ("fsrawconference_errors"); | |
1497 | tcase_add_test (tc_chain, test_rawconference_errors); | |
1498 | suite_add_tcase (s, tc_chain); | |
1499 | ||
1500 | tc_chain = tcase_create ("fsrawconference_recv_only"); | |
1501 | tcase_add_test (tc_chain, test_rawconference_recv_only); | |
1502 | suite_add_tcase (s, tc_chain); | |
1503 | ||
1504 | tc_chain = tcase_create ("fsrawconference_send_only"); | |
1505 | tcase_add_test (tc_chain, test_rawconference_send_only); | |
1506 | suite_add_tcase (s, tc_chain); | |
1507 | ||
1508 | tc_chain = tcase_create ("fsrawconference_change_to_send_only"); | |
1509 | tcase_add_test (tc_chain, test_rawconference_change_to_send_only); | |
1510 | suite_add_tcase (s, tc_chain); | |
1511 | ||
1512 | tc_chain = tcase_create ("fsrawconference_dispose"); | |
1513 | tcase_add_test (tc_chain, test_rawconference_dispose); | |
1514 | suite_add_tcase (s, tc_chain); | |
1515 | ||
1516 | tc_chain = tcase_create ("fsrawconference_unref_session_in_pad_added"); | |
1517 | tcase_add_test (tc_chain, test_rawconference_unref_session_in_pad_added); | |
1518 | suite_add_tcase (s, tc_chain); | |
1519 | ||
1520 | tc_chain = tcase_create ( | |
1521 | "fsrawconference_unref_stream_in_nice_thread_prepared"); | |
1522 | tcase_add_test (tc_chain, | |
1523 | test_rawconference_unref_stream_in_nice_thread_prepared); | |
1524 | suite_add_tcase (s, tc_chain); | |
1525 | ||
1526 | tc_chain = tcase_create ( | |
1527 | "fsrawconference_unref_stream_in_nice_thread_new_active"); | |
1528 | tcase_add_test (tc_chain, | |
1529 | test_rawconference_unref_stream_in_nice_thread_new_active); | |
1530 | suite_add_tcase (s, tc_chain); | |
1531 | ||
1532 | tc_chain = tcase_create ( | |
1533 | "fsrawconference_unref_stream_in_nice_thread_state_changed"); | |
1534 | tcase_add_test (tc_chain, | |
1535 | test_rawconference_unref_stream_in_nice_thread_state_changed); | |
1536 | suite_add_tcase (s, tc_chain); | |
1537 | return s; | |
1538 | } | |
1539 | ||
1540 | GST_CHECK_MAIN (fsrawconference); |
143 | 143 | "SimpleTestStream"); |
144 | 144 | gboolean ret; |
145 | 145 | GError *error = NULL; |
146 | struct SimpleTestStream *other_st = find_pointback_stream (st->target, | |
147 | st->dat); | |
146 | struct SimpleTestStream *other_st; | |
148 | 147 | GList *candidates = NULL; |
149 | 148 | |
150 | if (candidate->component_id == FS_COMPONENT_RTCP && no_rtcp) | |
149 | TEST_LOCK (); | |
150 | ||
151 | if (st->target == NULL) | |
152 | { | |
153 | TEST_UNLOCK (); | |
151 | 154 | return; |
155 | } | |
156 | ||
157 | other_st = find_pointback_stream (st->target, st->dat); | |
158 | if (other_st->stream == NULL || | |
159 | (candidate->component_id == FS_COMPONENT_RTCP && no_rtcp)) | |
160 | { | |
161 | TEST_UNLOCK (); | |
162 | return; | |
163 | } | |
152 | 164 | |
153 | 165 | st->got_candidates = TRUE; |
154 | 166 | |
167 | 179 | |
168 | 180 | ts_fail_unless (ret == TRUE, "No detailed error from add_remote_candidate"); |
169 | 181 | |
182 | TEST_UNLOCK (); | |
170 | 183 | } |
171 | 184 | |
172 | 185 | static void |
772 | 785 | fs_codec_list_destroy (codecs); |
773 | 786 | } |
774 | 787 | |
775 | typedef void (*extra_init) (void); | |
776 | ||
777 | static void | |
778 | nway_test (int in_count, extra_init extrainit, const gchar *transmitter, | |
788 | typedef void (*extra_conf_init) (struct SimpleTestConference *dat, | |
789 | guint confid); | |
790 | typedef void (*extra_stream_init) (struct SimpleTestStream *st, guint confid, | |
791 | guint streamid); | |
792 | ||
793 | static void | |
794 | nway_test (int in_count, extra_conf_init extra_conf_init, | |
795 | extra_stream_init extra_stream_init, const gchar *transmitter, | |
779 | 796 | guint st_param_count, GParameter *st_params) |
780 | 797 | { |
781 | 798 | int i, j; |
813 | 830 | g_free (tmp); |
814 | 831 | |
815 | 832 | g_object_set (G_OBJECT (dats[i]->session), "no-rtcp-timeout", -1, NULL); |
833 | ||
834 | ||
835 | if (extra_conf_init) | |
836 | extra_conf_init (dats[i], i); | |
816 | 837 | |
817 | 838 | rtpconference_connect_signals (dats[i]); |
818 | 839 | g_idle_add (_start_pipeline, dats[i]); |
837 | 858 | st->handoff_handler = G_CALLBACK (_handoff_handler); |
838 | 859 | g_signal_connect (st->stream, "src-pad-added", |
839 | 860 | G_CALLBACK (_src_pad_added), st); |
861 | if (extra_stream_init) | |
862 | extra_stream_init (st, i, j); | |
840 | 863 | } |
841 | 864 | |
842 | if (extrainit) | |
843 | extrainit (); | |
844 | 865 | |
845 | 866 | for (i = 1; i < count; i++) |
846 | 867 | { |
868 | 889 | |
869 | 890 | GST_START_TEST (test_rtpconference_two_way) |
870 | 891 | { |
871 | nway_test (2, NULL, "rawudp", 0, NULL); | |
892 | nway_test (2, NULL, NULL, "rawudp", 0, NULL); | |
872 | 893 | } |
873 | 894 | GST_END_TEST; |
874 | 895 | |
875 | 896 | |
876 | 897 | GST_START_TEST (test_rtpconference_three_way) |
877 | 898 | { |
878 | nway_test (3, NULL, "rawudp", 0, NULL); | |
899 | nway_test (3, NULL, NULL, "rawudp", 0, NULL); | |
879 | 900 | } |
880 | 901 | GST_END_TEST; |
881 | 902 | |
882 | 903 | |
883 | 904 | GST_START_TEST (test_rtpconference_ten_way) |
884 | 905 | { |
885 | nway_test (10, NULL, "rawudp", 0, NULL); | |
906 | nway_test (10, NULL, NULL, "rawudp", 0, NULL); | |
886 | 907 | } |
887 | 908 | GST_END_TEST; |
888 | 909 | |
925 | 946 | { |
926 | 947 | select_last_codec = TRUE; |
927 | 948 | max_src_pads = 2; |
928 | nway_test (2, NULL, "rawudp", 0, NULL); | |
949 | nway_test (2, NULL, NULL, "rawudp", 0, NULL); | |
929 | 950 | select_last_codec = FALSE; |
930 | 951 | max_src_pads = 1; |
931 | 952 | } |
936 | 957 | { |
937 | 958 | reset_to_last_codec = TRUE; |
938 | 959 | max_src_pads = 2; |
939 | nway_test (2, NULL, "rawudp", 0, NULL); | |
960 | nway_test (2, NULL, NULL, "rawudp", 0, NULL); | |
940 | 961 | reset_to_last_codec = FALSE; |
941 | 962 | max_src_pads = 1; |
942 | 963 | } |
963 | 984 | |
964 | 985 | } |
965 | 986 | |
966 | static void | |
967 | _recv_only_init_1 (void) | |
968 | { | |
969 | struct SimpleTestStream *st1 = dats[0]->streams->data; | |
970 | struct SimpleTestStream *st2 = dats[1]->streams->data; | |
971 | ||
972 | st1->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
973 | st2->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
974 | ||
975 | g_object_set (st2->stream, "direction", FS_DIRECTION_RECV, NULL); | |
976 | } | |
977 | ||
978 | ||
979 | static void | |
980 | _recv_only_init_2 (void) | |
981 | { | |
982 | struct SimpleTestStream *st1 = dats[0]->streams->data; | |
983 | struct SimpleTestStream *st2 = dats[1]->streams->data; | |
984 | ||
985 | st1->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
986 | st2->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
987 | ||
988 | g_object_set (st1->stream, "direction", FS_DIRECTION_RECV, NULL); | |
987 | gint error_conf; | |
988 | ||
989 | static void | |
990 | _recv_only_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
991 | { | |
992 | if (confid == error_conf) | |
993 | { | |
994 | st->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
995 | } | |
996 | else | |
997 | { | |
998 | st->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
999 | g_object_set (st->stream, "direction", FS_DIRECTION_RECV, NULL); | |
1000 | } | |
989 | 1001 | } |
990 | 1002 | |
991 | 1003 | GST_START_TEST (test_rtpconference_recv_only) |
992 | 1004 | { |
993 | nway_test (2, _recv_only_init_1, "rawudp", 0, NULL); | |
994 | nway_test (2, _recv_only_init_2, "rawudp", 0, NULL); | |
995 | } | |
996 | GST_END_TEST; | |
997 | ||
998 | static void | |
999 | _send_only_init_1 (void) | |
1000 | { | |
1001 | struct SimpleTestStream *st1 = dats[0]->streams->data; | |
1002 | struct SimpleTestStream *st2 = dats[1]->streams->data; | |
1003 | ||
1004 | st1->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
1005 | st2->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1006 | ||
1007 | g_object_set (st1->stream, "direction", FS_DIRECTION_SEND, NULL); | |
1008 | } | |
1009 | ||
1010 | static void | |
1011 | _send_only_init_2 (void) | |
1012 | { | |
1013 | struct SimpleTestStream *st1 = dats[0]->streams->data; | |
1014 | struct SimpleTestStream *st2 = dats[1]->streams->data; | |
1015 | ||
1016 | st1->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1017 | st2->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
1018 | ||
1019 | g_object_set (st2->stream, "direction", FS_DIRECTION_SEND, NULL); | |
1005 | error_conf = 0; | |
1006 | nway_test (2, NULL, _recv_only_init, "rawudp", 0, NULL); | |
1007 | error_conf = 1; | |
1008 | nway_test (2, NULL, _recv_only_init, "rawudp", 0, NULL); | |
1009 | } | |
1010 | GST_END_TEST; | |
1011 | ||
1012 | ||
1013 | static void | |
1014 | _send_only_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1015 | { | |
1016 | if (confid == error_conf) | |
1017 | { | |
1018 | st->handoff_handler = G_CALLBACK (_error_handoff_handler); | |
1019 | g_object_set (st->stream, "direction", FS_DIRECTION_SEND, NULL); | |
1020 | } | |
1021 | else | |
1022 | { | |
1023 | st->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1024 | } | |
1020 | 1025 | } |
1021 | 1026 | |
1022 | 1027 | GST_START_TEST (test_rtpconference_send_only) |
1023 | 1028 | { |
1024 | nway_test (2, _send_only_init_1, "rawudp", 0, NULL); | |
1025 | nway_test (2, _send_only_init_2, "rawudp", 0, NULL); | |
1026 | } | |
1027 | GST_END_TEST; | |
1028 | ||
1029 | ||
1029 | error_conf = 0; | |
1030 | nway_test (2, NULL, _send_only_init, "rawudp", 0, NULL); | |
1031 | error_conf = 1; | |
1032 | nway_test (2, NULL, _send_only_init, "rawudp", 0, NULL); | |
1033 | } | |
1034 | GST_END_TEST; | |
1030 | 1035 | |
1031 | 1036 | static void |
1032 | 1037 | _switch_handoff_handler (GstElement *element, GstBuffer *buffer, GstPad *pad, |
1045 | 1050 | |
1046 | 1051 | |
1047 | 1052 | static void |
1048 | _change_to_send_only_init (void) | |
1049 | { | |
1050 | struct SimpleTestStream *st1 = dats[0]->streams->data; | |
1051 | struct SimpleTestStream *st2 = dats[1]->streams->data; | |
1052 | ||
1053 | st1->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1054 | st2->handoff_handler = G_CALLBACK (_switch_handoff_handler); | |
1053 | _change_to_send_only_init (struct SimpleTestStream *st, guint confid, | |
1054 | guint streamid) | |
1055 | { | |
1056 | if (confid == 0) | |
1057 | st->handoff_handler = G_CALLBACK (_normal_handoff_handler); | |
1058 | else | |
1059 | st->handoff_handler = G_CALLBACK (_switch_handoff_handler); | |
1055 | 1060 | } |
1056 | 1061 | |
1057 | 1062 | GST_START_TEST (test_rtpconference_change_to_send_only) |
1058 | 1063 | { |
1059 | nway_test (2, _change_to_send_only_init, "rawudp", 0, NULL); | |
1064 | nway_test (2, NULL, _change_to_send_only_init, "rawudp", 0, NULL); | |
1060 | 1065 | } |
1061 | 1066 | GST_END_TEST; |
1062 | 1067 | |
1065 | 1070 | { |
1066 | 1071 | no_rtcp = TRUE; |
1067 | 1072 | |
1068 | nway_test (2, NULL, "rawudp", 0, NULL); | |
1073 | nway_test (2, NULL, NULL, "rawudp", 0, NULL); | |
1069 | 1074 | |
1070 | 1075 | no_rtcp = FALSE; |
1071 | 1076 | } |
1075 | 1080 | |
1076 | 1081 | #if 0 |
1077 | 1082 | static void |
1078 | associate_cnames_init (void) | |
1079 | { | |
1080 | int i; | |
1081 | ||
1082 | for (i = 0; i < 3; i++) | |
1083 | { | |
1084 | GList *item; | |
1085 | for (item = dats[i]->streams; item; item = item->next) | |
1086 | { | |
1087 | struct SimpleTestStream *st = item->data; | |
1088 | ||
1089 | g_object_set (st->participant, "cname", st->target->cname, NULL); | |
1090 | } | |
1091 | } | |
1083 | associate_cnames_init (struct SimpleTestStream *st, guint confid, | |
1084 | guint streamid) | |
1085 | { | |
1086 | g_object_set (st->participant, "cname", st->target->cname, NULL); | |
1092 | 1087 | } |
1093 | 1088 | |
1094 | 1089 | GST_START_TEST (test_rtpconference_three_way_cname_assoc) |
1099 | 1094 | g_value_init (¶m.value, G_TYPE_BOOLEAN); |
1100 | 1095 | g_value_set_boolean (¶m.value, FALSE); |
1101 | 1096 | |
1102 | nway_test (3, associate_cnames_init, "rawudp", 1, ¶m); | |
1097 | nway_test (3, NULL, associate_cnames_init, "rawudp", 1, ¶m); | |
1103 | 1098 | } |
1104 | 1099 | GST_END_TEST; |
1105 | 1100 | |
1107 | 1102 | |
1108 | 1103 | |
1109 | 1104 | static void |
1110 | _simple_profile_init (void) | |
1111 | { | |
1112 | struct SimpleTestStream *st1 = dats[0]->streams->data; | |
1113 | struct SimpleTestStream *st2 = dats[1]->streams->data; | |
1105 | _simple_profile_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1106 | { | |
1114 | 1107 | GList *prefs = NULL; |
1115 | 1108 | FsCodec *codec = NULL; |
1116 | 1109 | gboolean ret; |
1120 | 1113 | "audioconvert ! audioresample ! audioconvert ! mulawenc ! rtppcmupay"); |
1121 | 1114 | prefs = g_list_append (NULL, codec); |
1122 | 1115 | |
1123 | ret = fs_session_set_codec_preferences (st1->dat->session, prefs, | |
1116 | ret = fs_session_set_codec_preferences (st->dat->session, prefs, | |
1124 | 1117 | NULL); |
1125 | 1118 | ts_fail_unless (ret, "set codec prefs"); |
1126 | ret = fs_session_set_codec_preferences (st2->dat->session, prefs, | |
1127 | NULL); | |
1128 | ts_fail_unless (ret, "set codec prefs"); | |
1129 | 1119 | |
1130 | 1120 | fs_codec_list_destroy (prefs); |
1131 | 1121 | |
1134 | 1124 | |
1135 | 1125 | GST_START_TEST (test_rtpconference_simple_profile) |
1136 | 1126 | { |
1137 | nway_test (2, _simple_profile_init, "rawudp", 0, NULL); | |
1127 | nway_test (2, NULL, _simple_profile_init, "rawudp", 0, NULL); | |
1138 | 1128 | } |
1139 | 1129 | GST_END_TEST; |
1140 | 1130 | |
1192 | 1182 | } |
1193 | 1183 | |
1194 | 1184 | static void |
1195 | _double_profile_init (void) | |
1196 | { | |
1197 | struct SimpleTestStream *st1 = dats[0]->streams->data; | |
1198 | struct SimpleTestStream *st2 = dats[1]->streams->data; | |
1185 | _double_profile_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1186 | { | |
1199 | 1187 | GList *prefs = NULL; |
1200 | 1188 | FsCodec *codec = NULL; |
1201 | 1189 | gboolean ret; |
1202 | 1190 | |
1203 | st1->handoff_handler = G_CALLBACK (_double_codec_handoff_handler); | |
1204 | st2->handoff_handler = G_CALLBACK (_double_codec_handoff_handler); | |
1191 | st->handoff_handler = G_CALLBACK (_double_codec_handoff_handler); | |
1205 | 1192 | |
1206 | 1193 | codec = fs_codec_new (0, "PCMU", FS_MEDIA_TYPE_AUDIO, 8000); |
1207 | 1194 | fs_codec_add_optional_parameter (codec, "farsight-send-profile", |
1210 | 1197 | "t. ! audioconvert ! audioresample ! audioconvert ! alawenc ! rtppcmapay"); |
1211 | 1198 | prefs = g_list_append (NULL, codec); |
1212 | 1199 | |
1213 | ret = fs_session_set_codec_preferences (st1->dat->session, prefs, | |
1214 | NULL); | |
1200 | ret = fs_session_set_codec_preferences (st->dat->session, prefs, NULL); | |
1215 | 1201 | ts_fail_unless (ret, "set codec prefs"); |
1216 | 1202 | |
1217 | ret = fs_session_set_codec_preferences (st2->dat->session, prefs, | |
1218 | NULL); | |
1219 | ts_fail_unless (ret, "set codec prefs"); | |
1220 | ||
1221 | 1203 | fs_codec_list_destroy (prefs); |
1222 | 1204 | } |
1223 | 1205 | |
1224 | 1206 | GST_START_TEST (test_rtpconference_double_codec_profile) |
1225 | 1207 | { |
1226 | 1208 | max_src_pads = 2; |
1227 | nway_test (2, _double_profile_init, "rawudp", 0, NULL); | |
1209 | nway_test (2, NULL, _double_profile_init, "rawudp", 0, NULL); | |
1228 | 1210 | max_src_pads = 1; |
1229 | 1211 | } |
1230 | 1212 | GST_END_TEST; |
1306 | 1288 | } |
1307 | 1289 | GST_END_TEST; |
1308 | 1290 | |
1309 | static guint mcast_confs; | |
1310 | ||
1311 | static void | |
1312 | multicast_init(void) | |
1313 | { | |
1314 | guint i; | |
1291 | static void | |
1292 | multicast_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1293 | { | |
1315 | 1294 | GList *candidates = NULL; |
1316 | 1295 | FsCandidate *cand; |
1296 | GError *error = NULL; | |
1317 | 1297 | |
1318 | 1298 | cand = fs_candidate_new ("1", FS_COMPONENT_RTP, |
1319 | 1299 | FS_CANDIDATE_TYPE_MULTICAST, FS_NETWORK_PROTOCOL_UDP, "224.0.0.11", |
1326 | 1306 | cand->port = 2325; |
1327 | 1307 | candidates = g_list_prepend (candidates, cand); |
1328 | 1308 | |
1329 | for (i = 0; i < mcast_confs; i++) | |
1330 | { | |
1331 | GList *item; | |
1332 | ||
1333 | for (item = dats[i]->streams; item; item = item->next) | |
1334 | { | |
1335 | struct SimpleTestStream *st = item->data; | |
1336 | GError *error = NULL; | |
1337 | ||
1338 | ts_fail_unless (fs_stream_set_remote_candidates (st->stream, candidates, | |
1339 | &error), "Error %s", error ? error->message : "No GError"); | |
1340 | } | |
1341 | } | |
1309 | ||
1310 | ts_fail_unless (fs_stream_set_remote_candidates (st->stream, candidates, | |
1311 | &error), "Error %s", error ? error->message : "No GError"); | |
1342 | 1312 | |
1343 | 1313 | fs_candidate_list_destroy (candidates); |
1344 | 1314 | } |
1346 | 1316 | #if 0 |
1347 | 1317 | |
1348 | 1318 | static void |
1349 | multicast_cname_init(void) | |
1350 | { | |
1351 | associate_cnames_init (); | |
1352 | multicast_init(); | |
1319 | multicast_cname_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1320 | { | |
1321 | associate_cnames_init (st, confid, streamid); | |
1322 | multicast_init (st, confid, streamid); | |
1353 | 1323 | } |
1354 | 1324 | |
1355 | 1325 | |
1361 | 1331 | return; |
1362 | 1332 | g_free (mcast_addr); |
1363 | 1333 | |
1364 | mcast_confs = 3; | |
1365 | nway_test (mcast_confs, multicast_cname_init, "multicast", 0, NULL); | |
1334 | nway_test (3, NULL, multicast_cname_init, "multicast", 0, NULL); | |
1366 | 1335 | } |
1367 | 1336 | GST_END_TEST; |
1368 | 1337 | |
1378 | 1347 | } |
1379 | 1348 | |
1380 | 1349 | static void |
1381 | multicast_ssrc_init(void) | |
1382 | { | |
1383 | int i; | |
1384 | ||
1385 | multicast_init(); | |
1386 | ||
1387 | for (i = 0; i < mcast_confs; i++) | |
1388 | { | |
1389 | GList *item; | |
1390 | ||
1391 | for (item = dats[i]->streams; item; item = item->next) | |
1392 | { | |
1393 | struct SimpleTestStream *st = item->data; | |
1394 | guint ssrc; | |
1395 | ||
1396 | g_object_get (st->target->session, "ssrc", &ssrc, NULL); | |
1397 | fs_stream_add_id (st->stream, ssrc); | |
1398 | g_signal_connect (st->target->session, "notify::ssrc", | |
1399 | G_CALLBACK (add_ssrc_cb), st->stream); | |
1400 | } | |
1401 | } | |
1350 | multicast_ssrc_init (struct SimpleTestStream *st, guint confid, guint streamid) | |
1351 | { | |
1352 | guint ssrc; | |
1353 | ||
1354 | multicast_init (st, confid, streamid); | |
1355 | ||
1356 | g_object_get (st->target->session, "ssrc", &ssrc, NULL); | |
1357 | fs_stream_add_id (st->stream, ssrc); | |
1358 | g_signal_connect (st->target->session, "notify::ssrc", | |
1359 | G_CALLBACK (add_ssrc_cb), st->stream); | |
1402 | 1360 | } |
1403 | 1361 | |
1404 | 1362 | |
1410 | 1368 | return; |
1411 | 1369 | g_free (mcast_addr); |
1412 | 1370 | |
1413 | mcast_confs = 3; | |
1414 | 1371 | max_src_pads = 3; |
1415 | nway_test (mcast_confs, multicast_ssrc_init, "multicast", 0, NULL); | |
1372 | nway_test (3, NULL, multicast_ssrc_init, "multicast", 0, NULL); | |
1416 | 1373 | max_src_pads = 1; |
1417 | 1374 | } |
1418 | 1375 | GST_END_TEST; |
1446 | 1403 | g_main_loop_quit (loop); |
1447 | 1404 | } |
1448 | 1405 | |
1449 | static void unref_session_init (void) | |
1450 | { | |
1451 | gint i; | |
1452 | ||
1453 | for (i=0 ; i < 2; i++) | |
1454 | { | |
1455 | GList *item; | |
1456 | ||
1457 | for (item = dats[i]->streams; item; item = item->next) | |
1458 | { | |
1459 | struct SimpleTestStream *st = item->data; | |
1460 | ||
1461 | g_signal_connect (st->stream, "src-pad-added", | |
1462 | G_CALLBACK (unref_session_on_src_pad_added), st); | |
1463 | } | |
1464 | } | |
1406 | static void unref_session_init (struct SimpleTestStream *st, guint confid, | |
1407 | guint streamid) | |
1408 | { | |
1409 | g_signal_connect (st->stream, "src-pad-added", | |
1410 | G_CALLBACK (unref_session_on_src_pad_added), st); | |
1465 | 1411 | } |
1466 | 1412 | |
1467 | 1413 | GST_START_TEST (test_rtpconference_unref_session_in_pad_added) |
1468 | 1414 | { |
1469 | nway_test (2, unref_session_init, "rawudp", 0, NULL); | |
1415 | nway_test (2, NULL, unref_session_init, "rawudp", 0, NULL); | |
1470 | 1416 | } |
1471 | 1417 | GST_END_TEST; |
1472 | 1418 | |
1516 | 1462 | return GST_BUS_DROP; |
1517 | 1463 | } |
1518 | 1464 | |
1519 | static void unref_stream_init (void) | |
1520 | { | |
1521 | gint i; | |
1522 | ||
1523 | for (i=0 ; i < 2; i++) | |
1524 | { | |
1525 | GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (dats[i]->pipeline)); | |
1526 | ||
1527 | gst_bus_set_sync_handler (bus, NULL, NULL); | |
1528 | gst_bus_set_sync_handler (bus, unref_stream_sync_handler, dats[i]); | |
1529 | gst_object_unref (bus); | |
1530 | } | |
1465 | static void unref_stream_init (struct SimpleTestConference *dat, guint confid) | |
1466 | { | |
1467 | GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (dat->pipeline)); | |
1468 | ||
1469 | gst_bus_set_sync_handler (bus, NULL, NULL); | |
1470 | gst_bus_set_sync_handler (bus, unref_stream_sync_handler, dat); | |
1471 | gst_object_unref (bus); | |
1531 | 1472 | } |
1532 | 1473 | |
1533 | 1474 | GST_START_TEST (test_rtpconference_unref_stream_in_nice_thread_prepared) |
1534 | 1475 | { |
1535 | 1476 | signal_name = "farsight-local-candidates-prepared"; |
1536 | nway_test (2, unref_stream_init, "nice", 0, NULL); | |
1477 | nway_test (2, unref_stream_init, NULL, "nice", 0, NULL); | |
1537 | 1478 | } |
1538 | 1479 | GST_END_TEST; |
1539 | 1480 | |
1540 | 1481 | GST_START_TEST (test_rtpconference_unref_stream_in_nice_thread_new_active) |
1541 | 1482 | { |
1542 | 1483 | signal_name = "farsight-new-active-candidate-pair"; |
1543 | nway_test (2, unref_stream_init, "nice", 0, NULL); | |
1484 | nway_test (2, unref_stream_init, NULL, "nice", 0, NULL); | |
1544 | 1485 | } |
1545 | 1486 | GST_END_TEST; |
1546 | 1487 | |
1547 | 1488 | GST_START_TEST (test_rtpconference_unref_stream_in_nice_thread_state_changed) |
1548 | 1489 | { |
1549 | 1490 | signal_name = "farsight-component-state-changed"; |
1550 | nway_test (2, unref_stream_init, "nice", 0, NULL); | |
1491 | nway_test (2, unref_stream_init, NULL, "nice", 0, NULL); | |
1551 | 1492 | } |
1552 | 1493 | GST_END_TEST; |
1553 | 1494 |
99 | 99 | |
100 | 100 | volatile gint associate_on_source; |
101 | 101 | |
102 | gboolean *component_has_been_ready; /* only from NiceAgent main thread */ | |
103 | ||
102 | 104 | /* Everything below is protected by the mutex */ |
103 | 105 | |
104 | 106 | gboolean sending; |
105 | 107 | |
106 | 108 | gboolean forced_candidates; |
107 | 109 | GList *remote_candidates; |
110 | GList *local_candidates; | |
108 | 111 | |
109 | 112 | /* These are fixed and must be identical in the latest draft */ |
110 | 113 | gchar *username; |
438 | 441 | fs_candidate_list_destroy (self->priv->preferred_local_candidates); |
439 | 442 | |
440 | 443 | fs_candidate_list_destroy (self->priv->remote_candidates); |
444 | fs_candidate_list_destroy (self->priv->local_candidates); | |
441 | 445 | |
442 | 446 | if (self->priv->relay_info) |
443 | 447 | g_value_array_free (self->priv->relay_info); |
448 | 452 | |
449 | 453 | g_free (self->priv->username); |
450 | 454 | g_free (self->priv->password); |
455 | ||
456 | g_free (self->priv->component_has_been_ready); | |
451 | 457 | |
452 | 458 | parent_class->finalize (object); |
453 | 459 | } |
1316 | 1322 | } |
1317 | 1323 | |
1318 | 1324 | FS_PARTICIPANT_DATA_UNLOCK (participant); |
1325 | ||
1326 | self->priv->component_has_been_ready = g_new0 (gboolean, | |
1327 | self->priv->transmitter->components); | |
1319 | 1328 | |
1320 | 1329 | self->priv->stream_id = nice_agent_add_stream ( |
1321 | 1330 | self->priv->agent->agent, |
1468 | 1477 | gpointer user_data) |
1469 | 1478 | { |
1470 | 1479 | FsNiceStreamTransmitter *self = FS_NICE_STREAM_TRANSMITTER (user_data); |
1471 | FsStreamState fs_state = nice_component_state_to_fs_stream_state (state); | |
1472 | struct state_changed_signal_data *data = | |
1473 | g_slice_new (struct state_changed_signal_data); | |
1480 | FsStreamState fs_state; | |
1481 | struct state_changed_signal_data *data; | |
1474 | 1482 | |
1475 | 1483 | if (stream_id != self->priv->stream_id) |
1476 | 1484 | return; |
1485 | ||
1486 | /* Ignore failed until we've connected, never time out because | |
1487 | * of the dribbling case, more candidates could come later | |
1488 | */ | |
1489 | if (state == NICE_COMPONENT_STATE_FAILED && | |
1490 | !self->priv->component_has_been_ready[component_id]) | |
1491 | return; | |
1492 | else if (state == NICE_COMPONENT_STATE_READY) | |
1493 | self->priv->component_has_been_ready[component_id] = TRUE; | |
1494 | ||
1495 | fs_state = nice_component_state_to_fs_stream_state (state); | |
1496 | data = g_slice_new (struct state_changed_signal_data); | |
1477 | 1497 | |
1478 | 1498 | GST_DEBUG ("Stream: %u Component %u has state %u", |
1479 | 1499 | self->priv->stream_id, component_id, state); |
1623 | 1643 | |
1624 | 1644 | if (fscandidate) |
1625 | 1645 | { |
1626 | struct candidate_signal_data *data = | |
1627 | g_slice_new (struct candidate_signal_data); | |
1628 | data->self = g_object_ref (self); | |
1629 | data->signal_name = "new-local-candidate"; | |
1630 | data->candidate1 = fscandidate; | |
1631 | data->candidate2 = NULL; | |
1632 | fs_nice_agent_add_idle (self->priv->agent, agent_candidate_signal_idle, | |
1646 | FS_NICE_STREAM_TRANSMITTER_LOCK (self); | |
1647 | if (!self->priv->gathered) | |
1648 | { | |
1649 | /* Nice doesn't do connchecks while gathering, so don't tell the upper | |
1650 | * layers about the candidates untill gathering is finished. | |
1651 | * Also older versions of farsight would fail the connection right away | |
1652 | * when the first candidate given failed immediately (e.g. ipv6 on a | |
1653 | * non-ipv6 capable host, so we order ipv6 candidates after ipv4 ones */ | |
1654 | ||
1655 | if (strchr (fscandidate->ip, ':')) | |
1656 | self->priv->local_candidates = g_list_append | |
1657 | (self->priv->local_candidates, fscandidate); | |
1658 | else | |
1659 | self->priv->local_candidates = g_list_prepend | |
1660 | (self->priv->local_candidates, fscandidate); | |
1661 | FS_NICE_STREAM_TRANSMITTER_UNLOCK (self); | |
1662 | } | |
1663 | else | |
1664 | { | |
1665 | struct candidate_signal_data *data = | |
1666 | g_slice_new (struct candidate_signal_data); | |
1667 | ||
1668 | FS_NICE_STREAM_TRANSMITTER_UNLOCK (self); | |
1669 | ||
1670 | data->self = g_object_ref (self); | |
1671 | data->signal_name = "new-local-candidate"; | |
1672 | data->candidate1 = fscandidate; | |
1673 | data->candidate2 = NULL; | |
1674 | fs_nice_agent_add_idle (self->priv->agent, agent_candidate_signal_idle, | |
1633 | 1675 | data, free_candidate_signal_data); |
1676 | } | |
1634 | 1677 | } |
1635 | 1678 | else |
1636 | 1679 | { |
1646 | 1689 | { |
1647 | 1690 | FsNiceStreamTransmitter *self = data; |
1648 | 1691 | GList *remote_candidates = NULL; |
1692 | GList *local_candidates = NULL; | |
1649 | 1693 | gboolean forced_candidates; |
1650 | 1694 | |
1651 | 1695 | FS_NICE_STREAM_TRANSMITTER_LOCK (self); |
1658 | 1702 | self->priv->gathered = TRUE; |
1659 | 1703 | remote_candidates = self->priv->remote_candidates; |
1660 | 1704 | self->priv->remote_candidates = NULL; |
1705 | local_candidates = self->priv->local_candidates; | |
1706 | self->priv->local_candidates = NULL; | |
1661 | 1707 | forced_candidates = self->priv->forced_candidates; |
1662 | 1708 | FS_NICE_STREAM_TRANSMITTER_UNLOCK (self); |
1663 | 1709 | |
1664 | 1710 | GST_DEBUG ("Candidates gathered for stream %u", self->priv->stream_id); |
1711 | ||
1712 | if (local_candidates) | |
1713 | { | |
1714 | GList *l; | |
1715 | ||
1716 | for (l = local_candidates ; l != NULL; l = g_list_next (l)) | |
1717 | g_signal_emit_by_name (self, "new-local-candidate", l->data); | |
1718 | fs_candidate_list_destroy (local_candidates); | |
1719 | } | |
1665 | 1720 | |
1666 | 1721 | g_signal_emit_by_name (self, "local-candidates-prepared"); |
1667 | 1722 |
36 | 36 | * send data and one to receive data. The receiver always connects to the |
37 | 37 | * sender. The sender socket must exist before the receiver connects to it. |
38 | 38 | * |
39 | * The sender socket can be created by giving the transmitter a candidate | |
39 | * Negotiating the paths of the sockets can happen in two ways. If the | |
40 | * create-local-candidates is True then the transmitter will generate the | |
41 | * path of the local candidate and us it as the ip filed in #FsCandidate. The | |
42 | * transmitter will expect the path of the applications sender socket to be in | |
43 | * the "ip" field of the remote candidates #FsCandidate as well. | |
44 | * | |
45 | * Or alternatively, if create-local-candidates is false then | |
46 | * the sender socket can be created by giving the transmitter a candidate | |
40 | 47 | * with the path of the socket in the "ip" field of the #FsCandidate. This |
41 | 48 | * #FsCandidate can be given to the #FsStreamTransmitter in two ways, either |
42 | 49 | * by setting the #FsStreamTransmitter:preferred-local-candidates property |
63 | 70 | |
64 | 71 | #include <gst/gst.h> |
65 | 72 | |
73 | #include <glib/gstdio.h> | |
74 | ||
66 | 75 | #include <string.h> |
67 | 76 | #include <sys/types.h> |
68 | 77 | |
70 | 79 | # include <unistd.h> |
71 | 80 | #endif |
72 | 81 | |
82 | #include <stdlib.h> | |
83 | ||
73 | 84 | GST_DEBUG_CATEGORY_EXTERN (fs_shm_transmitter_debug); |
74 | 85 | #define GST_CAT_DEFAULT fs_shm_transmitter_debug |
75 | 86 | |
84 | 95 | { |
85 | 96 | PROP_0, |
86 | 97 | PROP_SENDING, |
87 | PROP_PREFERRED_LOCAL_CANDIDATES | |
98 | PROP_PREFERRED_LOCAL_CANDIDATES, | |
99 | PROP_CREATE_LOCAL_CANDIDATES, | |
88 | 100 | }; |
89 | 101 | |
90 | 102 | struct _FsShmStreamTransmitterPrivate |
104 | 116 | |
105 | 117 | /* Protected by the mutex */ |
106 | 118 | FsCandidate **candidates; |
119 | ||
120 | /* Whether we create the local candidate ourselves or rely on the remote end | |
121 | * to pass them to us as part of the candidate */ | |
122 | gboolean create_local_candidates; | |
123 | ||
124 | /* temporary socket directy in case we made one */ | |
125 | gchar *socket_dir; | |
107 | 126 | |
108 | 127 | ShmSrc **shm_src; |
109 | 128 | ShmSink **shm_sink; |
182 | 201 | GObjectClass *gobject_class = (GObjectClass *) klass; |
183 | 202 | FsStreamTransmitterClass *streamtransmitterclass = |
184 | 203 | FS_STREAM_TRANSMITTER_CLASS (klass); |
204 | GParamSpec *pspec; | |
185 | 205 | |
186 | 206 | parent_class = g_type_class_peek_parent (klass); |
187 | 207 | |
196 | 216 | g_object_class_override_property (gobject_class, PROP_SENDING, "sending"); |
197 | 217 | g_object_class_override_property (gobject_class, |
198 | 218 | PROP_PREFERRED_LOCAL_CANDIDATES, "preferred-local-candidates"); |
219 | ||
220 | pspec = g_param_spec_boolean ("create-local-candidates", | |
221 | "CreateLocalCandidates", | |
222 | "Whether the transmitter should automatically create local candidates", | |
223 | FALSE, | |
224 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); | |
225 | g_object_class_install_property (gobject_class, | |
226 | PROP_CREATE_LOCAL_CANDIDATES, | |
227 | pspec); | |
228 | ||
199 | 229 | |
200 | 230 | gobject_class->dispose = fs_shm_stream_transmitter_dispose; |
201 | 231 | gobject_class->finalize = fs_shm_stream_transmitter_finalize; |
237 | 267 | self->priv->shm_sink[c] = NULL; |
238 | 268 | } |
239 | 269 | |
270 | if (self->priv->socket_dir != NULL) | |
271 | g_rmdir (self->priv->socket_dir); | |
272 | g_free (self->priv->socket_dir); | |
273 | self->priv->socket_dir = NULL; | |
274 | ||
240 | 275 | parent_class->dispose (object); |
241 | 276 | } |
242 | 277 | |
269 | 304 | break; |
270 | 305 | case PROP_PREFERRED_LOCAL_CANDIDATES: |
271 | 306 | g_value_set_boxed (value, self->priv->preferred_local_candidates); |
307 | break; | |
308 | case PROP_CREATE_LOCAL_CANDIDATES: | |
309 | g_value_set_boolean (value, self->priv->create_local_candidates); | |
272 | 310 | break; |
273 | 311 | default: |
274 | 312 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
302 | 340 | case PROP_PREFERRED_LOCAL_CANDIDATES: |
303 | 341 | self->priv->preferred_local_candidates = g_value_dup_boxed (value); |
304 | 342 | break; |
343 | case PROP_CREATE_LOCAL_CANDIDATES: | |
344 | self->priv->create_local_candidates = g_value_get_boolean (value); | |
345 | break; | |
305 | 346 | default: |
306 | 347 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
307 | 348 | break; |
356 | 397 | fs_shm_stream_transmitter_add_sink (FsShmStreamTransmitter *self, |
357 | 398 | FsCandidate *candidate, GError **error) |
358 | 399 | { |
400 | if (self->priv->create_local_candidates) | |
401 | return TRUE; | |
402 | ||
359 | 403 | if (!candidate->ip || !candidate->ip[0]) |
360 | 404 | return TRUE; |
361 | 405 | |
386 | 430 | FsShmStreamTransmitter *self, FsCandidate *candidate, |
387 | 431 | GError **error) |
388 | 432 | { |
433 | const gchar *path; | |
389 | 434 | if (!fs_shm_stream_transmitter_add_sink (self, candidate, error)) |
390 | 435 | return FALSE; |
391 | 436 | |
392 | if (candidate->username && candidate->username[0]) | |
393 | { | |
394 | ||
437 | if (self->priv->create_local_candidates) | |
438 | path = candidate->ip; | |
439 | else | |
440 | path = candidate->username; | |
441 | ||
442 | if (path && path[0]) | |
443 | { | |
395 | 444 | if (self->priv->shm_src[candidate->component_id]) |
396 | 445 | { |
397 | 446 | if (fs_shm_transmitter_check_shm_src (self->priv->transmitter, |
398 | self->priv->shm_src[candidate->component_id], | |
399 | candidate->username)) | |
447 | self->priv->shm_src[candidate->component_id], path)) | |
400 | 448 | return TRUE; |
401 | 449 | self->priv->shm_src[candidate->component_id] = NULL; |
402 | 450 | } |
403 | 451 | |
404 | 452 | self->priv->shm_src[candidate->component_id] = |
405 | 453 | fs_shm_transmitter_get_shm_src (self->priv->transmitter, |
406 | candidate->component_id, candidate->username, got_buffer_func, self, | |
407 | error); | |
454 | candidate->component_id, path, got_buffer_func, self, error); | |
408 | 455 | |
409 | 456 | if (self->priv->shm_src[candidate->component_id] == NULL) |
410 | 457 | return FALSE; |
493 | 540 | FS_SHM_STREAM_TRANSMITTER (streamtransmitter); |
494 | 541 | GList *item; |
495 | 542 | |
543 | if (self->priv->create_local_candidates) | |
544 | { | |
545 | guint c; | |
546 | gchar *socket_dir; | |
547 | ||
548 | socket_dir = g_build_filename (g_get_tmp_dir (), | |
549 | "farsight-shm-XXXXXX", NULL); | |
550 | ||
551 | if (mkdtemp (socket_dir) == NULL) | |
552 | return FALSE; | |
553 | ||
554 | self->priv->socket_dir = socket_dir; | |
555 | ||
556 | for (c = 1; c <= self->priv->transmitter->components; c++) | |
557 | { | |
558 | gchar *path = g_strdup_printf ("%s/shm-sink-socket-%d", socket_dir, c); | |
559 | ||
560 | self->priv->shm_sink[c] = | |
561 | fs_shm_transmitter_get_shm_sink (self->priv->transmitter, | |
562 | c, path, ready_cb, connected_cb, self, error); | |
563 | g_free (path); | |
564 | ||
565 | fs_shm_transmitter_sink_set_sending (self->priv->transmitter, | |
566 | self->priv->shm_sink[c], self->priv->sending); | |
567 | ||
568 | if (self->priv->shm_sink[c] == NULL) | |
569 | return FALSE; | |
570 | } | |
571 | ||
572 | return TRUE; | |
573 | } | |
574 | ||
496 | 575 | for (item = self->priv->preferred_local_candidates; |
497 | 576 | item; |
498 | 577 | item = g_list_next (item)) |