Mon May 14 04:47:58 2007

Asterisk developer's documentation


frame.h File Reference

Asterisk internal frame definitions. More...

#include <sys/types.h>
#include <sys/time.h>
#include "asterisk/compiler.h"
#include "asterisk/endian.h"
#include "asterisk/linkedlists.h"

Include dependency graph for frame.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ast_codec_pref
struct  ast_format_list
 Definition of supported media formats (codecs). More...
struct  ast_frame
 Data structure associated with a single frame of data. More...
struct  ast_option_header
struct  oprmode

Defines

#define AST_FORMAT_ADPCM   (1 << 5)
#define AST_FORMAT_ALAW   (1 << 3)
#define AST_FORMAT_AUDIO_MASK   ((1 << 16)-1)
#define AST_FORMAT_G722   (1 << 12)
#define AST_FORMAT_G723_1   (1 << 0)
#define AST_FORMAT_G726   (1 << 11)
#define AST_FORMAT_G726_AAL2   (1 << 4)
#define AST_FORMAT_G729A   (1 << 8)
#define AST_FORMAT_GSM   (1 << 1)
#define AST_FORMAT_H261   (1 << 18)
#define AST_FORMAT_H263   (1 << 19)
#define AST_FORMAT_H263_PLUS   (1 << 20)
#define AST_FORMAT_H264   (1 << 21)
#define AST_FORMAT_ILBC   (1 << 10)
#define AST_FORMAT_JPEG   (1 << 16)
#define AST_FORMAT_LPC10   (1 << 7)
#define AST_FORMAT_MAX_AUDIO   (1 << 15)
#define AST_FORMAT_MAX_VIDEO   (1 << 24)
#define AST_FORMAT_MP4_VIDEO   (1 << 22)
#define AST_FORMAT_PNG   (1 << 17)
#define AST_FORMAT_SLINEAR   (1 << 6)
#define AST_FORMAT_SPEEX   (1 << 9)
#define AST_FORMAT_ULAW   (1 << 2)
#define AST_FORMAT_VIDEO_MASK   (((1 << 25)-1) & ~(AST_FORMAT_AUDIO_MASK))
#define ast_frame_byteswap_be(fr)   do { struct ast_frame *__f = (fr); ast_swapcopy_samples(__f->data, __f->data, __f->samples); } while(0)
#define ast_frame_byteswap_le(fr)   do { ; } while(0)
#define AST_FRAME_DTMF   AST_FRAME_DTMF_END
#define AST_FRAME_SET_BUFFER(fr, _base, _ofs, _datalen)
#define AST_FRIENDLY_OFFSET   64
#define AST_HTML_BEGIN   4
#define AST_HTML_DATA   2
#define AST_HTML_END   8
#define AST_HTML_LDCOMPLETE   16
#define AST_HTML_LINKREJECT   20
#define AST_HTML_LINKURL   18
#define AST_HTML_NOSUPPORT   17
#define AST_HTML_UNLINK   19
#define AST_HTML_URL   1
#define AST_MALLOCD_DATA   (1 << 1)
#define AST_MALLOCD_HDR   (1 << 0)
#define AST_MALLOCD_SRC   (1 << 2)
#define AST_MIN_OFFSET   32
#define AST_MODEM_T38   1
#define AST_MODEM_V150   2
#define AST_OPTION_AUDIO_MODE   4
#define AST_OPTION_ECHOCAN   8
#define AST_OPTION_FLAG_ACCEPT   1
#define AST_OPTION_FLAG_ANSWER   5
#define AST_OPTION_FLAG_QUERY   4
#define AST_OPTION_FLAG_REJECT   2
#define AST_OPTION_FLAG_REQUEST   0
#define AST_OPTION_FLAG_WTF   6
#define AST_OPTION_OPRMODE   7
#define AST_OPTION_RELAXDTMF   3
#define AST_OPTION_RXGAIN   6
#define AST_OPTION_TDD   2
#define AST_OPTION_TONE_VERIFY   1
#define AST_OPTION_TXGAIN   5
#define ast_smoother_feed(s, f)   __ast_smoother_feed(s, f, 0)
#define ast_smoother_feed_be(s, f)   __ast_smoother_feed(s, f, 1)
#define ast_smoother_feed_le(s, f)   __ast_smoother_feed(s, f, 0)
#define AST_SMOOTHER_FLAG_BE   (1 << 1)
#define AST_SMOOTHER_FLAG_G729   (1 << 0)

Enumerations

enum  ast_control_frame_type {
  AST_CONTROL_HANGUP = 1, AST_CONTROL_RING = 2, AST_CONTROL_RINGING = 3, AST_CONTROL_ANSWER = 4,
  AST_CONTROL_BUSY = 5, AST_CONTROL_TAKEOFFHOOK = 6, AST_CONTROL_OFFHOOK = 7, AST_CONTROL_CONGESTION = 8,
  AST_CONTROL_FLASH = 9, AST_CONTROL_WINK = 10, AST_CONTROL_OPTION = 11, AST_CONTROL_RADIO_KEY = 12,
  AST_CONTROL_RADIO_UNKEY = 13, AST_CONTROL_PROGRESS = 14, AST_CONTROL_PROCEEDING = 15, AST_CONTROL_HOLD = 16,
  AST_CONTROL_UNHOLD = 17, AST_CONTROL_VIDUPDATE = 18
}
enum  ast_frame_type {
  AST_FRAME_DTMF_END = 1, AST_FRAME_VOICE, AST_FRAME_VIDEO, AST_FRAME_CONTROL,
  AST_FRAME_NULL, AST_FRAME_IAX, AST_FRAME_TEXT, AST_FRAME_IMAGE,
  AST_FRAME_HTML, AST_FRAME_CNG, AST_FRAME_MODEM, AST_FRAME_DTMF_BEGIN
}
 Frame types. More...

Functions

int __ast_smoother_feed (struct ast_smoother *s, struct ast_frame *f, int swap)
char * ast_codec2str (int codec)
 Get a name from a format Gets a name from a format.
int ast_codec_choose (struct ast_codec_pref *pref, int formats, int find_best)
 Select the best audio format according to preference list from supplied options. If "find_best" is non-zero then if nothing is found, the "Best" format of the format list is selected, otherwise 0 is returned.
int ast_codec_get_len (int format, int samples)
 Returns the number of bytes for the number of samples of the given format.
int ast_codec_get_samples (struct ast_frame *f)
 Returns the number of samples contained in the frame.
static int ast_codec_interp_len (int format)
 Gets duration in ms of interpolation frame for a format.
int ast_codec_pref_append (struct ast_codec_pref *pref, int format)
 Append a audio codec to a preference list, removing it first if it was already there.
void ast_codec_pref_convert (struct ast_codec_pref *pref, char *buf, size_t size, int right)
 Shift an audio codec preference list up or down 65 bytes so that it becomes an ASCII string.
ast_format_list ast_codec_pref_getsize (struct ast_codec_pref *pref, int format)
 Get packet size for codec.
int ast_codec_pref_index (struct ast_codec_pref *pref, int index)
 Codec located at a particular place in the preference index See Audio Codec Preferences.
void ast_codec_pref_init (struct ast_codec_pref *pref)
 Initialize an audio codec preference to "no preference" See Audio Codec Preferences.
void ast_codec_pref_remove (struct ast_codec_pref *pref, int format)
 Remove audio a codec from a preference list.
int ast_codec_pref_setsize (struct ast_codec_pref *pref, int format, int framems)
 Set packet size for codec.
int ast_codec_pref_string (struct ast_codec_pref *pref, char *buf, size_t size)
 Dump audio codec preference list into a string.
int ast_frame_adjust_volume (struct ast_frame *f, int adjustment)
 Adjusts the volume of the audio samples contained in a frame.
void ast_frame_dump (const char *name, struct ast_frame *f, char *prefix)
ast_frameast_frame_enqueue (struct ast_frame *head, struct ast_frame *f, int maxlen, int dupe)
 Appends a frame to the end of a list of frames, truncating the maximum length of the list.
void ast_frame_free (struct ast_frame *fr, int cache)
 Requests a frame to be allocated Frees a frame.
int ast_frame_slinear_sum (struct ast_frame *f1, struct ast_frame *f2)
 Sums two frames of audio samples.
ast_frameast_frdup (const struct ast_frame *fr)
 Copies a frame.
static void force_inline ast_frfree (struct ast_frame *fr)
ast_frameast_frisolate (struct ast_frame *fr)
 Makes a frame independent of any static storage.
ast_format_listast_get_format_list (size_t *size)
ast_format_listast_get_format_list_index (int index)
int ast_getformatbyname (const char *name)
 Gets a format from a name.
char * ast_getformatname (int format)
 Get the name of a format.
char * ast_getformatname_multiple (char *buf, size_t size, int format)
 Get the names of a set of formats.
void ast_parse_allow_disallow (struct ast_codec_pref *pref, int *mask, const char *list, int allowing)
 Parse an "allow" or "deny" line in a channel or device configuration and update the capabilities mask and pref if provided. Video codecs are not added to codec preference lists, since we can not transcode.
void ast_smoother_free (struct ast_smoother *s)
int ast_smoother_get_flags (struct ast_smoother *smoother)
ast_smootherast_smoother_new (int bytes)
ast_frameast_smoother_read (struct ast_smoother *s)
void ast_smoother_reset (struct ast_smoother *s, int bytes)
void ast_smoother_set_flags (struct ast_smoother *smoother, int flags)
int ast_smoother_test_flag (struct ast_smoother *s, int flag)
void ast_swapcopy_samples (void *dst, const void *src, int samples)

Variables

ast_frame ast_null_frame


Detailed Description

Asterisk internal frame definitions.

Definition in file frame.h.


Define Documentation

#define AST_FORMAT_ADPCM   (1 << 5)

ADPCM (IMA)

Definition at line 230 of file frame.h.

Referenced by adpcmtolin_sample(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), convertcap(), vox_read(), and vox_write().

#define AST_FORMAT_ALAW   (1 << 3)

Raw A-law data (G.711)

Definition at line 226 of file frame.h.

