Codebase list farstream-0.2 / 0915a64
Merge commit 'upstream/0.0.24' into debian Sjoerd Simons 13 years ago
85 changed file(s) with 7635 addition(s) and 1165 deletion(s). Raw diff Collapse all Expand all
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
0697 commit 680b46c8a3ac3b782f07a9c82f90cb145eaae7ba
1698 Author: Olivier Crête <olivier.crete@collabora.co.uk>
2699 Date: Thu Jan 20 21:40:17 2011 -0500
44
55 /* Farsight2 license */
66 #undef FS2_LICENSE
7
8 /* Farsight2 major.minor version */
9 #undef FS2_MAJORMINOR
710
811 /* The path were plugins are installed and search by default */
912 #undef FS2_PLUGIN_PATH
00 #! /bin/sh
11 # 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.
33 #
44 # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=Farsight>.
55 #
562562 # Identity of this package.
563563 PACKAGE_NAME='Farsight2'
564564 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'
567567 PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=Farsight'
568568 PACKAGE_URL=''
569569
14501450 # Omit some internal or obsolete options to make the list less imposing.
14511451 # This message is too long to be a string in the A/UX 3.1 sh.
14521452 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.
14541454
14551455 Usage: $0 [OPTION]... [VAR=VALUE]...
14561456
15201520
15211521 if test -n "$ac_init_help"; then
15221522 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:";;
15241524 esac
15251525 cat <<\_ACEOF
15261526
16911691 test -n "$ac_init_help" && exit $ac_status
16921692 if $ac_init_version; then
16931693 cat <<\_ACEOF
1694 Farsight2 configure 0.0.23
1694 Farsight2 configure 0.0.24
16951695 generated by GNU Autoconf 2.66
16961696
16971697 Copyright (C) 2010 Free Software Foundation, Inc.
21632163 This file contains any messages produced by compilers while
21642164 running configure, to aid debugging if configure makes a mistake.
21652165
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
21672167 generated by GNU Autoconf 2.66. Invocation command line was
21682168
21692169 $ $0 $@
29832983
29842984 # Define the identity of the package.
29852985 PACKAGE='farsight2'
2986 VERSION='0.0.23'
2986 VERSION='0.0.24'
29872987
29882988
29892989 cat >>confdefs.h <<_ACEOF
30253025
30263026
30273027
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)
30313031
30323032
30333033
30383038 { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
30393039 $as_echo_n "checking nano version... " >&6; }
30403040
3041 NANO=$(echo 0.0.23 | cut -d'.' -f4)
3041 NANO=$(echo 0.0.24 | cut -d'.' -f4)
30423042
30433043 if test x"$NANO" = x || test "x$NANO" = "x0" ; then
30443044 { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
31543154 FS2_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR
31553155
31563156
3157 cat >>confdefs.h <<_ACEOF
3158 #define FS2_MAJORMINOR "$FS2_MAJORMINOR"
3159 _ACEOF
3160
3161
31573162 GST_MAJORMINOR=0.10
31583163
31593164
31643169
31653170
31663171
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
31713176
31723177
31733178
1155111556
1155211557
1155311558 FS2_PLUGINS_ALL=" \
11559 fsrawconference \
1155411560 fsrtpconference \
1155511561 fsmsnconference \
1155611562 funnel \
1532515331 fi
1532615332
1532715333
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"
1532915335
1533015336 cat >confcache <<\_ACEOF
1533115337 # This file is a shell script that caches the results of configure
1593815944 # report actual input values of CONFIG_FILES etc. instead of their
1593915945 # values after options handling.
1594015946 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
1594215948 generated by GNU Autoconf 2.66. Invocation command line was
1594315949
1594415950 CONFIG_FILES = $CONFIG_FILES
1600416010 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1600516011 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1600616012 ac_cs_version="\\
16007 Farsight2 config.status 0.0.23
16013 Farsight2 config.status 0.0.24
1600816014 configured by $0, generated by GNU Autoconf 2.66,
1600916015 with options \\"\$ac_cs_config\\"
1601016016
1639616402 "common/m4/Makefile") CONFIG_FILES="$CONFIG_FILES common/m4/Makefile" ;;
1639716403 "common-modified/Makefile") CONFIG_FILES="$CONFIG_FILES common-modified/Makefile" ;;
1639816404 "gst/Makefile") CONFIG_FILES="$CONFIG_FILES gst/Makefile" ;;
16405 "gst/fsrawconference/Makefile") CONFIG_FILES="$CONFIG_FILES gst/fsrawconference/Makefile" ;;
1639916406 "gst/fsrtpconference/Makefile") CONFIG_FILES="$CONFIG_FILES gst/fsrtpconference/Makefile" ;;
1640016407 "gst/fsmsnconference/Makefile") CONFIG_FILES="$CONFIG_FILES gst/fsmsnconference/Makefile" ;;
1640116408 "gst/funnel/Makefile") CONFIG_FILES="$CONFIG_FILES gst/funnel/Makefile" ;;
44 dnl initialize autoconf
55 dnl releases only do -Wall, cvs and prerelease does -Werror too
66 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,
88 https://bugs.freedesktop.org/enter_bug.cgi?product=Farsight,
99 farsight2)
1010
3636 dnl our libraries and install dirs use major.minor as a version
3737 FS2_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR
3838 AC_SUBST(FS2_MAJORMINOR)
39 AC_DEFINE_UNQUOTED(FS2_MAJORMINOR, "$FS2_MAJORMINOR",
40 [Farsight2 major.minor version])
3941
4042 GST_MAJORMINOR=0.10
4143 AC_SUBST(GST_MAJORMINOR)
4951 dnl - interfaces added -> increment AGE
5052 dnl - interfaces removed -> AGE = 0
5153 dnl sets FS2_LT_LDFLAGS
52 AS_LIBTOOL(FS2, 5, 3, 5)
54 AS_LIBTOOL(FS2, 6, 0, 6)
5355
5456 dnl FIXME: this macro doesn't actually work;
5557 dnl the generated libtool script has no support for the listed tags.
104106
105107 dnl these are all the gst plug-ins, compilable without additional libs
106108 FS2_PLUGINS_ALL=" \
109 fsrawconference \
107110 fsrtpconference \
108111 fsmsnconference \
109112 funnel \
389392 common/m4/Makefile
390393 common-modified/Makefile
391394 gst/Makefile
395 gst/fsrawconference/Makefile
392396 gst/fsrtpconference/Makefile
393397 gst/fsmsnconference/Makefile
394398 gst/funnel/Makefile
3333 <title>Farsight Utility Functions and Objects</title>
3434 <xi:include href="xml/fs-element-added-notifier.xml"/>
3535 <xi:include href="xml/fs-interfaces.xml"/>
36 <xi:include href="xml/fs-utils.xml"/>
3637 </chapter>
3738 </part>
3839 <part>
259259 fs_interfaces_get_local_interfaces
260260 fs_interfaces_get_local_ips
261261 </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>
9191 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>.
9292 </p>
9393 <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>
9595 <div class="informalexample">
9696 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
9797 <tbody>
110110 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>.
111111 </p>
112112 <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>
114114 <div class="informalexample">
115115 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
116116 <tbody>
130130 </div>
131131 <hr>
132132 <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>
134134 <div class="informalexample">
135135 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
136136 <tbody>
149149 </div>
150150 <hr>
151151 <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>
153153 <div class="informalexample">
154154 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
155155 <tbody>
175175 </div>
176176 <hr>
177177 <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>
179179 <div class="informalexample">
180180 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
181181 <tbody>
200200 </div>
201201 <hr>
202202 <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>
204204 <div class="informalexample">
205205 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
206206 <tbody>
2020 </tr></table>
2121 <div class="chapter" title="Farsight GStreamer Interfaces">
2222 <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>
2424 <div class="toc"><dl><dt>
2525 <span class="refentrytitle"><a href="FsConference.html">FsConference</a></span><span class="refpurpose"> — Interface for farsight conference elements</span>
2626 </dt></dl></div>
2020 </tr></table>
2121 <div class="chapter" title="Farsight Core Library">
2222 <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>
2424 <div class="toc"><dl>
2525 <dt>
2626 <span class="refentrytitle"><a href="FsParticipant.html">FsParticipant</a></span><span class="refpurpose"> — A participant in a conference</span>
2020 </tr></table>
2121 <div class="chapter" title="Farsight Utility Functions and Objects">
2222 <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>
2424 <div class="toc"><dl>
2525 <dt>
2626 <span class="refentrytitle"><a href="FsElementAddedNotifier.html">FsElementAddedNotifier</a></span><span class="refpurpose"> — Recursive element addition notifier</span>
2727 </dt>
2828 <dt>
2929 <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>
3033 </dt>
3134 </dl></div>
3235 </div>
2020 </tr></table>
2121 <div class="chapter" title="Farsight Classes Base Implementations">
2222 <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>
2424 <div class="toc"><dl><dt>
2525 <span class="refentrytitle"><a href="FsBaseConference.html">FsBaseConference</a></span><span class="refpurpose"> — Base class for Farsight Conference Gstreamer Elements</span>
2626 </dt></dl></div>
2020 </tr></table>
2121 <div class="chapter" title="Farsight Transmitter Classes">
2222 <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>
2424 <div class="toc"><dl>
2525 <dt>
2626 <span class="refentrytitle"><a href="FsTransmitter.html">FsTransmitter</a></span><span class="refpurpose"> — A transmitter object linked to a session</span>
2020 </tr></table>
2121 <div class="chapter" title="Farsight Plugins Infrastructure">
2222 <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>
2424 <div class="toc"><dl><dt>
2525 <span class="refentrytitle"><a href="farsight2-libs-FsPlugin.html">FsPlugin</a></span><span class="refpurpose"> — A class for defining Farsight plugins</span>
2626 </dt></dl></div>
66 <link rel="home" href="index.html" title="Farsight2 Reference Manual">
77 <link rel="up" href="ch03.html" title="Farsight Utility Functions and Objects">
88 <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">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch03.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <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>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#farsight2-libs-Network-interfaces-discovery.synopsis" class="shortcut">Top</a>
121121 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>.
122122 </p>
123123 <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>"
125125 message</h3>
126126 <div class="informalexample">
127127 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
147147 </div>
148148 <hr>
149149 <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>"
151151 message</h3>
152152 <div class="informalexample">
153153 <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 &lt;gst/farsight/fs-utils.h&gt;
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>
1515 <sub name="Farsight Utility Functions and Objects" link="ch03.html">
1616 <sub name="FsElementAddedNotifier" link="FsElementAddedNotifier.html"/>
1717 <sub name="Network interfaces discovery" link="farsight2-libs-Network-interfaces-discovery.html"/>
18 <sub name="fs-utils" link="farsight2-libs-fs-utils.html"/>
1819 </sub>
1920 </sub>
2021 <sub name="Classes used to implement Farsight plugins" link="pt02.html">
3132 </sub>
3233 </chapters>
3334 <functions>
34 <function name="The &quot;farsight-error&quot; message" link="FsConference.html#id459650"/>
35 <function name="The &quot;farsight-error&quot; message" link="FsConference.html#id538257"/>
3536 <function name="FsConference" link="FsConference.html#FsConference-struct"/>
3637 <function name="fs_conference_new_session ()" link="FsConference.html#fs-conference-new-session"/>
3738 <function name="fs_conference_new_participant ()" link="FsConference.html#fs-conference-new-participant"/>
4445 <function name="FS_PARTICIPANT_DATA_UNLOCK()" link="FsParticipant.html#FS-PARTICIPANT-DATA-UNLOCK:CAPS"/>
4546 <function name="The &quot;cname&quot; property" link="FsParticipant.html#FsParticipant--cname"/>
4647 <function name="The &quot;error&quot; signal" link="FsParticipant.html#FsParticipant-error"/>
47 <function name="The &quot;farsight-send-codec-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id517534"/>
48 <function name="The &quot;farsight-codecs-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id517594"/>
48 <function name="The &quot;farsight-send-codec-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id596143"/>
49 <function name="The &quot;farsight-codecs-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id596203"/>
4950 <function name="enum FsDTMFEvent" link="farsight2-libs-fs-session.html#FsDTMFEvent"/>
5051 <function name="enum FsDTMFMethod" link="farsight2-libs-fs-session.html#FsDTMFMethod"/>
5152 <function name="FsSession" link="farsight2-libs-fs-session.html#FsSession-struct"/>
6869 <function name="The &quot;sink-pad&quot; property" link="farsight2-libs-fs-session.html#FsSession--sink-pad"/>
6970 <function name="The &quot;tos&quot; property" link="farsight2-libs-fs-session.html#FsSession--tos"/>
7071 <function name="The &quot;error&quot; signal" link="farsight2-libs-fs-session.html#FsSession-error"/>
71 <function name="The &quot;farsight-new-local-candidate&quot; message" link="FsStream.html#id539458"/>
72 <function name="The &quot;farsight-local-candidates-prepared&quot; message" link="FsStream.html#id539494"/>
73 <function name="The &quot;farsight-new-active-candidate-pair&quot; message" link="FsStream.html#id539524"/>
74 <function name="The &quot;farsight-recv-codecs-changed&quot; message" link="FsStream.html#id539568"/>
75 <function name="The &quot;farsight-component-state-changed&quot; message" link="FsStream.html#id539632"/>
72 <function name="The &quot;farsight-new-local-candidate&quot; message" link="FsStream.html#id618070"/>
73 <function name="The &quot;farsight-local-candidates-prepared&quot; message" link="FsStream.html#id618106"/>
74 <function name="The &quot;farsight-new-active-candidate-pair&quot; message" link="FsStream.html#id618135"/>
75 <function name="The &quot;farsight-recv-codecs-changed&quot; message" link="FsStream.html#id618180"/>
76 <function name="The &quot;farsight-component-state-changed&quot; message" link="FsStream.html#id618243"/>
7677 <function name="FsStream" link="FsStream.html#FsStream-struct"/>
7778 <function name="FsStreamClass" link="FsStream.html#FsStreamClass"/>
7879 <function name="enum FsStreamDirection" link="FsStream.html#FsStreamDirection"/>
131132 <function name="fs_interfaces_get_ip_for_interface ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-ip-for-interface"/>
132133 <function name="fs_interfaces_get_local_interfaces ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-interfaces"/>
133134 <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"/>
134137 <function name="FsBaseConference" link="FsBaseConference.html#FsBaseConference-struct"/>
135138 <function name="FsBaseConferenceClass" link="FsBaseConference.html#FsBaseConferenceClass"/>
136139 <function name="FsTransmitter" link="FsTransmitter.html#FsTransmitter-struct"/>
1515 <sub name="Farsight Utility Functions and Objects" link="ch03.html">
1616 <sub name="FsElementAddedNotifier" link="FsElementAddedNotifier.html"/>
1717 <sub name="Network interfaces discovery" link="farsight2-libs-Network-interfaces-discovery.html"/>
18 <sub name="fs-utils" link="farsight2-libs-fs-utils.html"/>
1819 </sub>
1920 </sub>
2021 <sub name="Classes used to implement Farsight plugins" link="pt02.html">
3132 </sub>
3233 </chapters>
3334 <functions>
34 <keyword type="" name="The &quot;farsight-error&quot; message" link="FsConference.html#id459650"/>
35 <keyword type="" name="The &quot;farsight-error&quot; message" link="FsConference.html#id538257"/>
3536 <keyword type="struct" name="FsConference" link="FsConference.html#FsConference-struct"/>
3637 <keyword type="function" name="fs_conference_new_session ()" link="FsConference.html#fs-conference-new-session"/>
3738 <keyword type="function" name="fs_conference_new_participant ()" link="FsConference.html#fs-conference-new-participant"/>
4445 <keyword type="macro" name="FS_PARTICIPANT_DATA_UNLOCK()" link="FsParticipant.html#FS-PARTICIPANT-DATA-UNLOCK:CAPS"/>
4546 <keyword type="property" name="The &quot;cname&quot; property" link="FsParticipant.html#FsParticipant--cname"/>
4647 <keyword type="signal" name="The &quot;error&quot; signal" link="FsParticipant.html#FsParticipant-error"/>
47 <keyword type="" name="The &quot;farsight-send-codec-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id517534"/>
48 <keyword type="" name="The &quot;farsight-codecs-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id517594"/>
48 <keyword type="" name="The &quot;farsight-send-codec-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id596143"/>
49 <keyword type="" name="The &quot;farsight-codecs-changed&quot;&#10; message" link="farsight2-libs-fs-session.html#id596203"/>
4950 <keyword type="enum" name="enum FsDTMFEvent" link="farsight2-libs-fs-session.html#FsDTMFEvent"/>
5051 <keyword type="enum" name="enum FsDTMFMethod" link="farsight2-libs-fs-session.html#FsDTMFMethod"/>
5152 <keyword type="struct" name="FsSession" link="farsight2-libs-fs-session.html#FsSession-struct"/>
6869 <keyword type="property" name="The &quot;sink-pad&quot; property" link="farsight2-libs-fs-session.html#FsSession--sink-pad"/>
6970 <keyword type="property" name="The &quot;tos&quot; property" link="farsight2-libs-fs-session.html#FsSession--tos"/>
7071 <keyword type="signal" name="The &quot;error&quot; signal" link="farsight2-libs-fs-session.html#FsSession-error"/>
71 <keyword type="" name="The &quot;farsight-new-local-candidate&quot; message" link="FsStream.html#id539458"/>
72 <keyword type="" name="The &quot;farsight-local-candidates-prepared&quot; message" link="FsStream.html#id539494"/>
73 <keyword type="" name="The &quot;farsight-new-active-candidate-pair&quot; message" link="FsStream.html#id539524"/>
74 <keyword type="" name="The &quot;farsight-recv-codecs-changed&quot; message" link="FsStream.html#id539568"/>
75 <keyword type="" name="The &quot;farsight-component-state-changed&quot; message" link="FsStream.html#id539632"/>
72 <keyword type="" name="The &quot;farsight-new-local-candidate&quot; message" link="FsStream.html#id618070"/>
73 <keyword type="" name="The &quot;farsight-local-candidates-prepared&quot; message" link="FsStream.html#id618106"/>
74 <keyword type="" name="The &quot;farsight-new-active-candidate-pair&quot; message" link="FsStream.html#id618135"/>
75 <keyword type="" name="The &quot;farsight-recv-codecs-changed&quot; message" link="FsStream.html#id618180"/>
76 <keyword type="" name="The &quot;farsight-component-state-changed&quot; message" link="FsStream.html#id618243"/>
7677 <keyword type="struct" name="FsStream" link="FsStream.html#FsStream-struct"/>
7778 <keyword type="struct" name="FsStreamClass" link="FsStream.html#FsStreamClass"/>
7879 <keyword type="enum" name="enum FsStreamDirection" link="FsStream.html#FsStreamDirection"/>
131132 <keyword type="function" name="fs_interfaces_get_ip_for_interface ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-ip-for-interface"/>
132133 <keyword type="function" name="fs_interfaces_get_local_interfaces ()" link="farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-interfaces"/>
133134 <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"/>
134137 <keyword type="struct" name="FsBaseConference" link="FsBaseConference.html#FsBaseConference-struct"/>
135138 <keyword type="struct" name="FsBaseConferenceClass" link="FsBaseConference.html#FsBaseConferenceClass"/>
136139 <keyword type="struct" name="FsTransmitter" link="FsTransmitter.html#FsTransmitter-struct"/>
1414 <div>
1515 <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>
1616 <div><p class="releaseinfo">
17 for version 0.0.22.1.
17 for version 0.0.23.1.
1818 The latest version of this documentation can be found on-line at
1919 <a class="ulink" href="http://farsight.freedesktop.org/apidoc/farsight2/" target="_top">http://farsight.freedesktop.org/apidoc/farsight2/</a>.
2020 The bases classes are implemented by multiple plugins described in
5656 <dt>
5757 <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>
5858 </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>
5962 </dl></dd>
6063 </dl></dd>
6164 <dt><span class="part"><a href="pt02.html">II. Classes used to implement Farsight plugins</a></span></dt>
183183 <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">
184184 <ANCHOR id="fs-interfaces-get-local-interfaces" href="farsight2-libs-0.10/farsight2-libs-Network-interfaces-discovery.html#fs-interfaces-get-local-interfaces">
185185 <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">
186192 <ANCHOR id="FsBaseConference" href="farsight2-libs-0.10/FsBaseConference.html">
187193 <ANCHOR id="FsBaseConference.synopsis" href="farsight2-libs-0.10/FsBaseConference.html#FsBaseConference.synopsis">
188194 <ANCHOR id="FsBaseConference.object-hierarchy" href="farsight2-libs-0.10/FsBaseConference.html#FsBaseConference.object-hierarchy">
2020 </tr></table>
2121 <div class="part" title="Part I. User-oriented classes, interfaces and functions">
2222 <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>
2424 <div class="toc">
2525 <p><b>Table of Contents</b></p>
2626 <dl>
5454 <dt>
5555 <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>
5656 </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>
5760 </dl></dd>
5861 </dl>
5962 </div>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="Farsight2 Reference Manual">
77 <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">
99 <link rel="next" href="ch04.html" title="Farsight Classes Base Implementations">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <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>
1616 <td> </td>
1717 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1818 <th width="100%" align="center">Farsight2 Reference Manual</th>
2020 </tr></table>
2121 <div class="part" title="Part II. Classes used to implement Farsight plugins">
2222 <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>
2424 <div class="toc">
2525 <p><b>Table of Contents</b></p>
2626 <dl>
6060 $(top_builddir)/transmitters/shm/libshm-transmitter.la \
6161 $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \
6262 $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \
63 $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \
6364 $(top_builddir)/gst/funnel/libfsfunnel.la \
6465 $(top_builddir)/gst/videoanyrate/libfsvideoanyrate.la
6566
8283 $(top_srcdir)/gst/fsrtpconference/fs-rtp-session.h \
8384 $(top_srcdir)/gst/fsrtpconference/fs-rtp-stream.h \
8485 $(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 \
8590 $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-recv-conference.h \
8691 $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-send-conference.h \
8792 $(top_srcdir)/gst/fsmsnconference/fs-msn-conference.h \
122127 GTKDOC_LIBS = \
123128 $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \
124129 $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \
130 $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \
125131 $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \
126132 $(GST_BASE_LIBS)
127133
334334 $(top_builddir)/transmitters/shm/libshm-transmitter.la \
335335 $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \
336336 $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \
337 $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \
337338 $(top_builddir)/gst/funnel/libfsfunnel.la \
338339 $(top_builddir)/gst/videoanyrate/libfsvideoanyrate.la
339340
356357 $(top_srcdir)/gst/fsrtpconference/fs-rtp-session.h \
357358 $(top_srcdir)/gst/fsrtpconference/fs-rtp-stream.h \
358359 $(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 \
359364 $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-recv-conference.h \
360365 $(top_srcdir)/gst/fsmsnconference/fs-msn-cam-send-conference.h \
361366 $(top_srcdir)/gst/fsmsnconference/fs-msn-conference.h \
396401 GTKDOC_LIBS = \
397402 $(top_builddir)/gst-libs/gst/farsight/libgstfarsight-0.10.la \
398403 $(top_builddir)/gst/fsrtpconference/libfsrtpconference_doc.la \
404 $(top_builddir)/gst/fsrawconference/libfsrawconference_doc.la \
399405 $(top_builddir)/gst/fsmsnconference/libfsmsnconference_doc.la \
400406 $(GST_BASE_LIBS)
401407
1717 </bookinfo>
1818
1919 <part>
20 <title>RTP Plugin</title>
20 <title>Plugins implementing FsConference</title>
2121 <chapter>
22 <title>Core interface classes</title>
22 <title>RTP Plugin</title>
2323 <xi:include href="xml/element-fsrtpconference.xml"/>
2424 <xi:include href="xml/fs-rtp-participant.xml"/>
2525 <xi:include href="xml/fs-rtp-session.xml"/>
2626 <xi:include href="xml/fs-rtp-stream.xml"/>
2727 </chapter>
2828 <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"/>
3434 </chapter>
35 </part>
36
37 <part>
38 <title>MSN plugins</title>
3935 <chapter>
4036 <title>MSN Webcam plugin</title>
4137 <xi:include href="xml/element-fsmsncamsendconference.xml"/>
4844 </part>
4945
5046 <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>
5155 <title>Utility elements</title>
5256 <xi:include href="xml/element-fsfunnel.xml"/>
5357 <xi:include href="xml/element-fsvideoanyrate.xml"/>
4444 <SUBSECTION Private>
4545 fs_codec_to_gst_caps
4646 fs_rtp_conference_is_internal_thread
47 codecs_copy_with_new_ptime
47 fs_codec_to_gst_caps_with_ptime
4848 </SECTION>
4949
5050 <SECTION>
426426 FsMsnCamSendConferencePrivate
427427 fs_msn_cam_send_conference_get_type
428428 </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>
7878 </ARG>
7979
8080 <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>
8191 <NAME>FsRtpSession::no-rtcp-timeout</NAME>
8292 <TYPE>gint</TYPE>
8393 <RANGE>>= G_MAXULONG</RANGE>
8595 <NICK>The timeout (in ms) before no RTCP is assumed</NICK>
8696 <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>
8797 <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>
9898 </ARG>
9999
100100 <ARG>
118118 </ARG>
119119
120120 <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>
203123 <RANGE></RANGE>
204124 <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>
247127 <DEFAULT></DEFAULT>
248128 </ARG>
249129
250130 <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>
254134 <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>
288138 </ARG>
289139
290140 <ARG>
298148 </ARG>
299149
300150 <ARG>
301 <NAME>FsMsnSession::conference</NAME>
302 <TYPE>FsMsnConference*</TYPE>
151 <NAME>FsRtpStream::rtp-header-extensions</NAME>
152 <TYPE>FsRtpHeaderExtensionGList*</TYPE>
303153 <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>
307157 <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>
338158 </ARG>
339159
340160 <ARG>
347167 <DEFAULT>NULL</DEFAULT>
348168 </ARG>
349169
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
11 <html>
22 <head>
33 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Core interface classes</title>
4 <title>RTP Plugin</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
99 <link rel="next" href="farsight2-plugins-FsRtpConference.html" title="FsRtpConference">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1818 <th width="100%" align="center">Farsight2 Plugins Manual</th>
1919 <td><a accesskey="n" href="farsight2-plugins-FsRtpConference.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2020 </tr></table>
21 <div class="chapter" title="Core interface classes">
21 <div class="chapter" title="RTP Plugin">
2222 <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>
2424 <div class="toc"><dl>
2525 <dt>
2626 <span class="refentrytitle"><a href="farsight2-plugins-FsRtpConference.html">FsRtpConference</a></span><span class="refpurpose"> — Farsight RTP Conference Gstreamer Elements</span>
11 <html>
22 <head>
33 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Transmitters</title>
4 <title>Raw Plugin</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <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">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1616 <td><a accesskey="u" href="pt01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1717 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1818 <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>
2020 </tr></table>
21 <div class="chapter" title="Transmitters">
21 <div class="chapter" title="Raw Plugin">
2222 <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>
2424 <div class="toc"><dl>
2525 <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>
2727 </dt>
2828 <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>
3030 </dt>
3131 <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>
3333 </dt>
3434 <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>
3636 </dt>
3737 </dl></div>
3838 </div>
44 <title>MSN Webcam plugin</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
99 <link rel="next" href="farsight2-plugins-FsMsnCamSendConference.html" title="FsMsnCamSendConference">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <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>
1717 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1818 <th width="100%" align="center">Farsight2 Plugins Manual</th>
1919 <td><a accesskey="n" href="farsight2-plugins-FsMsnCamSendConference.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2020 </tr></table>
2121 <div class="chapter" title="MSN Webcam plugin">
2222 <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>
2424 <div class="toc"><dl>
2525 <dt>
2626 <span class="refentrytitle"><a href="farsight2-plugins-FsMsnCamSendConference.html">FsMsnCamSendConference</a></span><span class="refpurpose"> — Farsight MSN send Conference Gstreamer Element</span>
2323 <a href="#farsight2-plugins-FsMsnConference.synopsis" class="shortcut">Top</a>
2424  | 
2525 <a href="#farsight2-plugins-FsMsnConference.description" class="shortcut">Description</a>
26  | 
27 <a href="#farsight2-plugins-FsMsnConference.properties" class="shortcut">Properties</a>
2826 </td></tr>
2927 </table>
3028 <div class="refentry" title="FsMsnConference">
3937 <div class="refsynopsisdiv" title="Synopsis">
4038 <a name="farsight2-plugins-FsMsnConference.synopsis"></a><h2>Synopsis</h2>
4139 <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
4840 </pre>
4941 </div>
5042 <div class="refsect1" title="Description">
7163 </p>
7264 </div>
7365 </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>
8366 </div>
8467 <div class="footer">
8568 <hr>
2323 <a href="#farsight2-plugins-FsMsnSession.synopsis" class="shortcut">Top</a>
2424  | 
2525 <a href="#farsight2-plugins-FsMsnSession.description" class="shortcut">Description</a>
26  | 
27 <a href="#farsight2-plugins-FsMsnSession.properties" class="shortcut">Properties</a>
2826 </td></tr>
2927 </table>
3028 <div class="refentry" title="FsMsnSession">
3937 <div class="refsynopsisdiv" title="Synopsis">
4038 <a name="farsight2-plugins-FsMsnSession.synopsis"></a><h2>Synopsis</h2>
4139 <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
4840 </pre>
4941 </div>
5042 <div class="refsect1" title="Description">
8072 </pre>
8173 </div>
8274 </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>
9175 </div>
9276 <div class="footer">
9377 <hr>
66 <link rel="home" href="index.html" title="Farsight2 Plugins Manual">
77 <link rel="up" href="ch03.html" title="MSN Webcam plugin">
88 <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">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch03.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <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>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#farsight2-plugins-FsMsnStream.synopsis" class="shortcut">Top</a>
2424  | 
2525 <a href="#farsight2-plugins-FsMsnStream.description" class="shortcut">Description</a>
26  | 
27 <a href="#farsight2-plugins-FsMsnStream.properties" class="shortcut">Properties</a>
2826 </td></tr>
2927 </table>
3028 <div class="refentry" title="FsMsnStream">
3937 <div class="refsynopsisdiv" title="Synopsis">
4038 <a name="farsight2-plugins-FsMsnStream.synopsis"></a><h2>Synopsis</h2>
4139 <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
5040 </pre>
5141 </div>
5242 <div class="refsect1" title="Description">
8070 </pre>
8171 </div>
8272 </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>
10773 </div>
10874 <div class="footer">
10975 <hr>
44 <title>FsMulticastStreamTransmitter</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <link rel="prev" href="farsight2-plugins-FsRawUdpStreamTransmitter.html" title="FsRawUdpStreamTransmitter">
99 <link rel="next" href="farsight2-plugins-FsNiceStreamTransmitter.html" title="FsNiceStreamTransmitter">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
1616 <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>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">Farsight2 Plugins Manual</th>
2020 <td><a accesskey="n" href="farsight2-plugins-FsNiceStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
44 <title>FsNiceStreamTransmitter</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <link rel="prev" href="farsight2-plugins-FsMulticastStreamTransmitter.html" title="FsMulticastStreamTransmitter">
99 <link rel="next" href="farsight2-plugins-FsShmStreamTransmitter.html" title="FsShmStreamTransmitter">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
1616 <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>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">Farsight2 Plugins Manual</th>
2020 <td><a accesskey="n" href="farsight2-plugins-FsShmStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2323 <a href="#farsight2-plugins-FsNiceStreamTransmitter.synopsis" class="shortcut">Top</a>
2424  | 
2525 <a href="#farsight2-plugins-FsNiceStreamTransmitter.description" class="shortcut">Description</a>
26  | 
27 <a href="#farsight2-plugins-FsNiceStreamTransmitter.properties" class="shortcut">Properties</a>
2826 </td></tr>
2927 </table>
3028 <div class="refentry" title="FsNiceStreamTransmitter">
3937 <div class="refsynopsisdiv" title="Synopsis">
4038 <a name="farsight2-plugins-FsNiceStreamTransmitter.synopsis"></a><h2>Synopsis</h2>
4139 <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
5440 </pre>
5541 </div>
5642 <div class="refsect1" title="Description">
7763 </table></div>
7864 </div>
7965 </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: &lt;= 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: &lt;= 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>
17866 <div class="refsect1" title="See Also">
17967 <a name="farsight2-plugins-FsNiceStreamTransmitter.see-also"></a><h2>See Also</h2>
18068 <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>
44 <title>FsRawUdpStreamTransmitter</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
99 <link rel="next" href="farsight2-plugins-FsMulticastStreamTransmitter.html" title="FsMulticastStreamTransmitter">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <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>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">Farsight2 Plugins Manual</th>
2020 <td><a accesskey="n" href="farsight2-plugins-FsMulticastStreamTransmitter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2323 <a href="#farsight2-plugins-FsRawUdpStreamTransmitter.synopsis" class="shortcut">Top</a>
2424  | 
2525 <a href="#farsight2-plugins-FsRawUdpStreamTransmitter.description" class="shortcut">Description</a>
26  | 
27 <a href="#farsight2-plugins-FsRawUdpStreamTransmitter.properties" class="shortcut">Properties</a>
2826 </td></tr>
2927 </table>
3028 <div class="refentry" title="FsRawUdpStreamTransmitter">
4139 <pre class="synopsis"> <a class="link" href="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter" title="FsRawUdpStreamTransmitter">FsRawUdpStreamTransmitter</a>;
4240 </pre>
4341 </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>
5742 <div class="refsect1" title="Description">
5843 <a name="farsight2-plugins-FsRawUdpStreamTransmitter.description"></a><h2>Description</h2>
5944 <p>
6146 </p>
6247 <p>
6348 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>
6550 properties are set. If the STUN request does not get a reply
6651 or no STUN is requested. It will return the IP address of all the local
6752 network interfaces, listing link-local addresses after other addresses
11297 </table></div>
11398 </div>
11499 </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: &gt;= 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>
176100 <div class="refsect1" title="See Also">
177101 <a name="farsight2-plugins-FsRawUdpStreamTransmitter.see-also"></a><h2>See Also</h2>
178102 <a class="link" href="farsight2-plugins-FsMulticastStreamTransmitter.html#FsMulticastStreamTransmitter" title="FsMulticastStreamTransmitter"><span class="type">FsMulticastStreamTransmitter</span></a>
44 <title>FsRtpConference</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
99 <link rel="next" href="farsight2-plugins-FsRtpParticipant.html" title="FsRtpParticipant">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
44 <title>FsRtpParticipant</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <link rel="prev" href="farsight2-plugins-FsRtpConference.html" title="FsRtpConference">
99 <link rel="next" href="farsight2-plugins-FsRtpSession.html" title="FsRtpSession">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
44 <title>FsRtpSession</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <link rel="prev" href="farsight2-plugins-FsRtpParticipant.html" title="FsRtpParticipant">
99 <link rel="next" href="farsight2-plugins-FsRtpStream.html" title="FsRtpStream">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
4545 <a name="farsight2-plugins-FsRtpSession.properties"></a><h2>Properties</h2>
4646 <pre class="synopsis">
4747 "<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
4948 "<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
5049 "<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
5152 </pre>
5253 </div>
5354 <div class="refsect1" title="Description">
5960 SSRC (although if there is a SSRC collision, that SSRC may change).
6061 </p>
6162 <div class="refsect2" title="Codec profiles">
62 <a name="id502848"></a><h3>Codec profiles</h3>
63 <a name="id433132"></a><h3>Codec profiles</h3>
6364 <p>
6465 It is possible to define "codec profiles", that is non-autodetected
6566 encoding and decoding pipelines for codecs. It is even possible to declare
106107 <p>Default value: 7000</p>
107108 </div>
108109 <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>
115110 <div class="refsect2" title='The "ssrc" property'>
116111 <a name="FsRtpSession--ssrc"></a><h3>The <code class="literal">"ssrc"</code> property</h3>
117112 <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>
125120 <p>The bitrate that the session will try to send at in bits/sec.</p>
126121 <p>Default value: 0</p>
127122 </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>
128135 </div>
129136 </div>
130137 <div class="footer">
44 <title>FsRtpStream</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <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">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
4545 <a name="farsight2-plugins-FsRtpStream.properties"></a><h2>Properties</h2>
4646 <pre class="synopsis">
4747 "<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
4849 </pre>
4950 </div>
5051 <div class="refsect1" title="Description">
7475 The <a href="/usr/share/gtk-doc/html/farsight2-libs-0.10/FsStreamTransmitter.html"><span class="type">FsStreamTransmitter</span></a> for this stream.
7576 </p>
7677 </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>
7784 </div>
7885 </div>
7986 <div class="footer">
44 <title>FsShmStreamTransmitter</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <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">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
1616 <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>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <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>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#farsight2-plugins-FsShmStreamTransmitter.synopsis" class="shortcut">Top</a>
5555 sender. The sender socket must exist before the receiver connects to it.
5656 </p>
5757 <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
5967 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
6068 <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
6169 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
11 <!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
22 <book xmlns="http://www.devhelp.net/book" title="Farsight2 Plugins Manual" link="index.html" author="" name="farsight2-plugins">
33 <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">
66 <sub name="FsRtpConference" link="farsight2-plugins-FsRtpConference.html"/>
77 <sub name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html"/>
88 <sub name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html"/>
99 <sub name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html"/>
1010 </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"/>
1616 </sub>
17 </sub>
18 <sub name="MSN plugins" link="pt02.html">
1917 <sub name="MSN Webcam plugin" link="ch03.html">
2018 <sub name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html"/>
2119 <sub name="FsMsnCamCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html"/>
2422 <sub name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html"/>
2523 <sub name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html"/>
2624 </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"/>
2731 </sub>
2832 <sub name="Utility elements" link="pt03.html">
2933 <sub name="FsFunnel" link="farsight2-plugins-FsFunnel.html"/>
4246 <function name="The &quot;sdes&quot; property" link="farsight2-plugins-FsRtpConference.html#FsRtpConference--sdes"/>
4347 <function name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html#FsRtpParticipant"/>
4448 <function name="The &quot;cname&quot; 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"/>
4650 <function name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html#FsRtpSession"/>
4751 <function name="The &quot;no-rtcp-timeout&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--no-rtcp-timeout"/>
48 <function name="The &quot;conference&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--conference"/>
4952 <function name="The &quot;ssrc&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--ssrc"/>
5053 <function name="The &quot;send-bitrate&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--send-bitrate"/>
54 <function name="The &quot;rtp-header-extension-preferences&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extension-preferences"/>
55 <function name="The &quot;rtp-header-extensions&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extensions"/>
5156 <function name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html#FsRtpStream"/>
5257 <function name="The &quot;stream-transmitter&quot; property" link="farsight2-plugins-FsRtpStream.html#FsRtpStream--stream-transmitter"/>
53 <function name="FsRawUdpStreamTransmitter" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter"/>
54 <function name="The &quot;stun-ip&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip"/>
55 <function name="The &quot;stun-port&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port"/>
56 <function name="The &quot;stun-timeout&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-timeout"/>
57 <function name="The &quot;upnp-discovery&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery"/>
58 <function name="The &quot;upnp-discovery-timeout&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery-timeout"/>
59 <function name="The &quot;upnp-mapping&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping"/>
60 <function name="The &quot;upnp-mapping-timeout&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping-timeout"/>
61 <function name="The &quot;upnp-request-timeout&quot; 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 &quot;compatibility-mode&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--compatibility-mode"/>
65 <function name="The &quot;controlling-mode&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--controlling-mode"/>
66 <function name="The &quot;debug&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--debug"/>
67 <function name="The &quot;relay-info&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--relay-info"/>
68 <function name="The &quot;stream-id&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stream-id"/>
69 <function name="The &quot;stun-ip&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-ip"/>
70 <function name="The &quot;stun-port&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-port"/>
71 <function name="FsShmStreamTransmitter" link="farsight2-plugins-FsShmStreamTransmitter.html#FsShmStreamTransmitter"/>
58 <function name="The &quot;rtp-header-extensions&quot; 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"/>
7263 <function name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html#FsMsnCamSendConference"/>
7364 <function name="FsMsnCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html#FsMsnCamRecvConference"/>
7465 <function name="FsMsnConference" link="farsight2-plugins-FsMsnConference.html#FsMsnConference"/>
75 <function name="The &quot;local-address&quot; property" link="farsight2-plugins-FsMsnConference.html#FsMsnConference--local-address"/>
7666 <function name="FsMsnParticipant" link="farsight2-plugins-FsMsnParticipant.html#FsMsnParticipant"/>
7767 <function name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html#FsMsnSession"/>
78 <function name="The &quot;conference&quot; property" link="farsight2-plugins-FsMsnSession.html#FsMsnSession--conference"/>
7968 <function name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html#FsMsnStream"/>
80 <function name="The &quot;conference&quot; property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--conference"/>
81 <function name="The &quot;initial-port&quot; property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--initial-port"/>
82 <function name="The &quot;session-id&quot; 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"/>
8373 <function name="FsFunnel" link="farsight2-plugins-FsFunnel.html#FsFunnel"/>
8474 <function name="GstVideoanyrate" link="farsight2-plugins-GstVideoanyrate.html#GstVideoanyrate"/>
8575 </functions>
11 <!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
22 <book xmlns="http://www.devhelp.net/book" title="Farsight2 Plugins Manual" link="index.html" author="" name="farsight2-plugins" version="2" language="c">
33 <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">
66 <sub name="FsRtpConference" link="farsight2-plugins-FsRtpConference.html"/>
77 <sub name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html"/>
88 <sub name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html"/>
99 <sub name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html"/>
1010 </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"/>
1616 </sub>
17 </sub>
18 <sub name="MSN plugins" link="pt02.html">
1917 <sub name="MSN Webcam plugin" link="ch03.html">
2018 <sub name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html"/>
2119 <sub name="FsMsnCamCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html"/>
2422 <sub name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html"/>
2523 <sub name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html"/>
2624 </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"/>
2731 </sub>
2832 <sub name="Utility elements" link="pt03.html">
2933 <sub name="FsFunnel" link="farsight2-plugins-FsFunnel.html"/>
4246 <keyword type="property" name="The &quot;sdes&quot; property" link="farsight2-plugins-FsRtpConference.html#FsRtpConference--sdes"/>
4347 <keyword type="struct" name="FsRtpParticipant" link="farsight2-plugins-FsRtpParticipant.html#FsRtpParticipant"/>
4448 <keyword type="property" name="The &quot;cname&quot; 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"/>
4650 <keyword type="struct" name="FsRtpSession" link="farsight2-plugins-FsRtpSession.html#FsRtpSession"/>
4751 <keyword type="property" name="The &quot;no-rtcp-timeout&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--no-rtcp-timeout"/>
48 <keyword type="property" name="The &quot;conference&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--conference"/>
4952 <keyword type="property" name="The &quot;ssrc&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--ssrc"/>
5053 <keyword type="property" name="The &quot;send-bitrate&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--send-bitrate"/>
54 <keyword type="property" name="The &quot;rtp-header-extension-preferences&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extension-preferences"/>
55 <keyword type="property" name="The &quot;rtp-header-extensions&quot; property" link="farsight2-plugins-FsRtpSession.html#FsRtpSession--rtp-header-extensions"/>
5156 <keyword type="struct" name="FsRtpStream" link="farsight2-plugins-FsRtpStream.html#FsRtpStream"/>
5257 <keyword type="property" name="The &quot;stream-transmitter&quot; 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 &quot;stun-ip&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-ip"/>
55 <keyword type="property" name="The &quot;stun-port&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-port"/>
56 <keyword type="property" name="The &quot;stun-timeout&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--stun-timeout"/>
57 <keyword type="property" name="The &quot;upnp-discovery&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery"/>
58 <keyword type="property" name="The &quot;upnp-discovery-timeout&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-discovery-timeout"/>
59 <keyword type="property" name="The &quot;upnp-mapping&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping"/>
60 <keyword type="property" name="The &quot;upnp-mapping-timeout&quot; property" link="farsight2-plugins-FsRawUdpStreamTransmitter.html#FsRawUdpStreamTransmitter--upnp-mapping-timeout"/>
61 <keyword type="property" name="The &quot;upnp-request-timeout&quot; 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 &quot;compatibility-mode&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--compatibility-mode"/>
65 <keyword type="property" name="The &quot;controlling-mode&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--controlling-mode"/>
66 <keyword type="property" name="The &quot;debug&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--debug"/>
67 <keyword type="property" name="The &quot;relay-info&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--relay-info"/>
68 <keyword type="property" name="The &quot;stream-id&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stream-id"/>
69 <keyword type="property" name="The &quot;stun-ip&quot; property" link="farsight2-plugins-FsNiceStreamTransmitter.html#FsNiceStreamTransmitter--stun-ip"/>
70 <keyword type="property" name="The &quot;stun-port&quot; 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 &quot;rtp-header-extensions&quot; 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"/>
7263 <keyword type="struct" name="FsMsnCamSendConference" link="farsight2-plugins-FsMsnCamSendConference.html#FsMsnCamSendConference"/>
7364 <keyword type="struct" name="FsMsnCamRecvConference" link="farsight2-plugins-FsMsnCamCamRecvConference.html#FsMsnCamRecvConference"/>
7465 <keyword type="struct" name="FsMsnConference" link="farsight2-plugins-FsMsnConference.html#FsMsnConference"/>
75 <keyword type="property" name="The &quot;local-address&quot; property" link="farsight2-plugins-FsMsnConference.html#FsMsnConference--local-address"/>
7666 <keyword type="struct" name="FsMsnParticipant" link="farsight2-plugins-FsMsnParticipant.html#FsMsnParticipant"/>
7767 <keyword type="struct" name="FsMsnSession" link="farsight2-plugins-FsMsnSession.html#FsMsnSession"/>
78 <keyword type="property" name="The &quot;conference&quot; property" link="farsight2-plugins-FsMsnSession.html#FsMsnSession--conference"/>
7968 <keyword type="struct" name="FsMsnStream" link="farsight2-plugins-FsMsnStream.html#FsMsnStream"/>
80 <keyword type="property" name="The &quot;conference&quot; property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--conference"/>
81 <keyword type="property" name="The &quot;initial-port&quot; property" link="farsight2-plugins-FsMsnStream.html#FsMsnStream--initial-port"/>
82 <keyword type="property" name="The &quot;session-id&quot; 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"/>
8373 <keyword type="struct" name="FsFunnel" link="farsight2-plugins-FsFunnel.html#FsFunnel"/>
8474 <keyword type="struct" name="GstVideoanyrate" link="farsight2-plugins-GstVideoanyrate.html#GstVideoanyrate"/>
8575 </functions>
44 <title>Farsight2 Plugins Manual</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <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">
88 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
99 <link rel="stylesheet" href="style.css" type="text/css">
1010 </head>
1414 <div>
1515 <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>
1616 <div><p class="releaseinfo">
17 for version 0.0.22.1.
17 for version 0.0.23.1.
1818 The latest version of this documentation can be found on-line at
1919 <a class="ulink" href="http://farsight.freedesktop.org/apidoc/farsight2-plugins/" target="_top">http://farsight.freedesktop.org/apidoc/farsight2-plugins/</a>.
2020 These plugins are to be used with the base classes and other utility
2525 <hr>
2626 </div>
2727 <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>
2929 <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>
3131 <dd><dl>
3232 <dt>
3333 <span class="refentrytitle"><a href="farsight2-plugins-FsRtpConference.html">FsRtpConference</a></span><span class="refpurpose"> — Farsight RTP Conference Gstreamer Elements</span>
4242 <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>
4343 </dt>
4444 </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>
4646 <dd><dl>
4747 <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>
4949 </dt>
5050 <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>
5252 </dt>
5353 <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>
5555 </dt>
5656 <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>
5858 </dt>
5959 </dl></dd>
60 </dl></dd>
61 <dt><span class="part"><a href="pt02.html">II. MSN plugins</a></span></dt>
62 <dd><dl>
6360 <dt><span class="chapter"><a href="ch03.html">MSN Webcam plugin</a></span></dt>
6461 <dd><dl>
6562 <dt>
8279 </dt>
8380 </dl></dd>
8481 </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>
8597 <dt><span class="part"><a href="pt03.html">III. Utility elements</a></span></dt>
8698 <dd><dl>
8799 <dt>
2929 <ANCHOR id="FsRtpSession" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession">
3030 <ANCHOR id="farsight2-plugins-FsRtpSession.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#farsight2-plugins-FsRtpSession.property-details">
3131 <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">
3332 <ANCHOR id="FsRtpSession--ssrc" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpSession.html#FsRtpSession--ssrc">
3433 <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">
3536 <ANCHOR id="farsight2-plugins-FsRtpStream" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html">
3637 <ANCHOR id="farsight2-plugins-FsRtpStream.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#farsight2-plugins-FsRtpStream.synopsis">
3738 <ANCHOR id="farsight2-plugins-FsRtpStream.properties" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#farsight2-plugins-FsRtpStream.properties">
4041 <ANCHOR id="FsRtpStream" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#FsRtpStream">
4142 <ANCHOR id="farsight2-plugins-FsRtpStream.property-details" href="farsight2-plugins-0.10/farsight2-plugins-FsRtpStream.html#farsight2-plugins-FsRtpStream.property-details">
4243 <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">
8565 <ANCHOR id="farsight2-plugins-FsMsnCamSendConference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamSendConference.html">
8666 <ANCHOR id="farsight2-plugins-FsMsnCamSendConference.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamSendConference.html#farsight2-plugins-FsMsnCamSendConference.synopsis">
8767 <ANCHOR id="farsight2-plugins-FsMsnCamSendConference.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamSendConference.html#farsight2-plugins-FsMsnCamSendConference.description">
9474 <ANCHOR id="FsMsnCamRecvConference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnCamCamRecvConference.html#FsMsnCamRecvConference">
9575 <ANCHOR id="farsight2-plugins-FsMsnConference" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html">
9676 <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">
9877 <ANCHOR id="farsight2-plugins-FsMsnConference.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#farsight2-plugins-FsMsnConference.description">
9978 <ANCHOR id="farsight2-plugins-FsMsnConference.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnConference.html#farsight2-plugins-FsMsnConference.details">
10079 <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">
10380 <ANCHOR id="farsight2-plugins-FsMsnParticipant" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html">
10481 <ANCHOR id="farsight2-plugins-FsMsnParticipant.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html#farsight2-plugins-FsMsnParticipant.synopsis">
10582 <ANCHOR id="farsight2-plugins-FsMsnParticipant.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html#farsight2-plugins-FsMsnParticipant.description">
10784 <ANCHOR id="FsMsnParticipant" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnParticipant.html#FsMsnParticipant">
10885 <ANCHOR id="farsight2-plugins-FsMsnSession" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html">
10986 <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">
11187 <ANCHOR id="farsight2-plugins-FsMsnSession.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#farsight2-plugins-FsMsnSession.description">
11288 <ANCHOR id="farsight2-plugins-FsMsnSession.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnSession.html#farsight2-plugins-FsMsnSession.details">
11389 <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">
11690 <ANCHOR id="farsight2-plugins-FsMsnStream" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html">
11791 <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">
11992 <ANCHOR id="farsight2-plugins-FsMsnStream.description" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#farsight2-plugins-FsMsnStream.description">
12093 <ANCHOR id="farsight2-plugins-FsMsnStream.details" href="farsight2-plugins-0.10/farsight2-plugins-FsMsnStream.html#farsight2-plugins-FsMsnStream.details">
12194 <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">
126118 <ANCHOR id="farsight2-plugins-FsFunnel" href="farsight2-plugins-0.10/farsight2-plugins-FsFunnel.html">
127119 <ANCHOR id="farsight2-plugins-FsFunnel.synopsis" href="farsight2-plugins-0.10/farsight2-plugins-FsFunnel.html#farsight2-plugins-FsFunnel.synopsis">
128120 <ANCHOR id="farsight2-plugins-FsFunnel.description" href="farsight2-plugins-0.10/farsight2-plugins-FsFunnel.html#farsight2-plugins-FsFunnel.description">
11 <html>
22 <head>
33 <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>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="Farsight2 Plugins Manual">
77 <link rel="up" href="index.html" title="Farsight2 Plugins Manual">
88 <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">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1818 <th width="100%" align="center">Farsight2 Plugins Manual</th>
1919 <td><a accesskey="n" href="ch01.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2020 </tr></table>
21 <div class="part" title="Part I. RTP Plugin">
21 <div class="part" title="Part I. Plugins implementing FsConference">
2222 <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>
2424 <div class="toc">
2525 <p><b>Table of Contents</b></p>
2626 <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>
2828 <dd><dl>
2929 <dt>
3030 <span class="refentrytitle"><a href="farsight2-plugins-FsRtpConference.html">FsRtpConference</a></span><span class="refpurpose"> — Farsight RTP Conference Gstreamer Elements</span>
3939 <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>
4040 </dt>
4141 </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>
4343 <dd><dl>
4444 <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>
4646 </dt>
4747 <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>
4949 </dt>
5050 <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>
5252 </dt>
5353 <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>
5576 </dt>
5677 </dl></dd>
5778 </dl>
11 <html>
22 <head>
33 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Part II. MSN plugins</title>
4 <title>Part II. Transmitters</title>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="Farsight2 Plugins Manual">
77 <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">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <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>
1616 <td> </td>
1717 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1818 <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>
2020 </tr></table>
21 <div class="part" title="Part II. MSN plugins">
21 <div class="part" title="Part II. Transmitters">
2222 <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>
2424 <div class="toc">
2525 <p><b>Table of Contents</b></p>
2626 <dl>
27 <dt><span class="chapter"><a href="ch03.html">MSN Webcam plugin</a></span></dt>
28 <dd><dl>
2927 <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>
3129 </dt>
3230 <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>
3432 </dt>
3533 <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>
3735 </dt>
3836 <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>
4038 </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>
4839 </dl>
4940 </div>
5041 </div>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="Farsight2 Plugins Manual">
77 <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">
99 <link rel="next" href="farsight2-plugins-FsFunnel.html" title="FsFunnel">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <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>
1616 <td> </td>
1717 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1818 <th width="100%" align="center">Farsight2 Plugins Manual</th>
2020 </tr></table>
2121 <div class="part" title="Part III. Utility elements">
2222 <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>
2424 <div class="toc">
2525 <p><b>Table of Contents</b></p>
2626 <dl>
+0
-55
docs/plugins/inspect/plugin-fsfec.xml less more
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 &lt;olivier.crete@collabora.co.uk&gt;</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 &lt;olivier.crete@collabora.co.uk&gt;</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>
22 <description>Farsight Funnel plugin</description>
33 <filename>../../gst/funnel/.libs/libfsfunnel.so</filename>
44 <basename>libfsfunnel.so</basename>
5 <version>0.0.22.1</version>
5 <version>0.0.21.1</version>
66 <license>LGPL</license>
77 <source>farsight2</source>
88 <package>Farsight</package>
22 <description>Farsight MSN Conference plugin</description>
33 <filename>../../gst/fsmsnconference/.libs/libfsmsnconference.so</filename>
44 <basename>libfsmsnconference.so</basename>
5 <version>0.0.22.1</version>
5 <version>0.0.21.1</version>
66 <license>LGPL</license>
77 <source>farsight2</source>
88 <package>Farsight</package>
22 <description>Farsight Raw Conference plugin</description>
33 <filename>../../gst/fsrawconference/.libs/libfsrawconference.so</filename>
44 <basename>libfsrawconference.so</basename>
5 <version>0.0.22.1</version>
5 <version>0.0.21.1</version>
66 <license>LGPL</license>
77 <source>farsight2</source>
88 <package>Farsight</package>
22 <description>RtcpFilter</description>
33 <filename>../../gst/rtcpfilter/.libs/libfsrtcpfilter.so</filename>
44 <basename>libfsrtcpfilter.so</basename>
5 <version>0.0.22.1</version>
5 <version>0.0.21.1</version>
66 <license>LGPL</license>
77 <source>farsight2</source>
88 <package>Farsight</package>
22 <description>Farsight RTP Conference plugin</description>
33 <filename>../../gst/fsrtpconference/.libs/libfsrtpconference.so</filename>
44 <basename>libfsrtpconference.so</basename>
5 <version>0.0.22.1</version>
5 <version>0.0.21.1</version>
66 <license>LGPL</license>
77 <source>farsight2</source>
88 <package>Farsight</package>
22 <description>Videoanyrate</description>
33 <filename>../../gst/videoanyrate/.libs/libfsvideoanyrate.so</filename>
44 <basename>libfsvideoanyrate.so</basename>
5 <version>0.0.22.1</version>
5 <version>0.0.21.1</version>
66 <license>LGPL</license>
77 <source>farsight2</source>
88 <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__ */
5959
6060 libfsrtpconference_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
6161
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
6269 # Optionally build a library to allow building the gtk-doc
6370
6471 if ENABLE_GTK_DOC
2121 #glib_enum_define=GST_COLOR_BALANCE
2222 #glib_gen_prefix=gst_color_balance
2323 #glib_gen_basename=colorbalance
24
2425
2526
2627 VPATH = @srcdir@
9798 am__base_list = \
9899 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
99100 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
100 am__installdirs = "$(DESTDIR)$(plugindir)"
101 am__installdirs = "$(DESTDIR)$(plugindir)" \
102 "$(DESTDIR)$(preferencesdir)"
101103 LTLIBRARIES = $(noinst_LTLIBRARIES) $(plugin_LTLIBRARIES)
102104 libfsrtpconference_convenience_la_LIBADD =
103105 am_libfsrtpconference_convenience_la_OBJECTS = fs-rtp-conference.lo \
168170 $(nodist_libfsrtpconference_doc_la_SOURCES)
169171 DIST_SOURCES = $(libfsrtpconference_convenience_la_SOURCES) \
170172 $(libfsrtpconference_la_SOURCES)
173 DATA = $(preferences_DATA)
171174 HEADERS = $(noinst_HEADERS)
172175 ETAGS = etags
173176 CTAGS = ctags
428431 -lgstrtp-@GST_MAJORMINOR@
429432
430433 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)
431440 @ENABLE_GTK_DOC_TRUE@nodist_libfsrtpconference_doc_la_SOURCES = \
432441 @ENABLE_GTK_DOC_TRUE@ fs-rtp-conference-plugin.doc.c \
433442 @ENABLE_GTK_DOC_TRUE@ $(nodist_libfsrtpconference_la_SOURCES)
570579
571580 clean-libtool:
572581 -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
573602
574603 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
575604 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
656685 check-am: all-am
657686 check: $(BUILT_SOURCES)
658687 $(MAKE) $(AM_MAKEFLAGS) check-am
659 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
688 all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
660689 installdirs:
661 for dir in "$(DESTDIR)$(plugindir)"; do \
690 for dir in "$(DESTDIR)$(plugindir)" "$(DESTDIR)$(preferencesdir)"; do \
662691 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
663692 done
664693 install: $(BUILT_SOURCES)
712741
713742 info-am:
714743
715 install-data-am: install-pluginLTLIBRARIES
744 install-data-am: install-pluginLTLIBRARIES install-preferencesDATA
716745
717746 install-dvi: install-dvi-am
718747
758787
759788 ps-am:
760789
761 uninstall-am: uninstall-pluginLTLIBRARIES
790 uninstall-am: uninstall-pluginLTLIBRARIES uninstall-preferencesDATA
762791
763792 .MAKE: all check install install-am install-strip
764793
770799 install-data-am install-dvi install-dvi-am install-exec \
771800 install-exec-am install-html install-html-am install-info \
772801 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
779809
780810
781811 @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
1111 fs-stream-transmitter.h \
1212 fs-plugin.h \
1313 fs-element-added-notifier.h \
14 fs-interfaces.h
14 fs-interfaces.h \
15 fs-utils.h
1516
1617 nodist_libgstfarsightinclude_HEADERS = \
1718 fs-enum-types.h
4142 fs-plugin.c \
4243 fs-element-added-notifier.c \
4344 fs-interfaces.c \
45 fs-utils.c \
4446 fs-private.h
4547
4648 nodist_libgstfarsight_@GST_MAJORMINOR@_la_SOURCES = \
8082 fs-participant.h \
8183 fs-session.h \
8284 fs-stream.h \
83 fs-conference-iface.h
85 fs-conference-iface.h \
86 fs-utils.h
8487
8588 glib_enum_headers=$(public_headers)
8689 glib_enum_define=FS
113113 libgstfarsight_@GST_MAJORMINOR@_la-fs-stream-transmitter.lo \
114114 libgstfarsight_@GST_MAJORMINOR@_la-fs-plugin.lo \
115115 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
117118 nodist_libgstfarsight_@GST_MAJORMINOR@_la_OBJECTS = \
118119 libgstfarsight_@GST_MAJORMINOR@_la-fs-marshal.lo \
119120 libgstfarsight_@GST_MAJORMINOR@_la-fs-enumtypes.lo
373374 fs-stream-transmitter.h \
374375 fs-plugin.h \
375376 fs-element-added-notifier.h \
376 fs-interfaces.h
377 fs-interfaces.h \
378 fs-utils.h
377379
378380 nodist_libgstfarsightinclude_HEADERS = \
379381 fs-enum-types.h
397399 fs-plugin.c \
398400 fs-element-added-notifier.c \
399401 fs-interfaces.c \
402 fs-utils.c \
400403 fs-private.h
401404
402405 nodist_libgstfarsight_@GST_MAJORMINOR@_la_SOURCES = \
424427 fs-participant.h \
425428 fs-session.h \
426429 fs-stream.h \
427 fs-conference-iface.h
430 fs-conference-iface.h \
431 fs-utils.h
428432
429433 glib_enum_headers = $(public_headers)
430434 glib_enum_define = FS
520524 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-stream-transmitter.Plo@am__quote@
521525 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfarsight_@GST_MAJORMINOR@_la-fs-stream.Plo@am__quote@
522526 @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@
523528
524529 .c.o:
525530 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
640645 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fs-interfaces.c' object='libgstfarsight_@GST_MAJORMINOR@_la-fs-interfaces.lo' libtool=yes @AMDEPBACKSLASH@
641646 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
642647 @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
643656
644657 libgstfarsight_@GST_MAJORMINOR@_la-fs-marshal.lo: fs-marshal.c
645658 @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__ */
4848 transmitter/multicast \
4949 transmitter/nice \
5050 transmitter/shm \
51 raw/conference \
5152 rtp/codecs \
5253 rtp/sendcodecs \
5354 rtp/conference \
121122 transmitter/generic.h \
122123 transmitter/shm.c
123124
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
124132 rtp_conference_CFLAGS = $(AM_CFLAGS)
125133 rtp_conference_SOURCES = \
126134 check-threadsafe.h \
3737 check_PROGRAMS = base/fscodec$(EXEEXT) base/fstransmitter$(EXEEXT) \
3838 transmitter/rawudp$(EXEEXT) transmitter/multicast$(EXEEXT) \
3939 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)
4445 subdir = tests/check
4546 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4647 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
116117 msn_conference_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
117118 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
118119 $(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 \
119131 $@
120132 am_rtp_codecs_OBJECTS = rtp_codecs-generic.$(OBJEXT) \
121133 rtp_codecs-codecs.$(OBJEXT)
238250 am__v_GEN_0 = @echo " GEN " $@;
239251 SOURCES = $(base_fscodec_SOURCES) base/fstransmitter.c \
240252 $(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)
246259 DIST_SOURCES = $(base_fscodec_SOURCES) base/fstransmitter.c \
247260 $(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)
253267 ETAGS = etags
254268 CTAGS = ctags
255269 am__tty_colors = \
549563 transmitter/generic.h \
550564 transmitter/shm.c
551565
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
552573 rtp_conference_CFLAGS = $(AM_CFLAGS)
553574 rtp_conference_SOURCES = \
554575 check-threadsafe.h \
653674 msn/conference$(EXEEXT): $(msn_conference_OBJECTS) $(msn_conference_DEPENDENCIES) msn/$(am__dirstamp)
654675 @rm -f msn/conference$(EXEEXT)
655676 $(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)
656683 rtp/$(am__dirstamp):
657684 @$(MKDIR_P) rtp
658685 @: > rtp/$(am__dirstamp)
701728 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fscodec.Po@am__quote@
702729 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstransmitter.Po@am__quote@
703730 @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@
704733 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recvcodecs.Po@am__quote@
705734 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtp_codecs-codecs.Po@am__quote@
706735 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtp_codecs-generic.Po@am__quote@
830859 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
831860 @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`
832861
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
833894 rtp_codecs-generic.o: rtp/generic.c
834895 @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
835896 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/rtp_codecs-generic.Tpo $(DEPDIR)/rtp_codecs-generic.Po
12061267 -rm -rf base/.libs base/_libs
12071268 -rm -rf elements/.libs elements/_libs
12081269 -rm -rf msn/.libs msn/_libs
1270 -rm -rf raw/.libs raw/_libs
12091271 -rm -rf rtp/.libs rtp/_libs
12101272 -rm -rf transmitter/.libs transmitter/_libs
12111273 -rm -rf utils/.libs utils/_libs
14151477 -rm -f base/$(am__dirstamp)
14161478 -rm -f elements/$(am__dirstamp)
14171479 -rm -f msn/$(am__dirstamp)
1480 -rm -f raw/$(am__dirstamp)
14181481 -rm -f rtp/$(am__dirstamp)
14191482 -rm -f transmitter/$(am__dirstamp)
14201483 -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 (&params[st_param_count].value, G_TYPE_BOOLEAN);
1047 g_value_set_boolean (&params[st_param_count].value, FALSE);
1048
1049 params[st_param_count+1].name = "upnp-mapping";
1050 g_value_init (&params[st_param_count+1].value, G_TYPE_BOOLEAN);
1051 g_value_set_boolean (&params[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);
143143 "SimpleTestStream");
144144 gboolean ret;
145145 GError *error = NULL;
146 struct SimpleTestStream *other_st = find_pointback_stream (st->target,
147 st->dat);
146 struct SimpleTestStream *other_st;
148147 GList *candidates = NULL;
149148
150 if (candidate->component_id == FS_COMPONENT_RTCP && no_rtcp)
149 TEST_LOCK ();
150
151 if (st->target == NULL)
152 {
153 TEST_UNLOCK ();
151154 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 }
152164
153165 st->got_candidates = TRUE;
154166
167179
168180 ts_fail_unless (ret == TRUE, "No detailed error from add_remote_candidate");
169181
182 TEST_UNLOCK ();
170183 }
171184
172185 static void
772785 fs_codec_list_destroy (codecs);
773786 }
774787
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,
779796 guint st_param_count, GParameter *st_params)
780797 {
781798 int i, j;
813830 g_free (tmp);
814831
815832 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);
816837
817838 rtpconference_connect_signals (dats[i]);
818839 g_idle_add (_start_pipeline, dats[i]);
837858 st->handoff_handler = G_CALLBACK (_handoff_handler);
838859 g_signal_connect (st->stream, "src-pad-added",
839860 G_CALLBACK (_src_pad_added), st);
861 if (extra_stream_init)
862 extra_stream_init (st, i, j);
840863 }
841864
842 if (extrainit)
843 extrainit ();
844865
845866 for (i = 1; i < count; i++)
846867 {
868889
869890 GST_START_TEST (test_rtpconference_two_way)
870891 {
871 nway_test (2, NULL, "rawudp", 0, NULL);
892 nway_test (2, NULL, NULL, "rawudp", 0, NULL);
872893 }
873894 GST_END_TEST;
874895
875896
876897 GST_START_TEST (test_rtpconference_three_way)
877898 {
878 nway_test (3, NULL, "rawudp", 0, NULL);
899 nway_test (3, NULL, NULL, "rawudp", 0, NULL);
879900 }
880901 GST_END_TEST;
881902
882903
883904 GST_START_TEST (test_rtpconference_ten_way)
884905 {
885 nway_test (10, NULL, "rawudp", 0, NULL);
906 nway_test (10, NULL, NULL, "rawudp", 0, NULL);
886907 }
887908 GST_END_TEST;
888909
925946 {
926947 select_last_codec = TRUE;
927948 max_src_pads = 2;
928 nway_test (2, NULL, "rawudp", 0, NULL);
949 nway_test (2, NULL, NULL, "rawudp", 0, NULL);
929950 select_last_codec = FALSE;
930951 max_src_pads = 1;
931952 }
936957 {
937958 reset_to_last_codec = TRUE;
938959 max_src_pads = 2;
939 nway_test (2, NULL, "rawudp", 0, NULL);
960 nway_test (2, NULL, NULL, "rawudp", 0, NULL);
940961 reset_to_last_codec = FALSE;
941962 max_src_pads = 1;
942963 }
963984
964985 }
965986
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 }
9891001 }
9901002
9911003 GST_START_TEST (test_rtpconference_recv_only)
9921004 {
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 }
10201025 }
10211026
10221027 GST_START_TEST (test_rtpconference_send_only)
10231028 {
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;
10301035
10311036 static void
10321037 _switch_handoff_handler (GstElement *element, GstBuffer *buffer, GstPad *pad,
10451050
10461051
10471052 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);
10551060 }
10561061
10571062 GST_START_TEST (test_rtpconference_change_to_send_only)
10581063 {
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);
10601065 }
10611066 GST_END_TEST;
10621067
10651070 {
10661071 no_rtcp = TRUE;
10671072
1068 nway_test (2, NULL, "rawudp", 0, NULL);
1073 nway_test (2, NULL, NULL, "rawudp", 0, NULL);
10691074
10701075 no_rtcp = FALSE;
10711076 }
10751080
10761081 #if 0
10771082 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);
10921087 }
10931088
10941089 GST_START_TEST (test_rtpconference_three_way_cname_assoc)
10991094 g_value_init (&param.value, G_TYPE_BOOLEAN);
11001095 g_value_set_boolean (&param.value, FALSE);
11011096
1102 nway_test (3, associate_cnames_init, "rawudp", 1, &param);
1097 nway_test (3, NULL, associate_cnames_init, "rawudp", 1, &param);
11031098 }
11041099 GST_END_TEST;
11051100
11071102
11081103
11091104 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 {
11141107 GList *prefs = NULL;
11151108 FsCodec *codec = NULL;
11161109 gboolean ret;
11201113 "audioconvert ! audioresample ! audioconvert ! mulawenc ! rtppcmupay");
11211114 prefs = g_list_append (NULL, codec);
11221115
1123 ret = fs_session_set_codec_preferences (st1->dat->session, prefs,
1116 ret = fs_session_set_codec_preferences (st->dat->session, prefs,
11241117 NULL);
11251118 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");
11291119
11301120 fs_codec_list_destroy (prefs);
11311121
11341124
11351125 GST_START_TEST (test_rtpconference_simple_profile)
11361126 {
1137 nway_test (2, _simple_profile_init, "rawudp", 0, NULL);
1127 nway_test (2, NULL, _simple_profile_init, "rawudp", 0, NULL);
11381128 }
11391129 GST_END_TEST;
11401130
11921182 }
11931183
11941184 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 {
11991187 GList *prefs = NULL;
12001188 FsCodec *codec = NULL;
12011189 gboolean ret;
12021190
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);
12051192
12061193 codec = fs_codec_new (0, "PCMU", FS_MEDIA_TYPE_AUDIO, 8000);
12071194 fs_codec_add_optional_parameter (codec, "farsight-send-profile",
12101197 "t. ! audioconvert ! audioresample ! audioconvert ! alawenc ! rtppcmapay");
12111198 prefs = g_list_append (NULL, codec);
12121199
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);
12151201 ts_fail_unless (ret, "set codec prefs");
12161202
1217 ret = fs_session_set_codec_preferences (st2->dat->session, prefs,
1218 NULL);
1219 ts_fail_unless (ret, "set codec prefs");
1220
12211203 fs_codec_list_destroy (prefs);
12221204 }
12231205
12241206 GST_START_TEST (test_rtpconference_double_codec_profile)
12251207 {
12261208 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);
12281210 max_src_pads = 1;
12291211 }
12301212 GST_END_TEST;
13061288 }
13071289 GST_END_TEST;
13081290
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 {
13151294 GList *candidates = NULL;
13161295 FsCandidate *cand;
1296 GError *error = NULL;
13171297
13181298 cand = fs_candidate_new ("1", FS_COMPONENT_RTP,
13191299 FS_CANDIDATE_TYPE_MULTICAST, FS_NETWORK_PROTOCOL_UDP, "224.0.0.11",
13261306 cand->port = 2325;
13271307 candidates = g_list_prepend (candidates, cand);
13281308
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");
13421312
13431313 fs_candidate_list_destroy (candidates);
13441314 }
13461316 #if 0
13471317
13481318 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);
13531323 }
13541324
13551325
13611331 return;
13621332 g_free (mcast_addr);
13631333
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);
13661335 }
13671336 GST_END_TEST;
13681337
13781347 }
13791348
13801349 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);
14021360 }
14031361
14041362
14101368 return;
14111369 g_free (mcast_addr);
14121370
1413 mcast_confs = 3;
14141371 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);
14161373 max_src_pads = 1;
14171374 }
14181375 GST_END_TEST;
14461403 g_main_loop_quit (loop);
14471404 }
14481405
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);
14651411 }
14661412
14671413 GST_START_TEST (test_rtpconference_unref_session_in_pad_added)
14681414 {
1469 nway_test (2, unref_session_init, "rawudp", 0, NULL);
1415 nway_test (2, NULL, unref_session_init, "rawudp", 0, NULL);
14701416 }
14711417 GST_END_TEST;
14721418
15161462 return GST_BUS_DROP;
15171463 }
15181464
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);
15311472 }
15321473
15331474 GST_START_TEST (test_rtpconference_unref_stream_in_nice_thread_prepared)
15341475 {
15351476 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);
15371478 }
15381479 GST_END_TEST;
15391480
15401481 GST_START_TEST (test_rtpconference_unref_stream_in_nice_thread_new_active)
15411482 {
15421483 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);
15441485 }
15451486 GST_END_TEST;
15461487
15471488 GST_START_TEST (test_rtpconference_unref_stream_in_nice_thread_state_changed)
15481489 {
15491490 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);
15511492 }
15521493 GST_END_TEST;
15531494
9999
100100 volatile gint associate_on_source;
101101
102 gboolean *component_has_been_ready; /* only from NiceAgent main thread */
103
102104 /* Everything below is protected by the mutex */
103105
104106 gboolean sending;
105107
106108 gboolean forced_candidates;
107109 GList *remote_candidates;
110 GList *local_candidates;
108111
109112 /* These are fixed and must be identical in the latest draft */
110113 gchar *username;
438441 fs_candidate_list_destroy (self->priv->preferred_local_candidates);
439442
440443 fs_candidate_list_destroy (self->priv->remote_candidates);
444 fs_candidate_list_destroy (self->priv->local_candidates);
441445
442446 if (self->priv->relay_info)
443447 g_value_array_free (self->priv->relay_info);
448452
449453 g_free (self->priv->username);
450454 g_free (self->priv->password);
455
456 g_free (self->priv->component_has_been_ready);
451457
452458 parent_class->finalize (object);
453459 }
13161322 }
13171323
13181324 FS_PARTICIPANT_DATA_UNLOCK (participant);
1325
1326 self->priv->component_has_been_ready = g_new0 (gboolean,
1327 self->priv->transmitter->components);
13191328
13201329 self->priv->stream_id = nice_agent_add_stream (
13211330 self->priv->agent->agent,
14681477 gpointer user_data)
14691478 {
14701479 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;
14741482
14751483 if (stream_id != self->priv->stream_id)
14761484 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);
14771497
14781498 GST_DEBUG ("Stream: %u Component %u has state %u",
14791499 self->priv->stream_id, component_id, state);
16231643
16241644 if (fscandidate)
16251645 {
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,
16331675 data, free_candidate_signal_data);
1676 }
16341677 }
16351678 else
16361679 {
16461689 {
16471690 FsNiceStreamTransmitter *self = data;
16481691 GList *remote_candidates = NULL;
1692 GList *local_candidates = NULL;
16491693 gboolean forced_candidates;
16501694
16511695 FS_NICE_STREAM_TRANSMITTER_LOCK (self);
16581702 self->priv->gathered = TRUE;
16591703 remote_candidates = self->priv->remote_candidates;
16601704 self->priv->remote_candidates = NULL;
1705 local_candidates = self->priv->local_candidates;
1706 self->priv->local_candidates = NULL;
16611707 forced_candidates = self->priv->forced_candidates;
16621708 FS_NICE_STREAM_TRANSMITTER_UNLOCK (self);
16631709
16641710 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 }
16651720
16661721 g_signal_emit_by_name (self, "local-candidates-prepared");
16671722
3636 * send data and one to receive data. The receiver always connects to the
3737 * sender. The sender socket must exist before the receiver connects to it.
3838 *
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
4047 * with the path of the socket in the "ip" field of the #FsCandidate. This
4148 * #FsCandidate can be given to the #FsStreamTransmitter in two ways, either
4249 * by setting the #FsStreamTransmitter:preferred-local-candidates property
6370
6471 #include <gst/gst.h>
6572
73 #include <glib/gstdio.h>
74
6675 #include <string.h>
6776 #include <sys/types.h>
6877
7079 # include <unistd.h>
7180 #endif
7281
82 #include <stdlib.h>
83
7384 GST_DEBUG_CATEGORY_EXTERN (fs_shm_transmitter_debug);
7485 #define GST_CAT_DEFAULT fs_shm_transmitter_debug
7586
8495 {
8596 PROP_0,
8697 PROP_SENDING,
87 PROP_PREFERRED_LOCAL_CANDIDATES
98 PROP_PREFERRED_LOCAL_CANDIDATES,
99 PROP_CREATE_LOCAL_CANDIDATES,
88100 };
89101
90102 struct _FsShmStreamTransmitterPrivate
104116
105117 /* Protected by the mutex */
106118 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;
107126
108127 ShmSrc **shm_src;
109128 ShmSink **shm_sink;
182201 GObjectClass *gobject_class = (GObjectClass *) klass;
183202 FsStreamTransmitterClass *streamtransmitterclass =
184203 FS_STREAM_TRANSMITTER_CLASS (klass);
204 GParamSpec *pspec;
185205
186206 parent_class = g_type_class_peek_parent (klass);
187207
196216 g_object_class_override_property (gobject_class, PROP_SENDING, "sending");
197217 g_object_class_override_property (gobject_class,
198218 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
199229
200230 gobject_class->dispose = fs_shm_stream_transmitter_dispose;
201231 gobject_class->finalize = fs_shm_stream_transmitter_finalize;
237267 self->priv->shm_sink[c] = NULL;
238268 }
239269
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
240275 parent_class->dispose (object);
241276 }
242277
269304 break;
270305 case PROP_PREFERRED_LOCAL_CANDIDATES:
271306 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);
272310 break;
273311 default:
274312 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
302340 case PROP_PREFERRED_LOCAL_CANDIDATES:
303341 self->priv->preferred_local_candidates = g_value_dup_boxed (value);
304342 break;
343 case PROP_CREATE_LOCAL_CANDIDATES:
344 self->priv->create_local_candidates = g_value_get_boolean (value);
345 break;
305346 default:
306347 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
307348 break;
356397 fs_shm_stream_transmitter_add_sink (FsShmStreamTransmitter *self,
357398 FsCandidate *candidate, GError **error)
358399 {
400 if (self->priv->create_local_candidates)
401 return TRUE;
402
359403 if (!candidate->ip || !candidate->ip[0])
360404 return TRUE;
361405
386430 FsShmStreamTransmitter *self, FsCandidate *candidate,
387431 GError **error)
388432 {
433 const gchar *path;
389434 if (!fs_shm_stream_transmitter_add_sink (self, candidate, error))
390435 return FALSE;
391436
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 {
395444 if (self->priv->shm_src[candidate->component_id])
396445 {
397446 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))
400448 return TRUE;
401449 self->priv->shm_src[candidate->component_id] = NULL;
402450 }
403451
404452 self->priv->shm_src[candidate->component_id] =
405453 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);
408455
409456 if (self->priv->shm_src[candidate->component_id] == NULL)
410457 return FALSE;
493540 FS_SHM_STREAM_TRANSMITTER (streamtransmitter);
494541 GList *item;
495542
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
496575 for (item = self->priv->preferred_local_candidates;
497576 item;
498577 item = g_list_next (item))