This file is indexed.

/usr/include/pjmedia-codec/passthrough.h is in libpjproject-dev 2.7.2~dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
/* $Id: passthrough.h 3553 2011-05-05 06:14:19Z nanang $ */
/* 
 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 */
#ifndef __PJMEDIA_CODECS_PASSTHROUGH_H__
#define __PJMEDIA_CODECS_PASSTHROUGH_H__

/**
 * @file pjmedia-codec/passthrough.h
 * @brief Passthrough codecs.
 */

#include <pjmedia-codec/types.h>

/**
 * @defgroup PJMED_PASSTHROUGH_CODEC Passthrough Codecs
 * @ingroup PJMEDIA_CODEC_CODECS
 * @brief Implementation of passthrough codecs
 * @{
 *
 * This section describes functions to initialize and register passthrough 
 * codecs factory to the codec manager. After the codec factory has been 
 * registered, application can use @ref PJMEDIA_CODEC API to manipulate 
 * the codec.
 *
 * Passthrough codecs are codecs wrapper that does NOT perform encoding 
 * or decoding, it just PACK and PARSE encoded audio data from/into RTP 
 * payload. This will accomodate pjmedia ports which work with encoded
 * audio data, e.g: encoded audio files, sound device with capability
 * of playing/recording encoded audio data.
 *
 * This codec factory contains various codecs, i.e: G.729, iLBC,
 * AMR, and G.711.
 *
 *
 * \section pjmedia_codec_passthrough_g729 Passthrough G.729
 *
 * G.729 supports 16-bit PCM audio signal with sampling rate 8000Hz, 
 * frame length 10ms, and resulting in bitrate 8000bps.
 *
 * \subsection codec_setting Codec Settings
 *
 * General codec settings for this codec such as VAD and PLC can be 
 * manipulated through the <tt>setting</tt> field in #pjmedia_codec_param. 
 * Please see the documentation of #pjmedia_codec_param for more info.
 *
 * Note that G.729 VAD status should be signalled in SDP, see more
 * description below.
 *
 * \subsubsection annexb Annex B
 *
 * The capability of VAD/DTX is specified in Annex B.
 *
 * By default, Annex B is enabled. This default setting of Annex B can 
 * be modified using #pjmedia_codec_mgr_set_default_param().
 *
 * In #pjmedia_codec_param, Annex B is configured via VAD setting and
 * format parameter "annexb" in the SDP "a=fmtp" attribute in
 * decoding fmtp field. Valid values are "yes" and "no",
 * the implementation default is "yes". When this parameter is omitted
 * in the SDP, the value will be "yes" (RFC 4856 Section 2.1.9).
 *
 * Here is an example of modifying default setting of Annex B to
 * be disabled using #pjmedia_codec_mgr_set_default_param():
 \code
    pjmedia_codec_param param;

    pjmedia_codec_mgr_get_default_param(.., &param);
    ...
    // Set VAD
    param.setting.vad = 0;
    // Set SDP format parameter
    param.setting.dec_fmtp.cnt = 1;
    param.setting.dec_fmtp.param[0].name = pj_str("annexb");
    param.setting.dec_fmtp.param[0].val  = pj_str("no");
    ...
    pjmedia_codec_mgr_set_default_param(.., &param);
 \endcode
 *
 * \note
 * The difference of Annex B status in SDP offer/answer may be considered as 
 * incompatible codec in SDP negotiation.
 *
 * 
 * \section pjmedia_codec_passthrough_ilbc Passthrough iLBC
 *
 * The iLBC codec is developed by Global IP Solutions (GIPS), formerly 
 * Global IP Sound. The iLBC offers low bitrate and graceful audio quality 
 * degradation on frame losses.
 *
 * The iLBC codec supports 16-bit PCM audio signal with sampling rate of 
 * 8000Hz operating at two modes: 20ms and 30ms frame length modes, resulting
 * in bitrates of 15.2kbps for 20ms mode and 13.33kbps for 30ms mode.
 *
 * \subsection codec_setting Codec Settings
 *
 * General codec settings for this codec such as VAD and PLC can be 
 * manipulated through the <tt>setting</tt> field in #pjmedia_codec_param. 
 * Please see the documentation of #pjmedia_codec_param for more info.
 *
 * \subsubsection mode Mode
 *
 * The default mode should be set upon initialization, see
 * #pjmedia_codec_passthrough_init2(). After the codec is initialized, the
 * default mode can be modified using #pjmedia_codec_mgr_set_default_param().
 *
 * In #pjmedia_codec_param, iLBC mode can be set by specifying SDP
 * format parameter "mode" in the SDP "a=fmtp" attribute for decoding
 * direction. Valid values are "20" and "30" (for 20ms and 30ms mode 
 * respectively).
 *
 * Here is an example to set up #pjmedia_codec_param to use mode 20ms:
 *  \code
    pjmedia_codec_param param;
    ...
    // setting iLBC mode in SDP
    param.setting.dec_fmtp.cnt = 1;
    param.setting.dec_fmtp.param[0].name = pj_str("mode");
    param.setting.dec_fmtp.param[0].val  = pj_str("20");
    ...
 \endcode
 *
 *
 * \section pjmedia_codec_passthrough_amr Passthrough AMR
 *
 * IPP AMR supports 16-bit PCM audio signal with sampling rate 8000Hz,
 * 20ms frame length and producing various bitrates that ranges from 4.75kbps
 * to 12.2kbps.
 *
 * \subsection codec_setting Codec Settings
 *
 * General codec settings for this codec such as VAD and PLC can be 
 * manipulated through the <tt>setting</tt> field in #pjmedia_codec_param. 
 * Please see the documentation of #pjmedia_codec_param for more info.
 *
 * \subsubsection bitrate Bitrate
 *
 * By default, encoding bitrate is 7400bps. This default setting can be 
 * modified using #pjmedia_codec_mgr_set_default_param() by specifying 
 * prefered AMR bitrate in field <tt>info::avg_bps</tt> of 
 * #pjmedia_codec_param. Valid bitrates could be seen in 
 * #pjmedia_codec_amrnb_bitrates.
 *
 * \subsubsection payload_format Payload Format
 *
 * There are two AMR payload format types, bandwidth-efficient and
 * octet-aligned. Default setting is using octet-aligned. This default payload
 * format can be modified using #pjmedia_codec_mgr_set_default_param().
 *
 * In #pjmedia_codec_param, payload format can be set by specifying SDP 
 * format parameters "octet-align" in the SDP "a=fmtp" attribute for 
 * decoding direction. Valid values are "0" (for bandwidth efficient mode)
 * and "1" (for octet-aligned mode).
 *
 * \subsubsection mode_set Mode-Set
 * 
 * Mode-set is used for restricting AMR modes in decoding direction.
 *
 * By default, no mode-set restriction applied. This default setting can be 
 * be modified using #pjmedia_codec_mgr_set_default_param().
 *
 * In #pjmedia_codec_param, mode-set could be specified via format parameters
 * "mode-set" in the SDP "a=fmtp" attribute for decoding direction. Valid 
 * value is a comma separated list of modes from the set 0 - 7, e.g: 
 * "4,5,6,7". When this parameter is omitted, no mode-set restrictions applied.
 *
 * Here is an example of modifying AMR default codec param:
 \code
    pjmedia_codec_param param;

    pjmedia_codec_mgr_get_default_param(.., &param);
    ...
    // set default encoding bitrate to the highest 12.2kbps
    param.info.avg_bps = 12200;

    // restrict decoding bitrate to 10.2kbps and 12.2kbps only
    param.setting.dec_fmtp.param[0].name = pj_str("mode-set");
    param.setting.dec_fmtp.param[0].val  = pj_str("6,7");

    // also set to use bandwidth-efficient payload format
    param.setting.dec_fmtp.param[1].name = pj_str("octet-align");
    param.setting.dec_fmtp.param[1].val  = pj_str("0");

    param.setting.dec_fmtp.cnt = 2;
    ...
    pjmedia_codec_mgr_set_default_param(.., &param);
 \endcode
 * 
 *
 * \section pjmedia_codec_passthrough_g711 Passthrough G.711
 *
 * The G.711 is an ultra low complexity codecs and in trade-off it results
 * in high bitrate, i.e: 64kbps for 16-bit PCM with sampling rate 8000Hz.
 *
 * The factory contains two main compression algorithms, PCMU/u-Law and 
 * PCMA/A-Law.
 *
 * \subsection codec_setting Codec Settings
 *
 * General codec settings for this codec such as VAD and PLC can be 
 * manipulated through the <tt>setting</tt> field in #pjmedia_codec_param. 
 * Please see the documentation of #pjmedia_codec_param for more info.
 */