Referenced by alawtolin_sample(), alawtoulaw_sample(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_dsp_process(), cb_events(), codec_ast2skinny(), codec_skinny2ast(), convertcap(), misdn_read(), misdn_set_opt_exec(), oh323_rtp_read(), pcm_seek(), pcm_write(), read_config(), sms_generate(), zt_new(), zt_read(), and zt_write().

#define AST_FORMAT_AUDIO_MASK   ((1 << 16)-1)

Maximum audio mask

Definition at line 248 of file frame.h.

Referenced by add_sdp(), ast_best_codec(), ast_codec_choose(), ast_openstream_full(), ast_parse_allow_disallow(), ast_request(), ast_translate_available_formats(), begin_dial(), func_channel_read(), gtalk_rtp_read(), process_sdp(), set_format(), sip_call(), sip_rtp_read(), and sip_write().

#define AST_FORMAT_G722   (1 << 12)

G.722

Definition at line 244 of file frame.h.

Referenced by ast_best_codec(), ast_codec_get_samples(), convertcap(), and g722tolin_sample().

#define AST_FORMAT_G723_1   (1 << 0)

G.723.1 compression

Definition at line 220 of file frame.h.

Referenced by ast_best_codec(), ast_codec_get_samples(), codec_ast2skinny(), codec_skinny2ast(), convertcap(), g723_read(), g723_write(), load_module(), phone_request(), phone_setup(), and phone_write().

#define AST_FORMAT_G726   (1 << 11)

ADPCM (G.726, 32kbps, RFC3551 codeword packing)

Definition at line 242 of file frame.h.

Referenced by ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_rtp_set_rtpmap_type(), g726_read(), g726_write(), and g726tolin_sample().

#define AST_FORMAT_G726_AAL2   (1 << 4)

ADPCM (G.726, 32kbps, AAL2 codeword packing)

Definition at line 228 of file frame.h.

Referenced by ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_rtp_lookup_mime_subtype(), ast_rtp_set_rtpmap_type(), codec_ast2skinny(), and codec_skinny2ast().

#define AST_FORMAT_G729A   (1 << 8)

G.729A audio

Definition at line 236 of file frame.h.

Referenced by add_codec_to_sdp(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), codec_ast2skinny(), codec_skinny2ast(), convertcap(), g729_read(), and g729_write().

#define AST_FORMAT_GSM   (1 << 1)

GSM compression

Definition at line 222 of file frame.h.

Referenced by ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), convertcap(), gsm_read(), gsm_write(), gsmtolin_sample(), wav_read(), and wav_write().

#define AST_FORMAT_H261   (1 << 18)

H.261 Video

Definition at line 254 of file frame.h.

Referenced by codec_ast2skinny(), and codec_skinny2ast().

#define AST_FORMAT_H263   (1 << 19)

H.263 Video

Definition at line 256 of file frame.h.

Referenced by codec_ast2skinny(), codec_skinny2ast(), h263_read(), and h263_write().

#define AST_FORMAT_H263_PLUS   (1 << 20)

H.263+ Video

Definition at line 258 of file frame.h.

#define AST_FORMAT_H264   (1 << 21)

H.264 Video

Definition at line 260 of file frame.h.

Referenced by h264_read(), and h264_write().

#define AST_FORMAT_ILBC   (1 << 10)

iLBC Free Compression

Definition at line 240 of file frame.h.

Referenced by add_codec_to_sdp(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_codec_interp_len(), convertcap(), ilbc_read(), ilbc_write(), and ilbctolin_sample().

#define AST_FORMAT_JPEG   (1 << 16)

JPEG Images

Definition at line 250 of file frame.h.

Referenced by jpeg_read_image(), and jpeg_write_image().

#define AST_FORMAT_LPC10   (1 << 7)

LPC10, 180 samples/frame

Definition at line 234 of file frame.h.

Referenced by ast_best_codec(), ast_codec_get_samples(), and lpc10tolin_sample().

#define AST_FORMAT_MAX_AUDIO   (1 << 15)

Maximum audio format

Definition at line 246 of file frame.h.

Referenced by add_sdp(), ast_closestream(), ast_filehelper(), ast_openvstream(), ast_playstream(), ast_rtp_raw_write(), ast_rtp_read(), ast_translate_available_formats(), ast_writestream(), oh323_request(), phone_read(), sip_request_call(), skinny_request(), transmit_connect_with_sdp(), and transmit_modify_with_sdp().

#define AST_FORMAT_MAX_VIDEO   (1 << 24)

Maximum video format

Definition at line 264 of file frame.h.

Referenced by add_sdp(), ast_openvstream(), and ast_translate_available_formats().

#define AST_FORMAT_MP4_VIDEO   (1 << 22)

MPEG4 Video

Definition at line 262 of file frame.h.

#define AST_FORMAT_PNG   (1 << 17)

PNG Images

Definition at line 252 of file frame.h.

Referenced by phone_read().

#define AST_FORMAT_SLINEAR   (1 << 6)

Raw 16-bit Signed Linear (8000 Hz) PCM

Definition at line 232 of file frame.h.

Referenced by __ast_play_and_record(), __ast_register_translator(), action_originate(), agent_new(), alsa_new(), alsa_read(), alsa_request(), ast_best_codec(), ast_channel_make_compatible(), ast_channel_spy_add(), ast_channel_start_silence_generator(), ast_channel_whisper_stop(), ast_codec_get_len(), ast_codec_get_samples(), ast_dsp_call_progress(), ast_dsp_digitdetect(), ast_dsp_process(), ast_dsp_silence(), ast_frame_adjust_volume(), ast_frame_slinear_sum(), ast_rtp_read(), ast_slinfactory_feed(), ast_write(), attempt_reconnect(), attempt_thread(), background_detect_exec(), build_conf(), channel_spy(), chanspy_exec(), conf_run(), dictate_exec(), do_waiting(), eagi_exec(), extenspy_exec(), fast_originate(), function_ilink(), handle_recordfile(), iax_frame_wrap(), ices_exec(), isAnsweringMachine(), launch_monitor_thread(), linear_alloc(), linear_generator(), lintoadpcm_sample(), lintoalaw_sample(), lintog722_sample(), lintog726_sample(), lintogsm_sample(), lintoilbc_sample(), lintolpc10_sample(), lintospeex_sample(), lintoulaw_sample(), load_module(), load_moh_classes(), measurenoise(), misdn_set_opt_exec(), moh_class_malloc(), mp3_exec(), mp3_open(), mp3_read(), mwanalyze_exec(), nbs_request(), nbs_xwrite(), NBScat_exec(), nv_background_detect_exec(), nv_detectfax_exec(), ogg_vorbis_read(), ogg_vorbis_write(), oh323_rtp_read(), orig_app(), orig_exten(), oss_new(), oss_read(), oss_request(), parkandannounce_exec(), phone_new(), phone_read(), phone_request(), phone_setup(), phone_write(), playtones_alloc(), queue_frame_to_spies(), read_config(), rpt(), rpt_call(), rpt_exec(), rpt_tele_thread(), rxfax_exec(), send_waveform_to_channel(), silence_generator_generate(), slinear_read(), slinear_write(), sms_generate(), socket_process(), speech_background(), speech_create(), tonepair_alloc(), txfax_exec(), wav_read(), wav_write(), zt_new(), zt_read(), and zt_write().

#define AST_FORMAT_SPEEX   (1 << 9)

SpeeX Free Compression

Definition at line 238 of file frame.h.

Referenced by ast_best_codec(), ast_codec_get_samples(), convertcap(), and speextolin_sample().

#define AST_FORMAT_ULAW   (1 << 2)

Raw mu-law data (G.711)

Definition at line 224 of file frame.h.

Referenced by __adsi_transmit_messages(), adsi_careful_send(), alarmreceiver_exec(), ast_adsi_transmit_message_full(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_dsp_process(), codec_ast2skinny(), codec_skinny2ast(), conf_run(), convertcap(), disa_exec(), load_module(), milliwatt_exec(), milliwatt_generate(), oh323_rtp_read(), phone_request(), phone_setup(), phone_write(), send_tone_burst(), ulawtoalaw_sample(), ulawtolin_sample(), zt_new(), zt_read(), and zt_write().

#define AST_FORMAT_VIDEO_MASK   (((1 << 25)-1) & ~(AST_FORMAT_AUDIO_MASK))

Definition at line 265 of file frame.h.

Referenced by add_sdp(), ast_request(), ast_translate_available_formats(), check_user_full(), create_addr_from_peer(), func_channel_read(), gtalk_new(), gtalk_rtp_read(), sip_new(), and sip_rtp_read().

#define ast_frame_byteswap_be ( fr   )     do { struct ast_frame *__f = (fr); ast_swapcopy_samples(__f->data, __f->data, __f->samples); } while(0)

Definition at line 418 of file frame.h.

Referenced by ast_rtp_read(), and socket_process().

#define ast_frame_byteswap_le ( fr   )     do { ; } while(0)

Definition at line 417 of file frame.h.

Referenced by phone_read().

#define AST_FRAME_DTMF   AST_FRAME_DTMF_END

Definition at line 124 of file frame.h.

Referenced by __adsi_transmit_messages(), __ast_play_and_record(), action_zapdialoffhook(), agent_ack_sleep(), app_exec(), ast_bridge_call(), ast_dsp_process(), ast_feature_request_and_dial(), ast_jb_put(), ast_waitfordigit_full(), background_detect_exec(), bridge_native_loop(), bridge_p2p_loop(), cb_events(), channel_spy(), conf_exec(), conf_run(), console_dial(), console_dial_deprecated(), dictate_exec(), disa_exec(), do_immediate_setup(), echo_exec(), gtalk_handle_dtmf(), handle_recordfile(), handle_request(), handle_request_info(), mgcp_rtp_read(), misdn_bridge(), mp3_exec(), NBScat_exec(), nv_background_detect_exec(), nv_detectfax_exec(), oh323_rtp_read(), phone_exception(), process_ast_dsp(), receive_dtmf_digits(), rpt(), rpt_call(), send_waveform_to_channel(), sip_rtp_read(), speech_background(), ss_thread(), wait_for_answer(), wait_for_winner(), zt_bridge(), and zt_read().

#define AST_FRAME_SET_BUFFER ( fr,
_base,
_ofs,
_datalen   ) 

Value:

{              \
   (fr)->data = (char *)_base + (_ofs);   \
   (fr)->offset = (_ofs);        \
   (fr)->datalen = (_datalen);      \
   }
Set the various field of a frame to point to a buffer. Typically you set the base address of the buffer, the offset as AST_FRIENDLY_OFFSET, and the datalen as the amount of bytes queued. The remaining things (to be done manually) is set the number of samples, which cannot be derived from the datalen unless you know the number of bits per sample.

Definition at line 169 of file frame.h.

Referenced by g723_read(), g726_read(), g729_read(), gsm_read(), h263_read(), h264_read(), ilbc_read(), ogg_vorbis_read(), pcm_read(), slinear_read(), vox_read(), and wav_read().

#define AST_FRIENDLY_OFFSET   64

Definition at line 180 of file frame.h.

Referenced by __get_from_jb(), alsa_read(), ast_frdup(), ast_frisolate(), ast_prod(), ast_rtcp_read(), ast_rtp_read(), ast_smoother_read(), ast_trans_frameout(), ast_udptl_read(), conf_run(), g723_read(), g726_read(), g729_read(), gsm_read(), h263_read(), h264_read(), iax_frame_wrap(), ilbc_read(), jb_get_and_deliver(), linear_generator(), milliwatt_generate(), moh_generate(), mohalloc(), mp3_exec(), mp3_read(), mwanalyze_exec(), NBScat_exec(), newpvt(), ogg_vorbis_read(), oss_read(), pcm_read(), phone_read(), process_rfc3389(), rxfax_exec(), send_tone_burst(), send_waveform_to_channel(), slinear_read(), sms_generate(), txfax_exec(), vox_read(), wav_read(), zap_frameout(), and zt_read().

#define AST_HTML_BEGIN   4

Beginning frame

Definition at line 204 of file frame.h.

Referenced by ast_frame_dump().

#define AST_HTML_DATA   2

Data frame

Definition at line 202 of file frame.h.

Referenced by ast_frame_dump().

#define AST_HTML_END   8

End frame

Definition at line 206 of file frame.h.

Referenced by ast_frame_dump().

#define AST_HTML_LDCOMPLETE   16

Load is complete

Definition at line 208 of file frame.h.

Referenced by ast_frame_dump(), and sendurl_exec().

#define AST_HTML_LINKREJECT   20

Reject link request

Definition at line 216 of file frame.h.

Referenced by ast_frame_dump().

#define AST_HTML_LINKURL   18

Send URL, and track

Definition at line 212 of file frame.h.

Referenced by ast_frame_dump().

#define AST_HTML_NOSUPPORT   17

Peer is unable to support HTML

Definition at line 210 of file frame.h.

Referenced by ast_frame_dump(), and sendurl_exec().

#define AST_HTML_UNLINK   19

No more HTML linkage

Definition at line 214 of file frame.h.

Referenced by ast_frame_dump().

#define AST_HTML_URL   1

Sending a URL

Definition at line 200 of file frame.h.

Referenced by ast_channel_sendurl(), and ast_frame_dump().

#define AST_MALLOCD_DATA   (1 << 1)

Need the data be free'd?

Definition at line 188 of file frame.h.

Referenced by ast_frame_free(), and ast_frisolate().

#define AST_MALLOCD_HDR   (1 << 0)

Need the header be free'd?

Definition at line 186 of file frame.h.

Referenced by ast_frame_free(), ast_frame_header_new(), ast_frdup(), and ast_frisolate().

#define AST_MALLOCD_SRC   (1 << 2)

Need the source be free'd? (haha!)

Definition at line 190 of file frame.h.

Referenced by ast_frame_free(), and ast_frisolate().

#define AST_MIN_OFFSET   32

Definition at line 183 of file frame.h.

Referenced by __ast_smoother_feed().

#define AST_MODEM_T38   1

T.38 Fax-over-IP

Definition at line 194 of file frame.h.

Referenced by ast_frame_dump(), and udptl_rx_packet().

#define AST_MODEM_V150   2

V.150 Modem-over-IP

Definition at line 196 of file frame.h.

Referenced by ast_frame_dump().

#define AST_OPTION_AUDIO_MODE   4

Set (or clear) Audio (Not-Clear) Mode

Definition at line 310 of file frame.h.

Referenced by zt_hangup(), and zt_setoption().

#define AST_OPTION_ECHOCAN   8

Explicitly enable or disable echo cancelation for the given channel

Definition at line 332 of file frame.h.

Referenced by zt_setoption().

#define AST_OPTION_FLAG_ACCEPT   1

Definition at line 293 of file frame.h.

#define AST_OPTION_FLAG_ANSWER   5

Definition at line 296 of file frame.h.

#define AST_OPTION_FLAG_QUERY   4

Definition at line 295 of file frame.h.

#define AST_OPTION_FLAG_REJECT   2

Definition at line 294 of file frame.h.

#define AST_OPTION_FLAG_REQUEST   0

Definition at line 292 of file frame.h.

Referenced by ast_bridge_call(), and iax2_setoption().

#define AST_OPTION_FLAG_WTF   6

Definition at line 297 of file frame.h.

#define AST_OPTION_OPRMODE   7

Definition at line 329 of file frame.h.

Referenced by zt_setoption().

#define AST_OPTION_RELAXDTMF   3

Relax the parameters for DTMF reception (mainly for radio use)

Definition at line 307 of file frame.h.

Referenced by rpt(), and zt_setoption().

#define AST_OPTION_RXGAIN   6

Set channel receive gain Option data is a single signed char representing number of decibels (dB) to set gain to (on top of any gain specified in channel driver)

Definition at line 326 of file frame.h.

Referenced by func_channel_write(), iax2_setoption(), play_record_review(), reset_volumes(), set_talk_volume(), vm_forwardoptions(), and zt_setoption().

#define AST_OPTION_TDD   2

Put a compatible channel into TDD (TTY for the hearing-impared) mode

Definition at line 304 of file frame.h.

Referenced by handle_tddmode(), zt_hangup(), and zt_setoption().

#define AST_OPTION_TONE_VERIFY   1

Verify touchtones by muting audio transmission (and reception) and verify the tone is still present

Definition at line 301 of file frame.h.

Referenced by conf_run(), rpt(), try_calling(), zt_hangup(), and zt_setoption().

#define AST_OPTION_TXGAIN   5

Set channel transmit gain Option data is a single signed char representing number of decibels (dB) to set gain to (on top of any gain specified in channel driver)

Definition at line 318 of file frame.h.

Referenced by common_exec(), func_channel_write(), iax2_setoption(), reset_volumes(), set_listen_volume(), set_volume(), and zt_setoption().

#define ast_smoother_feed ( s,
f   )     __ast_smoother_feed(s, f, 0)

