conference.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. /*
  2. * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  3. * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. */
  19. #ifndef __PJMEDIA_CONF_H__
  20. #define __PJMEDIA_CONF_H__
  21. /**
  22. * @file conference.h
  23. * @brief Conference bridge.
  24. */
  25. #include <pjmedia/port.h>
  26. /**
  27. * @defgroup PJMEDIA_CONF Conference Bridge
  28. * @ingroup PJMEDIA_PORT
  29. * @brief Audio conference bridge implementation
  30. * @{
  31. *
  32. * This describes the conference bridge implementation in PJMEDIA. The
  33. * conference bridge provides powerful and very efficient mechanism to
  34. * route the audio flow and mix the audio signal when required.
  35. *
  36. * Some more information about the media flow when conference bridge is
  37. * used is described in http://www.pjsip.org/trac/wiki/media-flow .
  38. */
  39. PJ_BEGIN_DECL
  40. /* Since 1.3 pjmedia_conf_add_passive_port() has been deprecated
  41. * and replaced by splitcomb.
  42. * See also https://github.com/pjsip/pjproject/issues/2234.
  43. */
  44. #ifndef DEPRECATED_FOR_TICKET_2234
  45. # define DEPRECATED_FOR_TICKET_2234 1
  46. #endif
  47. /**
  48. * The conference bridge signature in pjmedia_port_info.
  49. */
  50. #define PJMEDIA_CONF_BRIDGE_SIGNATURE PJMEDIA_SIG_PORT_CONF
  51. /**
  52. * The audio switchboard signature in pjmedia_port_info.
  53. */
  54. #define PJMEDIA_CONF_SWITCH_SIGNATURE PJMEDIA_SIG_PORT_CONF_SWITCH
  55. /**
  56. * Opaque type for conference bridge.
  57. */
  58. typedef struct pjmedia_conf pjmedia_conf;
  59. /**
  60. * Conference port info.
  61. */
  62. typedef struct pjmedia_conf_port_info
  63. {
  64. unsigned slot; /**< Slot number. */
  65. pj_str_t name; /**< Port name. */
  66. pjmedia_format format; /**< Format. */
  67. pjmedia_port_op tx_setting; /**< Transmit settings. */
  68. pjmedia_port_op rx_setting; /**< Receive settings. */
  69. unsigned listener_cnt; /**< Number of listeners. */
  70. unsigned *listener_slots; /**< Array of listeners. */
  71. unsigned *listener_adj_level; /**< Array of listeners' level
  72. adjustment */
  73. unsigned transmitter_cnt; /**< Number of transmitter. */
  74. unsigned clock_rate; /**< Clock rate of the port. */
  75. unsigned channel_count; /**< Number of channels. */
  76. unsigned samples_per_frame; /**< Samples per frame */
  77. unsigned bits_per_sample; /**< Bits per sample. */
  78. int tx_adj_level; /**< Tx level adjustment. */
  79. int rx_adj_level; /**< Rx level adjustment. */
  80. } pjmedia_conf_port_info;
  81. /**
  82. * Conference port options. The values here can be combined in bitmask to
  83. * be specified when the conference bridge is created.
  84. */
  85. enum pjmedia_conf_option
  86. {
  87. PJMEDIA_CONF_NO_MIC = 1, /**< Disable audio streams from the
  88. microphone device. */
  89. PJMEDIA_CONF_NO_DEVICE = 2, /**< Do not create sound device. */
  90. PJMEDIA_CONF_SMALL_FILTER=4,/**< Use small filter table when resampling */
  91. PJMEDIA_CONF_USE_LINEAR=8 /**< Use linear resampling instead of filter
  92. based. */
  93. };
  94. /**
  95. * Create conference bridge with the specified parameters. The sampling rate,
  96. * samples per frame, and bits per sample will be used for the internal
  97. * operation of the bridge (e.g. when mixing audio frames). However, ports
  98. * with different configuration may be connected to the bridge. In this case,
  99. * the bridge is able to perform sampling rate conversion, and buffering in
  100. * case the samples per frame is different.
  101. *
  102. * For this version of PJMEDIA, only 16bits per sample is supported.
  103. *
  104. * For this version of PJMEDIA, the channel count of the ports MUST match
  105. * the channel count of the bridge.
  106. *
  107. * Under normal operation (i.e. when PJMEDIA_CONF_NO_DEVICE option is NOT
  108. * specified), the bridge internally create an instance of sound device
  109. * and connect the sound device to port zero of the bridge.
  110. *
  111. * If PJMEDIA_CONF_NO_DEVICE options is specified, no sound device will
  112. * be created in the conference bridge. Application MUST acquire the port
  113. * interface of the bridge by calling #pjmedia_conf_get_master_port(), and
  114. * connect this port interface to a sound device port by calling
  115. * #pjmedia_snd_port_connect(), or to a master port (pjmedia_master_port)
  116. * if application doesn't want to instantiate any sound devices.
  117. *
  118. * The sound device or master port are crucial for the bridge's operation,
  119. * because it provides the bridge with necessary clock to process the audio
  120. * frames periodically. Internally, the bridge runs when get_frame() to
  121. * port zero is called.
  122. *
  123. * @param pool Pool to use to allocate the bridge and
  124. * additional buffers for the sound device.
  125. * @param max_slots Maximum number of slots/ports to be created in
  126. * the bridge. Note that the bridge internally uses
  127. * one port for the sound device, so the actual
  128. * maximum number of ports will be less one than
  129. * this value.
  130. * @param sampling_rate Set the sampling rate of the bridge. This value
  131. * is also used to set the sampling rate of the
  132. * sound device.
  133. * @param channel_count Number of channels in the PCM stream. Normally
  134. * the value will be 1 for mono, but application may
  135. * specify a value of 2 for stereo. Note that all
  136. * ports that will be connected to the bridge MUST
  137. * have the same number of channels as the bridge.
  138. * @param samples_per_frame Set the number of samples per frame. This value
  139. * is also used to set the sound device.
  140. * @param bits_per_sample Set the number of bits per sample. This value
  141. * is also used to set the sound device. Currently
  142. * only 16bit per sample is supported.
  143. * @param options Bitmask options to be set for the bridge. The
  144. * options are constructed from #pjmedia_conf_option
  145. * enumeration.
  146. * @param p_conf Pointer to receive the conference bridge instance.
  147. *
  148. * @return PJ_SUCCESS if conference bridge can be created.
  149. */
  150. PJ_DECL(pj_status_t) pjmedia_conf_create( pj_pool_t *pool,
  151. unsigned max_slots,
  152. unsigned sampling_rate,
  153. unsigned channel_count,
  154. unsigned samples_per_frame,
  155. unsigned bits_per_sample,
  156. unsigned options,
  157. pjmedia_conf **p_conf );
  158. /**
  159. * Destroy conference bridge.
  160. *
  161. * @param conf The conference bridge.
  162. *
  163. * @return PJ_SUCCESS on success.
  164. */
  165. PJ_DECL(pj_status_t) pjmedia_conf_destroy( pjmedia_conf *conf );
  166. /**
  167. * Get the master port interface of the conference bridge. The master port
  168. * corresponds to the port zero of the bridge. This is only usefull when
  169. * application wants to manage the sound device by itself, instead of
  170. * allowing the bridge to automatically create a sound device implicitly.
  171. *
  172. * This function will only return a port interface if PJMEDIA_CONF_NO_DEVICE
  173. * option was specified when the bridge was created.
  174. *
  175. * Application can connect the port returned by this function to a
  176. * sound device by calling #pjmedia_snd_port_connect().
  177. *
  178. * @param conf The conference bridge.
  179. *
  180. * @return The port interface of port zero of the bridge,
  181. * only when PJMEDIA_CONF_NO_DEVICE options was
  182. * specified when the bridge was created.
  183. */
  184. PJ_DECL(pjmedia_port*) pjmedia_conf_get_master_port(pjmedia_conf *conf);
  185. /**
  186. * Set master port name.
  187. *
  188. * @param conf The conference bridge.
  189. * @param name Name to be assigned.
  190. *
  191. * @return PJ_SUCCESS on success.
  192. */
  193. PJ_DECL(pj_status_t) pjmedia_conf_set_port0_name(pjmedia_conf *conf,
  194. const pj_str_t *name);
  195. /**
  196. * Add media port to the conference bridge.
  197. *
  198. * By default, the new conference port will have both TX and RX enabled,
  199. * but it is not connected to any other ports. Application SHOULD call
  200. * #pjmedia_conf_connect_port() to enable audio transmission and receipt
  201. * to/from this port.
  202. *
  203. * Once the media port is connected to other port(s) in the bridge,
  204. * the bridge will continuosly call get_frame() and put_frame() to the
  205. * port, allowing media to flow to/from the port.
  206. *
  207. * @param conf The conference bridge.
  208. * @param pool Pool to allocate buffers for this port.
  209. * @param strm_port Stream port interface.
  210. * @param name Optional name for the port. If this value is NULL,
  211. * the name will be taken from the name in the port
  212. * info.
  213. * @param p_slot Pointer to receive the slot index of the port in
  214. * the conference bridge.
  215. *
  216. * @return PJ_SUCCESS on success.
  217. */
  218. PJ_DECL(pj_status_t) pjmedia_conf_add_port( pjmedia_conf *conf,
  219. pj_pool_t *pool,
  220. pjmedia_port *strm_port,
  221. const pj_str_t *name,
  222. unsigned *p_slot );
  223. #if !DEPRECATED_FOR_TICKET_2234
  224. /**
  225. * <i><b>Warning:</b> This API has been deprecated since 1.3 and will be
  226. * removed in the future release, use @ref PJMEDIA_SPLITCOMB instead.</i>
  227. *
  228. * Create and add a passive media port to the conference bridge. Unlike
  229. * "normal" media port that is added with #pjmedia_conf_add_port(), media
  230. * port created with this function will not have its get_frame() and
  231. * put_frame() called by the bridge; instead, application MUST continuosly
  232. * call these functions to the port, to allow media to flow from/to the
  233. * port.
  234. *
  235. * Upon return of this function, application will be given two objects:
  236. * the slot number of the port in the bridge, and pointer to the media
  237. * port where application MUST start calling get_frame() and put_frame()
  238. * to the port.
  239. *
  240. * @param conf The conference bridge.
  241. * @param pool Pool to allocate buffers etc for this port.
  242. * @param name Name to be assigned to the port.
  243. * @param clock_rate Clock rate/sampling rate.
  244. * @param channel_count Number of channels.
  245. * @param samples_per_frame Number of samples per frame.
  246. * @param bits_per_sample Number of bits per sample.
  247. * @param options Options (should be zero at the moment).
  248. * @param p_slot Pointer to receive the slot index of the port in
  249. * the conference bridge.
  250. * @param p_port Pointer to receive the port instance.
  251. *
  252. * @return PJ_SUCCESS on success, or the appropriate error
  253. * code.
  254. */
  255. PJ_DECL(pj_status_t) pjmedia_conf_add_passive_port( pjmedia_conf *conf,
  256. pj_pool_t *pool,
  257. const pj_str_t *name,
  258. unsigned clock_rate,
  259. unsigned channel_count,
  260. unsigned samples_per_frame,
  261. unsigned bits_per_sample,
  262. unsigned options,
  263. unsigned *p_slot,
  264. pjmedia_port **p_port );
  265. #endif
  266. /**
  267. * Change TX and RX settings for the port.
  268. *
  269. * @param conf The conference bridge.
  270. * @param slot Port number/slot in the conference bridge.
  271. * @param tx Settings for the transmission TO this port.
  272. * @param rx Settings for the receipt FROM this port.
  273. *
  274. * @return PJ_SUCCESS on success.
  275. */
  276. PJ_DECL(pj_status_t) pjmedia_conf_configure_port( pjmedia_conf *conf,
  277. unsigned slot,
  278. pjmedia_port_op tx,
  279. pjmedia_port_op rx);
  280. /**
  281. * Enable unidirectional audio from the specified source slot to the specified
  282. * sink slot.
  283. * Application may adjust the level to make signal transmitted from the source
  284. * slot to the sink slot either louder or more quiet. The level adjustment is
  285. * calculated with this formula:
  286. * <b><tt>output = input * (adj_level+128) / 128</tt></b>. Using this, zero
  287. * indicates no adjustment, the value -128 will mute the signal, and the value
  288. * of +128 will make the signal 100% louder, +256 will make it 200% louder,
  289. * etc.
  290. *
  291. * The level adjustment will apply to a specific connection only (i.e. only
  292. * for the signal from the source to the sink), as compared to
  293. * pjmedia_conf_adjust_tx_level()/pjmedia_conf_adjust_rx_level() which
  294. * applies to all signals from/to that port. The signal adjustment
  295. * will be cumulative, in this following order:
  296. * signal from the source will be adjusted with the level specified
  297. * in pjmedia_conf_adjust_rx_level(), then with the level specified
  298. * via this API, and finally with the level specified to the sink's
  299. * pjmedia_conf_adjust_tx_level().
  300. *
  301. * @param conf The conference bridge.
  302. * @param src_slot Source slot.
  303. * @param sink_slot Sink slot.
  304. * @param adj_level Adjustment level, which must be greater than or equal
  305. * to -128. A value of zero means there is no level
  306. * adjustment to be made, the value -128 will mute the
  307. * signal, and the value of +128 will make the signal
  308. * 100% louder, +256 will make it 200% louder, etc.
  309. * See the function description for the formula.
  310. *
  311. * @return PJ_SUCCES on success.
  312. */
  313. PJ_DECL(pj_status_t) pjmedia_conf_connect_port( pjmedia_conf *conf,
  314. unsigned src_slot,
  315. unsigned sink_slot,
  316. int adj_level );
  317. /**
  318. * Disconnect unidirectional audio from the specified source to the specified
  319. * sink slot.
  320. *
  321. * @param conf The conference bridge.
  322. * @param src_slot Source slot.
  323. * @param sink_slot Sink slot.
  324. *
  325. * @return PJ_SUCCESS on success.
  326. */
  327. PJ_DECL(pj_status_t) pjmedia_conf_disconnect_port( pjmedia_conf *conf,
  328. unsigned src_slot,
  329. unsigned sink_slot );
  330. /**
  331. * Disconnect unidirectional audio from all sources to the specified sink slot.
  332. *
  333. * @param conf The conference bridge.
  334. * @param sink_slot Sink slot.
  335. *
  336. * @return PJ_SUCCESS on success.
  337. */
  338. PJ_DECL(pj_status_t)
  339. pjmedia_conf_disconnect_port_from_sources( pjmedia_conf *conf,
  340. unsigned sink_slot);
  341. /**
  342. * Disconnect unidirectional audio from the specified source to all sink slots.
  343. *
  344. * @param conf The conference bridge.
  345. * @param src_slot Source slot.
  346. *
  347. * @return PJ_SUCCESS on success.
  348. */
  349. PJ_DECL(pj_status_t)
  350. pjmedia_conf_disconnect_port_from_sinks( pjmedia_conf *conf,
  351. unsigned src_slot);
  352. /**
  353. * Get number of ports currently registered to the conference bridge.
  354. *
  355. * @param conf The conference bridge.
  356. *
  357. * @return Number of ports currently registered to the conference
  358. * bridge.
  359. */
  360. PJ_DECL(unsigned) pjmedia_conf_get_port_count(pjmedia_conf *conf);
  361. /**
  362. * Get total number of ports connections currently set up in the bridge.
  363. *
  364. * @param conf The conference bridge.
  365. *
  366. * @return PJ_SUCCESS on success.
  367. */
  368. PJ_DECL(unsigned) pjmedia_conf_get_connect_count(pjmedia_conf *conf);
  369. /**
  370. * Remove the specified port from the conference bridge.
  371. *
  372. * @param conf The conference bridge.
  373. * @param slot The port index to be removed.
  374. *
  375. * @return PJ_SUCCESS on success.
  376. */
  377. PJ_DECL(pj_status_t) pjmedia_conf_remove_port( pjmedia_conf *conf,
  378. unsigned slot );
  379. /**
  380. * Enumerate occupied ports in the bridge.
  381. *
  382. * @param conf The conference bridge.
  383. * @param ports Array of port numbers to be filled in.
  384. * @param count On input, specifies the maximum number of ports
  385. * in the array. On return, it will be filled with
  386. * the actual number of ports.
  387. *
  388. * @return PJ_SUCCESS on success.
  389. */
  390. PJ_DECL(pj_status_t) pjmedia_conf_enum_ports( pjmedia_conf *conf,
  391. unsigned ports[],
  392. unsigned *count );
  393. /**
  394. * Get port info.
  395. *
  396. * @param conf The conference bridge.
  397. * @param slot Port index.
  398. * @param info Pointer to receive the info.
  399. *
  400. * @return PJ_SUCCESS on success.
  401. */
  402. PJ_DECL(pj_status_t) pjmedia_conf_get_port_info( pjmedia_conf *conf,
  403. unsigned slot,
  404. pjmedia_conf_port_info *info);
  405. /**
  406. * Get occupied ports info.
  407. *
  408. * @param conf The conference bridge.
  409. * @param size On input, contains maximum number of infos
  410. * to be retrieved. On output, contains the actual
  411. * number of infos that have been copied.
  412. * @param info Array of info.
  413. *
  414. * @return PJ_SUCCESS on success.
  415. */
  416. PJ_DECL(pj_status_t) pjmedia_conf_get_ports_info(pjmedia_conf *conf,
  417. unsigned *size,
  418. pjmedia_conf_port_info info[]
  419. );
  420. /**
  421. * Get last signal level transmitted to or received from the specified port.
  422. * This will retrieve the "real-time" signal level of the audio as they are
  423. * transmitted or received by the specified port. Application may call this
  424. * function periodically to display the signal level to a VU meter.
  425. *
  426. * The signal level is an integer value in zero to 255, with zero indicates
  427. * no signal, and 255 indicates the loudest signal level.
  428. *
  429. * @param conf The conference bridge.
  430. * @param slot Slot number.
  431. * @param tx_level Optional argument to receive the level of signal
  432. * transmitted to the specified port (i.e. the direction
  433. * is from the bridge to the port).
  434. * @param rx_level Optional argument to receive the level of signal
  435. * received from the port (i.e. the direction is from the
  436. * port to the bridge).
  437. *
  438. * @return PJ_SUCCESS on success.
  439. */
  440. PJ_DECL(pj_status_t) pjmedia_conf_get_signal_level(pjmedia_conf *conf,
  441. unsigned slot,
  442. unsigned *tx_level,
  443. unsigned *rx_level);
  444. /**
  445. * Adjust the level of signal received from the specified port.
  446. * Application may adjust the level to make signal received from the port
  447. * either louder or more quiet. The level adjustment is calculated with this
  448. * formula: <b><tt>output = input * (adj_level+128) / 128</tt></b>. Using
  449. * this, zero indicates no adjustment, the value -128 will mute the signal,
  450. * and the value of +128 will make the signal 100% louder, +256 will make it
  451. * 200% louder, etc.
  452. *
  453. * The level adjustment value will stay with the port until the port is
  454. * removed from the bridge or new adjustment value is set. The current
  455. * level adjustment value is reported in the media port info when
  456. * the #pjmedia_conf_get_port_info() function is called.
  457. *
  458. * @param conf The conference bridge.
  459. * @param slot Slot number of the port.
  460. * @param adj_level Adjustment level, which must be greater than or equal
  461. * to -128. A value of zero means there is no level
  462. * adjustment to be made, the value -128 will mute the
  463. * signal, and the value of +128 will make the signal
  464. * 100% louder, +256 will make it 200% louder, etc.
  465. * See the function description for the formula.
  466. *
  467. * @return PJ_SUCCESS on success.
  468. */
  469. PJ_DECL(pj_status_t) pjmedia_conf_adjust_rx_level( pjmedia_conf *conf,
  470. unsigned slot,
  471. int adj_level );
  472. /**
  473. * Adjust the level of signal to be transmitted to the specified port.
  474. * Application may adjust the level to make signal transmitted to the port
  475. * either louder or more quiet. The level adjustment is calculated with this
  476. * formula: <b><tt>output = input * (adj_level+128) / 128</tt></b>. Using
  477. * this, zero indicates no adjustment, the value -128 will mute the signal,
  478. * and the value of +128 will make the signal 100% louder, +256 will make it
  479. * 200% louder, etc.
  480. *
  481. * The level adjustment value will stay with the port until the port is
  482. * removed from the bridge or new adjustment value is set. The current
  483. * level adjustment value is reported in the media port info when
  484. * the #pjmedia_conf_get_port_info() function is called.
  485. *
  486. * @param conf The conference bridge.
  487. * @param slot Slot number of the port.
  488. * @param adj_level Adjustment level, which must be greater than or equal
  489. * to -128. A value of zero means there is no level
  490. * adjustment to be made, the value -128 will mute the
  491. * signal, and the value of +128 will make the signal
  492. * 100% louder, +256 will make it 200% louder, etc.
  493. * See the function description for the formula.
  494. *
  495. * @return PJ_SUCCESS on success.
  496. */
  497. PJ_DECL(pj_status_t) pjmedia_conf_adjust_tx_level( pjmedia_conf *conf,
  498. unsigned slot,
  499. int adj_level );
  500. /**
  501. * Adjust the level of signal to be transmitted from the source slot to the
  502. * sink slot.
  503. * Application may adjust the level to make signal transmitted from the source
  504. * slot to the sink slot either louder or more quiet. The level adjustment is
  505. * calculated with this formula:
  506. * <b><tt>output = input * (adj_level+128) / 128</tt></b>. Using this, zero
  507. * indicates no adjustment, the value -128 will mute the signal, and the value
  508. * of +128 will make the signal 100% louder, +256 will make it 200% louder,
  509. * etc.
  510. *
  511. * The level adjustment value will stay with the connection until the
  512. * connection is removed or new adjustment value is set. The current level
  513. * adjustment value is reported in the media port info when the
  514. * #pjmedia_conf_get_port_info() function is called.
  515. *
  516. * @param conf The conference bridge.
  517. * @param src_slot Source slot.
  518. * @param sink_slot Sink slot.
  519. * @param adj_level Adjustment level, which must be greater than or equal
  520. * to -128. A value of zero means there is no level
  521. * adjustment to be made, the value -128 will mute the
  522. * signal, and the value of +128 will make the signal
  523. * 100% louder, +256 will make it 200% louder, etc.
  524. * See the function description for the formula.
  525. *
  526. * @return PJ_SUCCESS on success.
  527. */
  528. PJ_DECL(pj_status_t) pjmedia_conf_adjust_conn_level( pjmedia_conf *conf,
  529. unsigned src_slot,
  530. unsigned sink_slot,
  531. int adj_level );
  532. PJ_END_DECL
  533. /**
  534. * @}
  535. */
  536. #endif /* __PJMEDIA_CONF_H__ */