PJ_BEGIN_DECL


/** 
 * Codec passthrough configuration settings.
 */
typedef struct pjmedia_codec_passthrough_setting
{
    unsigned		 fmt_cnt;	/**< Number of encoding formats
					     to be enabled.		*/
    pjmedia_format	*fmts;		/**< Encoding formats to be 
					     enabled.			*/
    unsigned		 ilbc_mode;	/**< iLBC default mode.		*/
} pjmedia_codec_passthrough_setting;


/**
 * Initialize and register passthrough codecs factory to pjmedia endpoint,
 * all supported encoding formats will be enabled.
 *
 * @param endpt	    The pjmedia endpoint.
 *
 * @return	    PJ_SUCCESS on success.
 */
PJ_DECL(pj_status_t) pjmedia_codec_passthrough_init( pjmedia_endpt *endpt );


/**
 * Initialize and register passthrough codecs factory to pjmedia endpoint
 * with only specified encoding formats enabled.
 *
 * @param endpt	    The pjmedia endpoint.
 * @param setting   The settings.
 *
 * @return	    PJ_SUCCESS on success.
 */
PJ_DECL(pj_status_t) pjmedia_codec_passthrough_init2(
		       pjmedia_endpt *endpt,
		       const pjmedia_codec_passthrough_setting *setting);


/**
 * Unregister passthrough codecs factory from pjmedia endpoint.
 *
 * @return	    PJ_SUCCESS on success.
 */
PJ_DECL(pj_status_t) pjmedia_codec_passthrough_deinit(void);


PJ_END_DECL


/**
 * @}
 */

#endif	/* __PJMEDIA_CODECS_PASSTHROUGH_H__ */