Definition at line 480 of file frame.h.

Referenced by ast_rtp_write().

#define ast_smoother_feed_be ( s,
f   )     __ast_smoother_feed(s, f, 1)

Definition at line 482 of file frame.h.

Referenced by ast_rtp_write().

#define ast_smoother_feed_le ( s,
f   )     __ast_smoother_feed(s, f, 0)

Definition at line 483 of file frame.h.

#define AST_SMOOTHER_FLAG_BE   (1 << 1)

Definition at line 289 of file frame.h.

Referenced by ast_rtp_write().

#define AST_SMOOTHER_FLAG_G729   (1 << 0)

Definition at line 288 of file frame.h.

Referenced by __ast_smoother_feed(), and ast_smoother_read().


Enumeration Type Documentation

enum ast_control_frame_type

Enumerator:
AST_CONTROL_HANGUP  Other end has hungup
AST_CONTROL_RING  Local ring
AST_CONTROL_RINGING  Remote end is ringing
AST_CONTROL_ANSWER  Remote end has answered
AST_CONTROL_BUSY  Remote end is busy
AST_CONTROL_TAKEOFFHOOK  Make it go off hook
AST_CONTROL_OFFHOOK  Line is off hook
AST_CONTROL_CONGESTION  Congestion (circuits busy)
AST_CONTROL_FLASH  Flash hook
AST_CONTROL_WINK  Wink
AST_CONTROL_OPTION  Set a low-level option
AST_CONTROL_RADIO_KEY  Key Radio
AST_CONTROL_RADIO_UNKEY  Un-Key Radio
AST_CONTROL_PROGRESS  Indicate PROGRESS
AST_CONTROL_PROCEEDING  Indicate CALL PROCEEDING
AST_CONTROL_HOLD  Indicate call is placed on hold
AST_CONTROL_UNHOLD  Indicate call is left from hold
AST_CONTROL_VIDUPDATE  Indicate video frame update

Definition at line 267 of file frame.h.

00267                             {
00268    AST_CONTROL_HANGUP = 1,    /*!< Other end has hungup */
00269    AST_CONTROL_RING = 2,      /*!< Local ring */
00270    AST_CONTROL_RINGING = 3,   /*!< Remote end is ringing */
00271    AST_CONTROL_ANSWER = 4,    /*!< Remote end has answered */
00272    AST_CONTROL_BUSY = 5,      /*!< Remote end is busy */
00273    AST_CONTROL_TAKEOFFHOOK = 6,  /*!< Make it go off hook */
00274    AST_CONTROL_OFFHOOK = 7,   /*!< Line is off hook */
00275    AST_CONTROL_CONGESTION = 8,   /*!< Congestion (circuits busy) */
00276    AST_CONTROL_FLASH = 9,     /*!< Flash hook */
00277    AST_CONTROL_WINK = 10,     /*!< Wink */
00278    AST_CONTROL_OPTION = 11,   /*!< Set a low-level option */
00279    AST_CONTROL_RADIO_KEY = 12,   /*!< Key Radio */
00280    AST_CONTROL_RADIO_UNKEY = 13, /*!< Un-Key Radio */
00281    AST_CONTROL_PROGRESS = 14, /*!< Indicate PROGRESS */
00282    AST_CONTROL_PROCEEDING = 15,  /*!< Indicate CALL PROCEEDING */
00283    AST_CONTROL_HOLD = 16,     /*!< Indicate call is placed on hold */
00284    AST_CONTROL_UNHOLD = 17,   /*!< Indicate call is left from hold */
00285    AST_CONTROL_VIDUPDATE = 18,   /*!< Indicate video frame update */
00286 };

enum ast_frame_type

Frame types.

Note:
It is important that the values of each frame type are never changed, because it will break backwards compatability with older versions.
Enumerator:
AST_FRAME_DTMF_END  DTMF end event, subclass is the digit
AST_FRAME_VOICE  Voice data, subclass is AST_FORMAT_*
AST_FRAME_VIDEO  Video frame, maybe?? :)
AST_FRAME_CONTROL  A control frame, subclass is AST_CONTROL_*
AST_FRAME_NULL  An empty, useless frame
AST_FRAME_IAX  Inter Asterisk Exchange private frame type
AST_FRAME_TEXT  Text messages
AST_FRAME_IMAGE  Image Frames
AST_FRAME_HTML  HTML Frame
AST_FRAME_CNG  Comfort Noise frame (subclass is level of CNG in -dBov), body may include zero or more 8-bit quantization coefficients
AST_FRAME_MODEM  Modem-over-IP data streams
AST_FRAME_DTMF_BEGIN  DTMF begin event, subclass is the digit

Definition at line 97 of file frame.h.

00097                     {
00098    /*! DTMF end event, subclass is the digit */
00099    AST_FRAME_DTMF_END = 1,
00100    /*! Voice data, subclass is AST_FORMAT_* */
00101    AST_FRAME_VOICE,
00102    /*! Video frame, maybe?? :) */
00103    AST_FRAME_VIDEO,
00104    /*! A control frame, subclass is AST_CONTROL_* */
00105    AST_FRAME_CONTROL,
00106    /*! An empty, useless frame */
00107    AST_FRAME_NULL,
00108    /*! Inter Asterisk Exchange private frame type */
00109    AST_FRAME_IAX,
00110    /*! Text messages */
00111    AST_FRAME_TEXT,
00112    /*! Image Frames */
00113    AST_FRAME_IMAGE,
00114    /*! HTML Frame */
00115    AST_FRAME_HTML,
00116    /*! Comfort Noise frame (subclass is level of CNG in -dBov), 
00117        body may include zero or more 8-bit quantization coefficients */
00118    AST_FRAME_CNG,
00119    /*! Modem-over-IP data streams */
00120    AST_FRAME_MODEM,  
00121    /*! DTMF begin event, subclass is the digit */
00122    AST_FRAME_DTMF_BEGIN,
00123 };


Function Documentation

int __ast_smoother_feed ( struct ast_smoother s,
struct ast_frame f,
int  swap 
)

Definition at line 171 of file frame.c.

References AST_FRAME_VOICE, ast_log(), AST_MIN_OFFSET, AST_SMOOTHER_FLAG_G729, ast_swapcopy_samples(), f, LOG_NOTICE, LOG_WARNING, s, and SMOOTHER_SIZE.

00172 {
00173    if (f->frametype != AST_FRAME_VOICE) {
00174       ast_log(LOG_WARNING, "Huh?  Can't smooth a non-voice frame!\n");
00175       return -1;
00176    }
00177    if (!s->format) {
00178       s->format = f->subclass;
00179       s->samplesperbyte = (float)f->samples / (float)f->datalen;
00180    } else if (s->format != f->subclass) {
00181       ast_log(LOG_WARNING, "Smoother was working on %d format frames, now trying to feed %d?\n", s->format, f->subclass);
00182       return -1;
00183    }
00184    if (s->len + f->datalen > SMOOTHER_SIZE) {
00185       ast_log(LOG_WARNING, "Out of smoother space\n");
00186       return -1;
00187    }
00188    if (((f->datalen == s->size) || ((f->datalen < 10) && (s->flags & AST_SMOOTHER_FLAG_G729)))
00189              && !s->opt && (f->offset >= AST_MIN_OFFSET)) {
00190       if (!s->len) {
00191          /* Optimize by sending the frame we just got
00192             on the next read, thus eliminating the douple
00193             copy */
00194          if (swap)
00195             ast_swapcopy_samples(f->data, f->data, f->samples);
00196          s->opt = f;
00197          return 0;
00198       } else {
00199          s->optimizablestream++;
00200          if (s->optimizablestream > 10) {
00201             /* For the past 10 rounds, we have input and output
00202                frames of the correct size for this smoother, yet
00203                we were unable to optimize because there was still
00204                some cruft left over.  Lets just drop the cruft so
00205                we can move to a fully optimized path */
00206             if (swap)
00207                ast_swapcopy_samples(f->data, f->data, f->samples);
00208             s->len = 0;
00209             s->opt = f;
00210             return 0;
00211          }
00212       }
00213    } else 
00214       s->optimizablestream = 0;
00215    if (s->flags & AST_SMOOTHER_FLAG_G729) {
00216       if (s->len % 10) {
00217          ast_log(LOG_NOTICE, "Dropping extra frame of G.729 since we already have a VAD frame at the end\n");
00218          return 0;
00219       }
00220    }
00221    if (swap)
00222       ast_swapcopy_samples(s->data+s->len, f->data, f->samples);
00223    else
00224       memcpy(s->data + s->len, f->data, f->datalen);
00225    /* If either side is empty, reset the delivery time */
00226    if (!s->len || ast_tvzero(f->delivery) || ast_tvzero(s->delivery))   /* XXX really ? */
00227       s->delivery = f->delivery;
00228    s->len += f->datalen;
00229    return 0;
00230 }

char* ast_codec2str ( int  codec  ) 

Get a name from a format Gets a name from a format.

Parameters:
codec codec number (1,2,4,8,16,etc.)
Returns:
This returns a static string identifying the format on success, 0 on error.

Definition at line 609 of file frame.c.

References AST_FORMAT_LIST, and desc.

Referenced by moh_alloc(), show_codec_n(), show_codec_n_deprecated(), show_codecs(), and show_codecs_deprecated().

00610 {
00611    int x;
00612    char *ret = "unknown";
00613    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
00614       if(AST_FORMAT_LIST[x].visible && AST_FORMAT_LIST[x].bits == codec) {
00615          ret = AST_FORMAT_LIST[x].desc;
00616          break;
00617       }
00618    }
00619    return ret;
00620 }

int ast_codec_choose ( struct ast_codec_pref pref,
int  formats,
int  find_best 
)

Select the best audio format according to preference list from supplied options. If "find_best" is non-zero then if nothing is found, the "Best" format of the format list is selected, otherwise 0 is returned.

Definition at line 1245 of file frame.c.

References ast_best_codec(), AST_FORMAT_AUDIO_MASK, AST_FORMAT_LIST, ast_log(), ast_format_list::bits, LOG_DEBUG, option_debug, and ast_codec_pref::order.

Referenced by __oh323_new(), gtalk_new(), process_sdp(), sip_new(), and socket_process().

01246 {
01247    int x, ret = 0, slot;
01248 
01249    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01250       slot = pref->order[x];
01251 
01252       if (!slot)
01253          break;
01254       if (formats & AST_FORMAT_LIST[slot-1].bits) {
01255          ret = AST_FORMAT_LIST[slot-1].bits;
01256          break;
01257       }
01258    }
01259    if(ret & AST_FORMAT_AUDIO_MASK)
01260       return ret;
01261 
01262    if (option_debug > 3)
01263       ast_log(LOG_DEBUG, "Could not find preferred codec - %s\n", find_best ? "Going for the best codec" : "Returning zero codec");
01264 
01265       return find_best ? ast_best_codec(formats) : 0;
01266 }

int ast_codec_get_len ( int  format,
int  samples 
)

Returns the number of bytes for the number of samples of the given format.

Definition at line 1504 of file frame.c.

References AST_FORMAT_ADPCM, AST_FORMAT_ALAW, AST_FORMAT_G726, AST_FORMAT_G726_AAL2, AST_FORMAT_G729A, AST_FORMAT_GSM, AST_FORMAT_ILBC, AST_FORMAT_SLINEAR, AST_FORMAT_ULAW, ast_getformatname(), ast_log(), len, and LOG_WARNING.

Referenced by ast_channel_spy_read_frame(), copy_data_from_queue(), moh_generate(), and monmp3thread().

01505 {
01506    int len = 0;
01507 
01508    /* XXX Still need speex, g723, and lpc10 XXX */ 
01509    switch(format) {
01510    case AST_FORMAT_ILBC:
01511       len = (samples / 240) * 50;
01512       break;
01513    case AST_FORMAT_GSM:
01514       len = (samples / 160) * 33;
01515       break;
01516    case AST_FORMAT_G729A:
01517       len = samples / 8;
01518       break;
01519    case AST_FORMAT_SLINEAR:
01520       len = samples * 2;
01521       break;
01522    case AST_FORMAT_ULAW:
01523    case AST_FORMAT_ALAW:
01524       len = samples;
01525       break;
01526    case AST_FORMAT_ADPCM:
01527    case AST_FORMAT_G726:
01528    case AST_FORMAT_G726_AAL2:
01529       len = samples / 2;
01530       break;
01531    default:
01532       ast_log(LOG_WARNING, "Unable to calculate sample length for format %s\n", ast_getformatname(format));
01533    }
01534 
01535    return len;
01536 }

int ast_codec_get_samples ( struct ast_frame f  ) 

Returns the number of samples contained in the frame.

Definition at line 1461 of file frame.c.

References AST_FORMAT_ADPCM, AST_FORMAT_ALAW, AST_FORMAT_G722, AST_FORMAT_G723_1, AST_FORMAT_G726, AST_FORMAT_G726_AAL2, AST_FORMAT_G729A, AST_FORMAT_GSM, AST_FORMAT_ILBC, AST_FORMAT_LPC10, AST_FORMAT_SLINEAR, AST_FORMAT_SPEEX, AST_FORMAT_ULAW, ast_getformatname(), ast_log(), f, g723_samples(), LOG_WARNING, and speex_samples().

Referenced by ast_rtp_read(), isAnsweringMachine(), moh_generate(), schedule_delivery(), and socket_process().

01462 {
01463    int samples=0;
01464    switch(f->subclass) {
01465    case AST_FORMAT_SPEEX:
01466       samples = speex_samples(f->data, f->datalen);
01467       break;
01468    case AST_FORMAT_G723_1:
01469                 samples = g723_samples(f->data, f->datalen);
01470       break;
01471    case AST_FORMAT_ILBC:
01472       samples = 240 * (f->datalen / 50);
01473       break;
01474    case AST_FORMAT_GSM:
01475       samples = 160 * (f->datalen / 33);
01476       break;
01477    case AST_FORMAT_G729A:
01478       samples = f->datalen * 8;
01479       break;
01480    case AST_FORMAT_SLINEAR:
01481       samples = f->datalen / 2;
01482       break;
01483    case AST_FORMAT_LPC10:
01484                 /* assumes that the RTP packet contains one LPC10 frame */
01485       samples = 22 * 8;
01486       samples += (((char *)(f->data))[7] & 0x1) * 8;
01487       break;
01488    case AST_FORMAT_ULAW:
01489    case AST_FORMAT_ALAW:
01490    case AST_FORMAT_G722:
01491       samples = f->datalen;
01492       break;
01493    case AST_FORMAT_ADPCM:
01494    case AST_FORMAT_G726:
01495    case AST_FORMAT_G726_AAL2:
01496       samples = f->datalen * 2;
01497       break;
01498    default:
01499       ast_log(LOG_WARNING, "Unable to calculate samples for format %s\n", ast_getformatname(f->subclass));
01500    }
01501    return samples;
01502 }

static int ast_codec_interp_len ( int  format  )  [inline, static]

Gets duration in ms of interpolation frame for a format.

Definition at line 553 of file frame.h.

References AST_FORMAT_ILBC.

Referenced by __get_from_jb(), and jb_get_and_deliver().

00554 { 
00555    return (format == AST_FORMAT_ILBC) ? 30 : 20;
00556 }

int ast_codec_pref_append ( struct ast_codec_pref pref,
int  format 
)

Append a audio codec to a preference list, removing it first if it was already there.

Definition at line 1140 of file frame.c.

References ast_codec_pref_remove(), AST_FORMAT_LIST, and ast_codec_pref::order.

Referenced by ast_parse_allow_disallow().

01141 {
01142    int x, newindex = -1;
01143 
01144    ast_codec_pref_remove(pref, format);
01145 
01146    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01147       if(AST_FORMAT_LIST[x].bits == format) {
01148          newindex = x + 1;
01149          break;
01150       }
01151    }
01152 
01153    if(newindex) {
01154       for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01155          if(!pref->order[x]) {
01156             pref->order[x] = newindex;
01157             break;
01158          }
01159       }
01160    }
01161 
01162    return x;
01163 }

void ast_codec_pref_convert ( struct ast_codec_pref pref,
char *  buf,
size_t  size,
int  right 
)

Shift an audio codec preference list up or down 65 bytes so that it becomes an ASCII string.

Definition at line 1042 of file frame.c.

References ast_codec_pref::order.

Referenced by check_access(), create_addr(), dump_prefs(), and socket_process().

01043 {
01044    int x, differential = (int) 'A', mem;
01045    char *from, *to;
01046 
01047    if(right) {
01048       from = pref->order;
01049       to = buf;
01050       mem = size;
01051    } else {
01052       to = pref->order;
01053       from = buf;
01054       mem = 32;
01055    }
01056 
01057    memset(to, 0, mem);
01058    for (x = 0; x < 32 ; x++) {
01059       if(!from[x])
01060          break;
01061       to[x] = right ? (from[x] + differential) : (from[x] - differential);
01062    }
01063 }

struct ast_format_list ast_codec_pref_getsize ( struct ast_codec_pref pref,
int  format 
)

Get packet size for codec.

Definition at line 1206 of file frame.c.

References AST_FORMAT_LIST, ast_format_list::bits, fmt, and format.

Referenced by add_codec_to_sdp(), ast_rtp_write(), handle_open_receive_channel_ack_message(), and transmit_connect().

01207 {
01208    int x, index = -1, framems = 0;
01209    struct ast_format_list fmt = {0};
01210 
01211    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01212       if(AST_FORMAT_LIST[x].bits == format) {
01213          fmt = AST_FORMAT_LIST[x];
01214          index = x;
01215          break;
01216       }
01217    }
01218 
01219    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01220       if(pref->order[x] == (index + 1)) {
01221          framems = pref->framing[x];
01222          break;
01223       }
01224    }
01225 
01226    /* size validation */
01227    if(!framems)
01228       framems = AST_FORMAT_LIST[index].def_ms;
01229 
01230    if(AST_FORMAT_LIST[index].inc_ms && framems % AST_FORMAT_LIST[index].inc_ms) /* avoid division by zero */
01231       framems -= framems % AST_FORMAT_LIST[index].inc_ms;
01232 
01233    if(framems < AST_FORMAT_LIST[index].min_ms)
01234       framems = AST_FORMAT_LIST[index].min_ms;
01235 
01236    if(framems > AST_FORMAT_LIST[index].max_ms)
01237       framems = AST_FORMAT_LIST[index].max_ms;
01238 
01239    fmt.cur_ms = framems;
01240 
01241    return fmt;
01242 }

int ast_codec_pref_index ( struct ast_codec_pref pref,
int  index 
)

Codec located at a particular place in the preference index See Audio Codec Preferences.

Definition at line 1100 of file frame.c.

References AST_FORMAT_LIST, ast_format_list::bits, and ast_codec_pref::order.

Referenced by _sip_show_peer(), add_sdp(), ast_codec_pref_string(), function_iaxpeer(), function_sippeer(), gtalk_invite(), iax2_show_peer(), print_codec_to_cli(), and socket_process().

01101 {
01102    int slot = 0;
01103 
01104    
01105    if((index >= 0) && (index < sizeof(pref->order))) {
01106       slot = pref->order[index];
01107    }
01108 
01109    return slot ? AST_FORMAT_LIST[slot-1].bits : 0;
01110 }

void ast_codec_pref_init ( struct ast_codec_pref pref  ) 

Initialize an audio codec preference to "no preference" See Audio Codec Preferences.

void ast_codec_pref_remove ( struct ast_codec_pref pref,
int  format 
)

Remove audio a codec from a preference list.

Definition at line 1113 of file frame.c.

References AST_FORMAT_LIST, and ast_codec_pref::order.

Referenced by ast_codec_pref_append(), and ast_parse_allow_disallow().

01114 {
01115    struct ast_codec_pref oldorder;
01116    int x, y = 0;
01117    int slot;
01118    int size;
01119 
01120    if(!pref->order[0])
01121       return;
01122 
01123    memcpy(&oldorder, pref, sizeof(oldorder));
01124    memset(pref, 0, sizeof(*pref));
01125 
01126    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01127       slot = oldorder.order[x];
01128       size = oldorder.framing[x];
01129       if(! slot)
01130          break;
01131       if(AST_FORMAT_LIST[slot-1].bits != format) {
01132          pref->order[y] = slot;
01133          pref->framing[y++] = size;
01134       }
01135    }
01136    
01137 }

int ast_codec_pref_setsize ( struct ast_codec_pref pref,
int  format,
int  framems 
)

Set packet size for codec.

Definition at line 1167 of file frame.c.

References AST_FORMAT_LIST, ast_codec_pref::framing, and ast_codec_pref::order.

Referenced by ast_parse_allow_disallow(), and process_sdp().

01168 {
01169    int x, index = -1;
01170 
01171    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01172       if(AST_FORMAT_LIST[x].bits == format) {
01173          index = x;
01174          break;
01175       }
01176    }
01177 
01178    if(index < 0)
01179       return -1;
01180 
01181    /* size validation */
01182    if(!framems)
01183       framems = AST_FORMAT_LIST[index].def_ms;
01184 
01185    if(AST_FORMAT_LIST[index].inc_ms && framems % AST_FORMAT_LIST[index].inc_ms) /* avoid division by zero */
01186       framems -= framems % AST_FORMAT_LIST[index].inc_ms;
01187 
01188    if(framems < AST_FORMAT_LIST[index].min_ms)
01189       framems = AST_FORMAT_LIST[index].min_ms;
01190 
01191    if(framems > AST_FORMAT_LIST[index].max_ms)
01192       framems = AST_FORMAT_LIST[index].max_ms;
01193 
01194 
01195    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
01196       if(pref->order[x] == (index + 1)) {
01197          pref->framing[x] = framems;
01198          break;
01199       }
01200    }
01201 
01202    return x;
01203 }

int ast_codec_pref_string ( struct ast_codec_pref pref,
char *  buf,
size_t  size 
)

Dump audio codec preference list into a string.

Definition at line 1065 of file frame.c.

References ast_codec_pref_index(), and ast_getformatname().

Referenced by dump_prefs(), and socket_process().

01066 {
01067    int x, codec; 
01068    size_t total_len, slen;
01069    char *formatname;
01070    
01071    memset(buf,0,size);
01072    total_len = size;
01073    buf[0] = '(';
01074    total_len--;
01075    for(x = 0; x < 32 ; x++) {
01076       if(total_len <= 0)
01077          break;
01078       if(!(codec = ast_codec_pref_index(pref,x)))
01079          break;
01080       if((formatname = ast_getformatname(codec))) {
01081          slen = strlen(formatname);
01082          if(slen > total_len)
01083             break;
01084          strncat(buf,formatname,total_len);
01085          total_len -= slen;
01086       }
01087       if(total_len && x < 31 && ast_codec_pref_index(pref , x + 1)) {
01088          strncat(buf,"|",total_len);
01089          total_len--;
01090       }
01091    }
01092    if(total_len) {
01093       strncat(buf,")",total_len);
01094       total_len--;
01095    }
01096 
01097    return size - total_len;
01098 }

int ast_frame_adjust_volume ( struct ast_frame f,
int  adjustment 
)

Adjusts the volume of the audio samples contained in a frame.

Parameters:
f The frame containing the samples (must be AST_FRAME_VOICE and AST_FORMAT_SLINEAR)
adjustment The number of dB to adjust up or down.
Returns:
0 for success, non-zero for an error

Definition at line 1538 of file frame.c.

References AST_FORMAT_SLINEAR, AST_FRAME_VOICE, ast_slinear_saturated_divide(), ast_slinear_saturated_multiply(), and f.

Referenced by ast_channel_spy_read_frame(), ast_write(), and conf_run().

01539 {
01540    int count;
01541    short *fdata = f->data;
01542    short adjust_value = abs(adjustment);
01543 
01544    if ((f->frametype != AST_FRAME_VOICE) || (f->subclass != AST_FORMAT_SLINEAR))
01545       return -1;
01546 
01547    if (!adjustment)
01548       return 0;
01549 
01550    for (count = 0; count < f->samples; count++) {
01551       if (adjustment > 0) {
01552          ast_slinear_saturated_multiply(&fdata[count], &adjust_value);
01553       } else if (adjustment < 0) {
01554          ast_slinear_saturated_divide(&fdata[count], &adjust_value);
01555       }
01556    }
01557 
01558    return 0;
01559 }

void ast_frame_dump ( const char *  name,
struct ast_frame f,
char *  prefix 
)

Dump a frame for debugging purposes

Definition at line 763 of file frame.c.

References AST_CONTROL_ANSWER, AST_CONTROL_BUSY, AST_CONTROL_CONGESTION, AST_CONTROL_FLASH, AST_CONTROL_HANGUP, AST_CONTROL_OFFHOOK, AST_CONTROL_OPTION, AST_CONTROL_RADIO_KEY, AST_CONTROL_RADIO_UNKEY, AST_CONTROL_RING, AST_CONTROL_RINGING, AST_CONTROL_TAKEOFFHOOK, AST_CONTROL_WINK, AST_FRAME_CONTROL, AST_FRAME_DTMF_BEGIN, AST_FRAME_DTMF_END, AST_FRAME_HTML, AST_FRAME_IAX, AST_FRAME_IMAGE, AST_FRAME_MODEM, AST_FRAME_NULL, AST_FRAME_TEXT, AST_FRAME_VIDEO, AST_FRAME_VOICE, ast_getformatname(), AST_HTML_BEGIN, AST_HTML_DATA, AST_HTML_END, AST_HTML_LDCOMPLETE, AST_HTML_LINKREJECT, AST_HTML_LINKURL, AST_HTML_NOSUPPORT, AST_HTML_UNLINK, AST_HTML_URL, ast_log(), AST_MODEM_T38, AST_MODEM_V150, ast_strlen_zero(), f, and LOG_DEBUG.

Referenced by __ast_read(), ast_write(), and sip_write().

00764 {
00765    const char noname[] = "unknown";
00766    char ftype[40] = "Unknown Frametype";
00767    char subclass[40] = "Unknown Subclass";
00768    char moreinfo[40] = "";
00769 
00770    if (!name)
00771       name = noname;
00772 
00773    if (!f) {
00774       ast_log( LOG_DEBUG, "%s [ %s (NULL) ] [%s]\n", 
00775          prefix, "HANGUP", name);
00776       return;
00777    }
00778    /* XXX We should probably print one each of voice and video when the format changes XXX */
00779    if (f->frametype == AST_FRAME_VOICE)
00780       return;
00781    if (f->frametype == AST_FRAME_VIDEO)
00782       return;
00783    switch(f->frametype) {
00784    case AST_FRAME_DTMF_BEGIN:
00785       strcpy(ftype, "DTMF Begin");
00786       subclass[0] = f->subclass;
00787       subclass[1] = '\0';
00788       break;
00789    case AST_FRAME_DTMF_END:
00790       strcpy(ftype, "DTMF End");
00791       subclass[0] = f->subclass;
00792       subclass[1] = '\0';
00793       break;
00794    case AST_FRAME_CONTROL:
00795       strcpy(ftype, "Control");
00796       switch(f->subclass) {
00797       case AST_CONTROL_HANGUP:
00798          strcpy(subclass, "Hangup");
00799          break;
00800       case AST_CONTROL_RING:
00801          strcpy(subclass, "Ring");
00802          break;
00803       case AST_CONTROL_RINGING:
00804          strcpy(subclass, "Ringing");
00805          break;
00806       case AST_CONTROL_ANSWER:
00807          strcpy(subclass, "Answer");
00808          break;
00809       case AST_CONTROL_BUSY:
00810          strcpy(subclass, "Busy");
00811          break;
00812       case AST_CONTROL_TAKEOFFHOOK:
00813          strcpy(subclass, "Take Off Hook");
00814          break;
00815       case AST_CONTROL_OFFHOOK:
00816          strcpy(subclass, "Line Off Hook");
00817          break;
00818       case AST_CONTROL_CONGESTION:
00819          strcpy(subclass, "Congestion");
00820          break;
00821       case AST_CONTROL_FLASH:
00822          strcpy(subclass, "Flash");
00823          break;
00824       case AST_CONTROL_WINK:
00825          strcpy(subclass, "Wink");
00826          break;
00827       case AST_CONTROL_OPTION:
00828          strcpy(subclass, "Option");
00829          break;
00830       case AST_CONTROL_RADIO_KEY:
00831          strcpy(subclass, "Key Radio");
00832          break;
00833       case AST_CONTROL_RADIO_UNKEY:
00834          strcpy(subclass, "Unkey Radio");
00835          break;
00836       case -1:
00837          strcpy(subclass, "Stop generators");
00838          break;
00839       default:
00840          snprintf(subclass, sizeof(subclass), "Unknown control '%d'", f->subclass);
00841       }
00842       break;
00843    case AST_FRAME_NULL:
00844       strcpy(ftype, "Null Frame");
00845       strcpy(subclass, "N/A");
00846       break;
00847    case AST_FRAME_IAX:
00848       /* Should never happen */
00849       strcpy(ftype, "IAX Specific");
00850       snprintf(subclass, sizeof(subclass), "IAX Frametype %d", f->subclass);
00851       break;
00852    case AST_FRAME_TEXT:
00853       strcpy(ftype, "Text");
00854       strcpy(subclass, "N/A");
00855       ast_copy_string(moreinfo, f->data, sizeof(moreinfo));
00856       break;
00857    case AST_FRAME_IMAGE:
00858       strcpy(ftype, "Image");
00859       snprintf(subclass, sizeof(subclass), "Image format %s\n", ast_getformatname(f->subclass));
00860       break;
00861    case AST_FRAME_HTML:
00862       strcpy(ftype, "HTML");
00863       switch(f->subclass) {
00864       case AST_HTML_URL:
00865          strcpy(subclass, "URL");
00866          ast_copy_string(moreinfo, f->data, sizeof(moreinfo));
00867          break;
00868       case AST_HTML_DATA:
00869          strcpy(subclass, "Data");
00870          break;
00871       case AST_HTML_BEGIN:
00872          strcpy(subclass, "Begin");
00873          break;
00874       case AST_HTML_END:
00875          strcpy(subclass, "End");
00876          break;
00877       case AST_HTML_LDCOMPLETE:
00878          strcpy(subclass, "Load Complete");
00879          break;
00880       case AST_HTML_NOSUPPORT:
00881          strcpy(subclass, "No Support");
00882          break;
00883       case AST_HTML_LINKURL:
00884          strcpy(subclass, "Link URL");
00885          ast_copy_string(moreinfo, f->data, sizeof(moreinfo));
00886          break;
00887       case AST_HTML_UNLINK:
00888          strcpy(subclass, "Unlink");
00889          break;
00890       case AST_HTML_LINKREJECT:
00891          strcpy(subclass, "Link Reject");
00892          break;
00893       default:
00894          snprintf(subclass, sizeof(subclass), "Unknown HTML frame '%d'\n", f->subclass);
00895          break;
00896       }
00897       break;
00898    case AST_FRAME_MODEM:
00899       strcpy(ftype, "Modem");
00900       switch (f->subclass) {
00901       case AST_MODEM_T38:
00902          strcpy(subclass, "T.38");
00903          break;
00904       case AST_MODEM_V150:
00905          strcpy(subclass, "V.150");
00906          break;
00907       default:
00908          snprintf(subclass, sizeof(subclass), "Unknown MODEM frame '%d'\n", f->subclass);
00909          break;
00910       }
00911       break;
00912    default:
00913       snprintf(ftype, sizeof(ftype), "Unknown Frametype '%d'", f->frametype);
00914    }
00915    if (!ast_strlen_zero(moreinfo))
00916       ast_log( LOG_DEBUG, "%s [ TYPE: %s (%d) SUBCLASS: %s (%d) '%s' ] [%s]\n",  
00917              prefix,
00918              ftype,
00919              f->frametype, 
00920              subclass,
00921              f->subclass, 
00922              moreinfo,
00923              name);
00924    else
00925       ast_log( LOG_DEBUG, "%s [ TYPE: %s (%d) SUBCLASS: %s (%d) ] [%s]\n",  
00926              prefix,
00927              ftype,
00928              f->frametype, 
00929              subclass,
00930              f->subclass, 
00931              name);
00932 }

struct ast_frame* ast_frame_enqueue ( struct ast_frame head,
struct ast_frame f,
int  maxlen,
int  dupe 
)

Appends a frame to the end of a list of frames, truncating the maximum length of the list.

void ast_frame_free ( struct ast_frame fr,
int  cache 
)

Requests a frame to be allocated Frees a frame.

Parameters:
fr Frame to free
cache Whether to consider this frame for frame caching

Definition at line 335 of file frame.c.

References AST_LIST_INSERT_HEAD, AST_LIST_LOCK, AST_LIST_REMOVE, AST_LIST_UNLOCK, AST_MALLOCD_DATA, AST_MALLOCD_HDR, AST_MALLOCD_SRC, ast_frame::data, FRAME_CACHE_MAX_SIZE, frames, free, ast_frame::mallocd, ast_frame::offset, and ast_frame::src.

Referenced by ast_frfree(), and mixmonitor_thread().

00336 {
00337    if( !fr )
00338        return;
00339 
00340    if (!fr->mallocd)
00341       return;
00342 
00343 #if !defined(LOW_MEMORY)
00344    if (cache && fr->mallocd == AST_MALLOCD_HDR) {
00345       /* Cool, only the header is malloc'd, let's just cache those for now 
00346        * to keep things simple... */
00347       struct ast_frame_cache *frames;
00348 
00349       if ((frames = ast_threadstorage_get(&frame_cache, sizeof(*frames))) 
00350           && frames->size < FRAME_CACHE_MAX_SIZE) {
00351          AST_LIST_INSERT_HEAD(&frames->list, fr, frame_list);
00352          frames->size++;
00353          return;
00354       }
00355    }
00356 #endif
00357    
00358    if (fr->mallocd & AST_MALLOCD_DATA) {
00359       if (fr->data) 
00360          free(fr->data - fr->offset);
00361    }
00362    if (fr->mallocd & AST_MALLOCD_SRC) {
00363       if (fr->src)
00364          free((char *)fr->src);
00365    }
00366    if (fr->mallocd & AST_MALLOCD_HDR) {
00367 #ifdef TRACE_FRAMES
00368       AST_LIST_LOCK(&headerlist);
00369       headers--;
00370       AST_LIST_REMOVE(&headerlist, fr, frame_list);
00371       AST_LIST_UNLOCK(&headerlist);
00372 #endif         
00373       free(fr);
00374    }
00375 }

int ast_frame_slinear_sum ( struct ast_frame f1,
struct ast_frame f2 
)

Sums two frames of audio samples.

Parameters:
f1 The first frame (which will contain the result)
f2 The second frame
Returns:
0 for success, non-zero for an error
The frames must be AST_FRAME_VOICE and must contain AST_FORMAT_SLINEAR samples, and must contain the same number of samples.

Definition at line 1561 of file frame.c.

References AST_FORMAT_SLINEAR, AST_FRAME_VOICE, ast_slinear_saturated_add(), ast_frame::data, ast_frame::frametype, ast_frame::samples, and ast_frame::subclass.

Referenced by ast_channel_spy_read_frame(), and ast_write().

01562 {
01563    int count;
01564    short *data1, *data2;
01565 
01566    if ((f1->frametype != AST_FRAME_VOICE) || (f1->subclass != AST_FORMAT_SLINEAR))
01567       return -1;
01568 
01569    if ((f2->frametype != AST_FRAME_VOICE) || (f2->subclass != AST_FORMAT_SLINEAR))
01570       return -1;
01571 
01572    if (f1->samples != f2->samples)
01573       return -1;
01574 
01575    for (count = 0, data1 = f1->data, data2 = f2->data;
01576         count < f1->samples;
01577         count++, data1++, data2++)
01578       ast_slinear_saturated_add(data1, data2);
01579 
01580    return 0;
01581 }

struct ast_frame* ast_frdup ( const struct ast_frame fr  ) 

Copies a frame.

Parameters:
fr frame to copy Duplicates a frame -- should only rarely be used, typically frisolate is good enough
Returns:
Returns a frame on success, NULL on error

Definition at line 438 of file frame.c.

References ast_calloc_cache, AST_FRIENDLY_OFFSET, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_MALLOCD_HDR, ast_frame::data, ast_frame::datalen, ast_frame::delivery, f, frames, ast_frame::frametype, ast_frame::has_timing_info, ast_frame::len, len, ast_frame::mallocd, ast_frame::mallocd_hdr_len, ast_frame::offset, ast_frame::samples, ast_frame::seqno, ast_frame::src, ast_frame::subclass, and ast_frame::ts.

Referenced by ast_channel_spy_read_frame(), ast_jb_put(), ast_queue_frame(), ast_rtp_write(), ast_slinfactory_feed(), and queue_frame_to_spies().

00439 {
00440    struct ast_frame *out = NULL;
00441    int len, srclen = 0;
00442    void *buf = NULL;
00443 
00444 #if !defined(LOW_MEMORY)
00445    struct ast_frame_cache *frames;
00446 #endif
00447 
00448    /* Start with standard stuff */
00449    len = sizeof(*out) + AST_FRIENDLY_OFFSET + f->datalen;
00450    /* If we have a source, add space for it */
00451    /*
00452     * XXX Watch out here - if we receive a src which is not terminated
00453     * properly, we can be easily attacked. Should limit the size we deal with.
00454     */
00455    if (f->src)
00456       srclen = strlen(f->src);
00457    if (srclen > 0)
00458       len += srclen + 1;
00459    
00460 #if !defined(LOW_MEMORY)
00461    if ((frames = ast_threadstorage_get(&frame_cache, sizeof(*frames)))) {
00462       AST_LIST_TRAVERSE_SAFE_BEGIN(&frames->list, out, frame_list) {
00463          if (out->mallocd_hdr_len >= len) {
00464             size_t mallocd_len = out->mallocd_hdr_len;
00465             AST_LIST_REMOVE_CURRENT(&frames->list, frame_list);
00466             memset(out, 0, sizeof(*out));
00467             out->mallocd_hdr_len = mallocd_len;
00468             buf = out;
00469             frames->size--;
00470             break;
00471          }
00472       }
00473       AST_LIST_TRAVERSE_SAFE_END
00474    }
00475 #endif
00476 
00477    if (!buf) {
00478       if (!(buf = ast_calloc_cache(1, len)))
00479          return NULL;
00480       out = buf;
00481       out->mallocd_hdr_len = len;
00482    }
00483 
00484    out->frametype = f->frametype;
00485    out->subclass = f->subclass;
00486    out->datalen = f->datalen;
00487    out->samples = f->samples;
00488    out->delivery = f->delivery;
00489    /* Set us as having malloc'd header only, so it will eventually
00490       get freed. */
00491    out->mallocd = AST_MALLOCD_HDR;
00492    out->offset = AST_FRIENDLY_OFFSET;
00493    if (out->datalen) {
00494       out->data = buf + sizeof(*out) + AST_FRIENDLY_OFFSET;
00495       memcpy(out->data, f->data, out->datalen); 
00496    }
00497    if (srclen > 0) {
00498       out->src = buf + sizeof(*out) + AST_FRIENDLY_OFFSET + f->datalen;
00499       /* Must have space since we allocated for it */
00500       strcpy((char *)out->src, f->src);
00501    }
00502    out->has_timing_info = f->has_timing_info;
00503    out->ts = f->ts;
00504    out->len = f->len;
00505    out->seqno = f->seqno;
00506    return out;
00507 }

static void force_inline ast_frfree ( struct ast_frame fr  )  [static]

Definition at line 390 of file frame.h.

References ast_frame_free().

Referenced by __adsi_transmit_messages(), __ast_play_and_record(), __ast_read(), __ast_request_and_dial(), adsi_careful_send(), agent_ack_sleep(), agent_read(), app_exec(), ast_bridge_call(), ast_channel_free(), ast_channel_spy_free(), ast_channel_spy_read_frame(), ast_dsp_process(), ast_feature_request_and_dial(), ast_jb_destroy(), ast_jb_put(), ast_masq_park_call(), ast_queue_frame(), ast_recvtext(), ast_rtp_write(), ast_safe_sleep_conditional(), ast_send_image(), ast_slinfactory_destroy(), ast_slinfactory_read(), ast_tonepair(), ast_translate(), ast_udptl_bridge(), ast_waitfordigit_full(), ast_write(), async_wait(), autoservice_run(), background_detect_exec(), bridge_native_loop(), bridge_p2p_loop(), builtin_atxfer(), calc_cost(), channel_spy(), check_goto_on_transfer(), conf_exec(), conf_flush(), conf_free(), conf_run(), copy_data_from_queue(), create_jb(), dictate_exec(), disa_exec(), do_parking_thread(), do_waiting(), echo_exec(), find_cache(), gen_generate(), handle_invite_replaces(), handle_recordfile(), iax_park_thread(), ices_exec(), isAnsweringMachine(), jb_get_and_deliver(), measurenoise(), moh_files_generator(), monitor_dial(), mp3_exec(), mwanalyze_exec(), NBScat_exec(), nv_background_detect_exec(), nv_detectfax_exec(), queue_frame_to_spies(), receive_dtmf_digits(), recordthread(), rpt(), run_agi(), rxfax_exec(), send_tone_burst(), send_waveform_to_channel(), sendurl_exec(), speech_background(), spy_generate(), ss_thread(), txfax_exec(), wait_for_answer(), wait_for_hangup(), wait_for_winner(), waitforring_exec(), waitstream_core(), and zt_bridge().

00391 {
00392    ast_frame_free(fr, 1);
00393 }

struct ast_frame* ast_frisolate ( struct ast_frame fr  ) 

Makes a frame independent of any static storage.

Parameters:
fr frame to act upon Take a frame, and if it's not been malloc'd, make a malloc'd copy and if the data hasn't been malloced then make the data malloc'd. If you need to store frames, say for queueing, then you should call this function.
Returns:
Returns a frame on success, NULL on error

Definition at line 382 of file frame.c.

References ast_frame_header_new(), AST_FRIENDLY_OFFSET, ast_malloc, AST_MALLOCD_DATA, AST_MALLOCD_HDR, AST_MALLOCD_SRC, ast_strdup, ast_frame::data, ast_frame::datalen, ast_frame::frametype, free, ast_frame::has_timing_info, ast_frame::len, ast_frame::mallocd, ast_frame::offset, ast_frame::samples, ast_frame::seqno, ast_frame::src, ast_frame::subclass, and ast_frame::ts.

Referenced by jpeg_read_image().

00383 {
00384    struct ast_frame *out;
00385    void *newdata;
00386    
00387    if (!(fr->mallocd & AST_MALLOCD_HDR)) {
00388       /* Allocate a new header if needed */
00389       if (!(out = ast_frame_header_new()))
00390          return NULL;
00391       out->frametype = fr->frametype;
00392       out->subclass = fr->subclass;
00393       out->datalen = fr->datalen;
00394       out->samples = fr->samples;
00395       out->offset = fr->offset;
00396       out->data = fr->data;
00397       /* Copy the timing data */
00398       out->has_timing_info = fr->has_timing_info;
00399       if (fr->has_timing_info) {
00400          out->ts = fr->ts;
00401          out->len = fr->len;
00402          out->seqno = fr->seqno;
00403       }
00404    } else
00405       out = fr;
00406    
00407    if (!(fr->mallocd & AST_MALLOCD_SRC)) {
00408       if (fr->src) {
00409          if (!(out->src = ast_strdup(fr->src))) {
00410             if (out != fr)
00411                free(out);
00412             return NULL;
00413          }
00414       }
00415    } else
00416       out->src = fr->src;
00417    
00418    if (!(fr->mallocd & AST_MALLOCD_DATA))  {
00419       if (!(newdata = ast_malloc(fr->datalen + AST_FRIENDLY_OFFSET))) {
00420          if (out->src != fr->src)
00421             free((void *) out->src);
00422          if (out != fr)
00423             free(out);
00424          return NULL;
00425       }
00426       newdata += AST_FRIENDLY_OFFSET;
00427       out->offset = AST_FRIENDLY_OFFSET;
00428       out->datalen = fr->datalen;
00429       memcpy(newdata, fr->data, fr->datalen);
00430       out->data = newdata;
00431    }
00432 
00433    out->mallocd = AST_MALLOCD_HDR | AST_MALLOCD_SRC | AST_MALLOCD_DATA;
00434    
00435    return out;
00436 }

struct ast_format_list* ast_get_format_list ( size_t *  size  ) 

Definition at line 525 of file frame.c.

References AST_FORMAT_LIST.

00526 {
00527    *size = (sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]));
00528    return AST_FORMAT_LIST;
00529 }

struct ast_format_list* ast_get_format_list_index ( int  index  ) 

Definition at line 520 of file frame.c.

References AST_FORMAT_LIST.

00521 {
00522    return &AST_FORMAT_LIST[index];
00523 }

int ast_getformatbyname ( const char *  name  ) 

Gets a format from a name.

Parameters:
name string of format
Returns:
This returns the form of the format in binary on success, 0 on error.

Definition at line 591 of file frame.c.

References ast_expand_codec_alias(), AST_FORMAT_LIST, and format.

Referenced by ast_parse_allow_disallow(), iax_template_parse(), load_moh_classes(), reload_config(), and try_suggested_sip_codec().

00592 {
00593    int x, all, format = 0;
00594 
00595    all = strcasecmp(name, "all") ? 0 : 1;
00596    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
00597       if(AST_FORMAT_LIST[x].visible && (all || 
00598            !strcasecmp(AST_FORMAT_LIST[x].name,name) ||
00599            !strcasecmp(AST_FORMAT_LIST[x].name,ast_expand_codec_alias(name)))) {
00600          format |= AST_FORMAT_LIST[x].bits;
00601          if(!all)
00602             break;
00603       }
00604    }
00605 
00606    return format;
00607 }

char* ast_getformatname ( int  format  ) 

Get the name of a format.

Parameters:
format id of format
Returns:
A static string containing the name of the format or "UNKN" if unknown.

Definition at line 531 of file frame.c.

References AST_FORMAT_LIST, ast_format_list::bits, name, and ast_format_list::visible.

Referenced by __ast_play_and_record(), __ast_read(), __ast_register_translator(), __login_exec(), __sip_show_channels(), _sip_show_peer(), add_codec_to_answer(), add_codec_to_sdp(), agent_call(), ast_channel_getformatname(), ast_channel_spy_add(), ast_codec_get_len(), ast_codec_get_samples(), ast_codec_pref_string(), ast_dsp_process(), ast_frame_dump(), ast_openvstream(), ast_rtp_write(), ast_slinfactory_feed(), ast_streamfile(), ast_translator_build_path(), ast_unregister_translator(), ast_writestream(), background_detect_exec(), do_waiting(), eagi_exec(), func_channel_read(), function_iaxpeer(), function_sippeer(), iax2_request(), iax2_show_channels(), iax2_show_peer(), iax_show_provisioning(), moh_classes_show(), moh_release(), nv_background_detect_exec(), nv_detectfax_exec(), oh323_rtp_read(), phone_setup(), print_codec_to_cli(), queue_frame_to_spies(), rebuild_matrix(), register_translator(), set_format(), set_peer_capabilities(), show_codecs(), show_codecs_deprecated(), show_file_formats(), show_file_formats_deprecated(), show_image_formats(), show_image_formats_deprecated(), show_translation(), show_translation_deprecated(), sip_request_call(), sip_rtp_read(), socket_process(), and zt_read().

00532 {
00533    int x;
00534    char *ret = "unknown";
00535    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
00536       if(AST_FORMAT_LIST[x].visible && AST_FORMAT_LIST[x].bits == format) {
00537          ret = AST_FORMAT_LIST[x].name;
00538          break;
00539       }
00540    }
00541    return ret;
00542 }

char* ast_getformatname_multiple ( char *  buf,
size_t  size,
int  format 
)

Get the names of a set of formats.

Parameters:
buf a buffer for the output string
size size of buf (bytes)
format the format (combined IDs of codecs) Prints a list of readable codec names corresponding to "format". ex: for format=AST_FORMAT_GSM|AST_FORMAT_SPEEX|AST_FORMAT_ILBC it will return "0x602 (GSM|SPEEX|ILBC)"
Returns:
The return value is buf.

Definition at line 544 of file frame.c.

References AST_FORMAT_LIST, ast_format_list::bits, len, name, and ast_format_list::visible.

Referenced by _sip_show_peer(), add_sdp(), ast_channel_getformatname_multiple(), ast_streamfile(), function_iaxpeer(), function_sippeer(), handle_showchan(), handle_showchan_deprecated(), iax2_show_peer(), process_sdp(), serialize_showchan(), sip_new(), sip_request_call(), sip_show_channel(), sip_show_settings(), and sip_write().

00545 {
00546    int x;
00547    unsigned len;
00548    char *start, *end = buf;
00549 
00550    if (!size)
00551       return buf;
00552    snprintf(end, size, "0x%x (", format);
00553    len = strlen(end);
00554    end += len;
00555    size -= len;
00556    start = end;
00557    for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
00558       if (AST_FORMAT_LIST[x].visible && (AST_FORMAT_LIST[x].bits & format)) {
00559          snprintf(end, size,"%s|",AST_FORMAT_LIST[x].name);
00560          len = strlen(end);
00561          end += len;
00562          size -= len;
00563       }
00564    }
00565    if (start == end)
00566       snprintf(start, size, "nothing)");
00567    else if (size > 1)
00568       *(end -1) = ')';
00569    return buf;
00570 }

void ast_parse_allow_disallow ( struct ast_codec_pref pref,
int *  mask,
const char *  list,
int  allowing 
)

Parse an "allow" or "deny" line in a channel or device configuration and update the capabilities mask and pref if provided. Video codecs are not added to codec preference lists, since we can not transcode.

Definition at line 1268 of file frame.c.

References ast_codec_pref_append(), ast_codec_pref_remove(), ast_codec_pref_setsize(), AST_FORMAT_AUDIO_MASK, ast_getformatbyname(), ast_log(), ast_strdupa, format, LOG_DEBUG, LOG_WARNING, option_debug, parse(), and strsep().

Referenced by build_device(), build_peer(), build_user(), gtalk_create_member(), gtalk_load_config(), reload_config(), set_config(), and update_common_options().

01269 {
01270    char *parse = NULL, *this = NULL, *psize = NULL;
01271    int format = 0, framems = 0;
01272 
01273    parse = ast_strdupa(list);
01274    while ((this = strsep(&parse, ","))) {
01275       framems = 0;
01276       if ((psize = strrchr(this, ':'))) {
01277          *psize++ = '\0';
01278          if (option_debug)
01279             ast_log(LOG_DEBUG,"Packetization for codec: %s is %s\n", this, psize);
01280          framems = atoi(psize);
01281          if (framems < 0)
01282             framems = 0;
01283       }
01284       if (!(format = ast_getformatbyname(this))) {
01285          ast_log(LOG_WARNING, "Cannot %s unknown format '%s'\n", allowing ? "allow" : "disallow", this);
01286          continue;
01287       }
01288 
01289       if (mask) {
01290          if (allowing)
01291             *mask |= format;
01292          else
01293             *mask &= ~format;
01294       }
01295 
01296       /* Set up a preference list for audio. Do not include video in preferences 
01297          since we can not transcode video and have to use whatever is offered
01298        */
01299       if (pref && (format & AST_FORMAT_AUDIO_MASK)) {
01300          if (strcasecmp(this, "all")) {
01301             if (allowing) {
01302                ast_codec_pref_append(pref, format);
01303                ast_codec_pref_setsize(pref, format, framems);
01304             }
01305             else
01306                ast_codec_pref_remove(pref, format);
01307          } else if (!allowing) {
01308             memset(pref, 0, sizeof(*pref));
01309          }
01310       }
01311    }
01312 }

void ast_smoother_free ( struct ast_smoother s  ) 

Definition at line 282 of file frame.c.

References free, and s.

Referenced by ast_rtp_codec_setpref(), ast_rtp_destroy(), and ast_rtp_write().

00283 {
00284    free(s);
00285 }

int ast_smoother_get_flags ( struct ast_smoother smoother  ) 

Definition at line 156 of file frame.c.

References s.

00157 {
00158    return s->flags;
00159 }

struct ast_smoother* ast_smoother_new ( int  bytes  ) 

Definition at line 146 of file frame.c.

References ast_malloc, ast_smoother_reset(), and s.

Referenced by ast_rtp_write().

00147 {
00148    struct ast_smoother *s;
00149    if (size < 1)
00150       return NULL;
00151    if ((s = ast_malloc(sizeof(*s))))
00152       ast_smoother_reset(s, size);
00153    return s;
00154 }

struct ast_frame* ast_smoother_read ( struct ast_smoother s  ) 

Definition at line 232 of file frame.c.

References AST_FRAME_VOICE, AST_FRIENDLY_OFFSET, ast_log(), AST_SMOOTHER_FLAG_G729, ast_tvadd(), len, LOG_WARNING, and s.

Referenced by ast_rtp_write().

00233 {
00234    struct ast_frame *opt;
00235    int len;
00236 
00237    /* IF we have an optimization frame, send it */
00238    if (s->opt) {
00239       if (s->opt->offset < AST_FRIENDLY_OFFSET)
00240          ast_log(LOG_WARNING, "Returning a frame of inappropriate offset (%d).\n",
00241                      s->opt->offset);
00242       opt = s->opt;
00243       s->opt = NULL;
00244       return opt;
00245    }
00246 
00247    /* Make sure we have enough data */
00248    if (s->len < s->size) {
00249       /* Or, if this is a G.729 frame with VAD on it, send it immediately anyway */
00250       if (!((s->flags & AST_SMOOTHER_FLAG_G729) && (s->size % 10)))
00251          return NULL;
00252    }
00253    len = s->size;
00254    if (len > s->len)
00255       len = s->len;
00256    /* Make frame */
00257    s->f.frametype = AST_FRAME_VOICE;
00258    s->f.subclass = s->format;
00259    s->f.data = s->framedata + AST_FRIENDLY_OFFSET;
00260    s->f.offset = AST_FRIENDLY_OFFSET;
00261    s->f.datalen = len;
00262    /* Samples will be improper given VAD, but with VAD the concept really doesn't even exist */
00263    s->f.samples = len * s->samplesperbyte;   /* XXX rounding */
00264    s->f.delivery = s->delivery;
00265    /* Fill Data */
00266    memcpy(s->f.data, s->data, len);
00267    s->len -= len;
00268    /* Move remaining data to the front if applicable */
00269    if (s->len) {
00270       /* In principle this should all be fine because if we are sending
00271          G.729 VAD, the next timestamp will take over anyawy */
00272       memmove(s->data, s->data + len, s->len);
00273       if (!ast_tvzero(s->delivery)) {
00274          /* If we have delivery time, increment it, otherwise, leave it at 0 */
00275          s->delivery = ast_tvadd(s->delivery, ast_samp2tv(s->f.samples, 8000));
00276       }
00277    }
00278    /* Return frame */
00279    return &s->f;
00280 }

void ast_smoother_reset ( struct ast_smoother s,
int  bytes 
)

Definition at line 140 of file frame.c.

References s.

Referenced by ast_smoother_new().

00141 {
00142    memset(s, 0, sizeof(*s));
00143    s->size = size;
00144 }

void ast_smoother_set_flags ( struct ast_smoother smoother,
int  flags 
)

Definition at line 161 of file frame.c.

References s.

Referenced by ast_rtp_write().

00162 {
00163    s->flags = flags;
00164 }

int ast_smoother_test_flag ( struct ast_smoother s,
int  flag 
)

Definition at line 166 of file frame.c.

References s.

Referenced by ast_rtp_write().

00167 {
00168    return (s->flags & flag);
00169 }

void ast_swapcopy_samples ( void *  dst,
const void *  src,
int  samples 
)

Definition at line 509 of file frame.c.

Referenced by __ast_smoother_feed(), iax_frame_wrap(), and phone_write_buf().

00510 {
00511    int i;
00512    unsigned short *dst_s = dst;
00513    const unsigned short *src_s = src;
00514 
00515    for (i = 0; i < samples; i++)
00516       dst_s[i] = (src_s[i]<<8) | (src_s[i]>>8);
00517 }


Variable Documentation

struct ast_frame ast_null_frame

Queueing a null frame is fairly common, so we declare a global null frame object for this purpose instead of having to declare one on the stack

Definition at line 138 of file frame.c.

Referenced by __ast_read(), __oh323_rtp_create(), __oh323_update_info(), agent_new(), agent_read(), ast_channel_masquerade(), ast_channel_setwhentohangup(), ast_rtcp_read(), ast_rtp_read(), ast_softhangup_nolock(), ast_udptl_read(), conf_run(), features_read(), gtalk_rtp_read(), handle_request_invite(), handle_response_invite(), iax2_read(), local_read(), mgcp_rtp_read(), oh323_read(), oh323_rtp_read(), process_sdp(), send_dtmf(), sip_rtp_read(), skinny_rtp_read(), and wakeup_sub().


Generated on Mon May 14 04:48:03 2007 for Asterisk - the Open Source PBX by  doxygen 1.5.1