#include <sys/types.h>
#include <sys/time.h>
#include "asterisk/endian.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.
Defines | |
#define | AST_CONTROL_ANSWER 4 |
#define | AST_CONTROL_BUSY 5 |
#define | AST_CONTROL_CONGESTION 8 |
#define | AST_CONTROL_FLASH 9 |
#define | AST_CONTROL_HANGUP 1 |
#define | AST_CONTROL_HOLD 16 |
#define | AST_CONTROL_OFFHOOK 7 |
#define | AST_CONTROL_OPTION 11 |
#define | AST_CONTROL_PROCEEDING 15 |
#define | AST_CONTROL_PROGRESS 14 |
#define | AST_CONTROL_RADIO_KEY 12 |
#define | AST_CONTROL_RADIO_UNKEY 13 |
#define | AST_CONTROL_RING 2 |
#define | AST_CONTROL_RINGING 3 |
#define | AST_CONTROL_TAKEOFFHOOK 6 |
#define | AST_CONTROL_UNHOLD 17 |
#define | AST_CONTROL_VIDUPDATE 18 |
#define | AST_CONTROL_WINK 10 |
#define | AST_FORMAT_ADPCM (1 << 5) |
#define | AST_FORMAT_ALAW (1 << 3) |
#define | AST_FORMAT_G723_1 (1 << 0) |
#define | AST_FORMAT_G726 (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_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_PNG (1 << 17) |
#define | AST_FORMAT_SLINEAR (1 << 6) |
#define | AST_FORMAT_SPEEX (1 << 9) |
#define | AST_FORMAT_ULAW (1 << 2) |
#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_CNG 10 |
#define | AST_FRAME_CONTROL 4 |
#define | AST_FRAME_DTMF 1 |
#define | AST_FRAME_HTML 9 |
#define | AST_FRAME_IAX 6 |
#define | AST_FRAME_IMAGE 8 |
#define | AST_FRAME_NULL 5 |
#define | AST_FRAME_T38 11 |
#define | AST_FRAME_TEXT 7 |
#define | AST_FRAME_VIDEO 3 |
#define | AST_FRAME_VOICE 2 |
#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_OPTION_AUDIO_MODE 4 |
#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_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_G729 (1 << 0) |
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 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 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 a codec preference list up or down 65 bytes so that it becomes an ASCII string. | |
int | ast_codec_pref_index (struct ast_codec_pref *pref, int index) |
Codec located at a particular place in the preference index. | |
void | ast_codec_pref_init (struct ast_codec_pref *pref) |
Initialize a codec preference to "no preference". | |
void | ast_codec_pref_remove (struct ast_codec_pref *pref, int format) |
Remove a codec from a preference list. | |
int | ast_codec_pref_string (struct ast_codec_pref *pref, char *buf, size_t size) |
Dump codec preference list into a string. | |
int | ast_fr_fdhangup (int fd) |
Sends a hangup to an fd Send a hangup (NULL equivalent) on an fd. | |
ast_frame * | ast_fr_fdread (int fd) |
Reads a frame from an fd Read a frame from a stream or packet fd, as written by fd_write. | |
int | ast_fr_fdwrite (int fd, struct ast_frame *frame) |
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 (char *name, struct ast_frame *f, char *prefix) |
int | ast_frame_slinear_sum (struct ast_frame *f1, struct ast_frame *f2) |
Sums two frames of audio samples. | |
ast_frame * | ast_frdup (struct ast_frame *fr) |
Copies a frame. | |
void | ast_frfree (struct ast_frame *fr) |
Requests a frame to be allocated Frees a frame. | |
ast_frame * | ast_frisolate (struct ast_frame *fr) |
Copies a frame. | |
ast_format_list * | ast_get_format_list (size_t *size) |
ast_format_list * | ast_get_format_list_index (int index) |
int | ast_getformatbyname (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 and update the mask and pref if provided. | |
void | ast_smoother_free (struct ast_smoother *s) |
int | ast_smoother_get_flags (struct ast_smoother *smoother) |
ast_smoother * | ast_smoother_new (int bytes) |
ast_frame * | ast_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) |
void | ast_swapcopy_samples (void *dst, const void *src, int samples) |
Definition in file frame.h.
|
Remote end has answered Definition at line 217 of file frame.h. Referenced by __ast_dsp_call_progress(), __ast_request_and_dial(), agent_read(), alsa_call(), ast_dsp_process(), ast_feature_request_and_dial(), ast_frame_dump(), ast_pickup_call(), ast_read(), ast_waitfordigit_full(), cb_events(), connection_made(), console_answer(), console_sendtext(), control2str(), handle_hd_hf(), handle_message(), handle_response_invite(), i4l_handle_escape(), iax2_answer(), local_answer(), misdn_indication(), monitor_handle_owned(), nbs_call(), oss_answer(), oss_call(), phone_exception(), pickup_exec(), rpt(), vpb_indicate(), wait_for_answer(), zt_handle_event(), and zt_read(). |
|
|
Congestion (circuits busy) Definition at line 225 of file frame.h. Referenced by __ast_dsp_call_progress(), __ast_request_and_dial(), alsa_indicate(), ast_bridge_call(), ast_dsp_process(), ast_feature_request_and_dial(), ast_frame_dump(), ast_indicate(), async_wait(), auto_congest(), control2str(), disa_exec(), handle_response(), handle_response_invite(), mgcp_indicate(), misdn_indication(), monitor_handle_owned(), nbs_call(), oh323_indicate(), oss_hangup(), oss_indicate(), pbx_builtin_congestion(), send_cause2ast(), sip_indicate(), skinny_indicate(), socket_read(), vpb_indicate(), wait_for_answer(), zt_indicate(), and zt_read(). |
|
Flash hook Definition at line 227 of file frame.h. Referenced by ast_bridge_call(), ast_frame_dump(), console_flash(), control2str(), handle_request_info(), misdn_indication(), monitor_handle_owned(), send_dtmf(), wait_for_answer(), zt_indicate(), and zt_read(). |
|
Other end has hungup Definition at line 211 of file frame.h. Referenced by __ast_dsp_call_progress(), __ast_request_and_dial(), app_exec(), ast_bridge_call(), ast_dsp_process(), ast_feature_request_and_dial(), ast_frame_dump(), ast_queue_frame(), ast_queue_hangup(), ast_read(), ast_recvtext(), ast_waitfordigit_full(), attempt_transmit(), control2str(), disa_exec(), do_parking_thread(), local_hangup(), monitor_handle_owned(), receive_dtmf_digits(), rpt(), rpt_exec(), vpb_indicate(), and wait_for_answer(). |
|
Indicate call is placed on hold Definition at line 241 of file frame.h. Referenced by ast_generic_bridge(), ast_indicate(), ast_park_call(), ast_rtp_bridge(), builtin_atxfer(), builtin_blindtransfer(), control2str(), misdn_indication(), sip_indicate(), wait_for_answer(), and zt_indicate(). |
|
Line is off hook Definition at line 223 of file frame.h. Referenced by ast_frame_dump(), control2str(), misdn_indication(), wait_for_answer(), and zt_handle_event(). |
|
Set a low-level option Definition at line 231 of file frame.h. Referenced by ast_bridge_call(), ast_frame_dump(), control2str(), and iax2_setoption(). |
|
Indicate CALL PROCEEDING Definition at line 239 of file frame.h. Referenced by ast_indicate(), control2str(), oh323_indicate(), sip_indicate(), skinny_indicate(), wait_for_answer(), and zt_indicate(). |
|
Indicate PROGRESS Definition at line 237 of file frame.h. Referenced by __ast_request_and_dial(), ast_indicate(), cb_events(), control2str(), handle_response(), handle_response_invite(), misdn_indication(), oh323_indicate(), pbx_builtin_progress(), progress(), setup_rtp_connection(), sip_indicate(), skinny_indicate(), socket_read(), wait_for_answer(), and zt_indicate(). |
|
Key Radio Definition at line 233 of file frame.h. Referenced by ast_frame_dump(), control2str(), function_remote(), handle_remote_data(), handle_remote_phone_dtmf(), rmt_telem_start(), rpt(), rpt_exec(), zt_handle_event(), zt_indicate(), and zt_read(). |
|
Un-Key Radio Definition at line 235 of file frame.h. Referenced by ast_frame_dump(), control2str(), function_remote(), handle_remote_data(), handle_remote_phone_dtmf(), rmt_telem_finish(), rmt_telem_start(), rpt(), rpt_exec(), zt_handle_event(), zt_indicate(), and zt_read(). |
|
Local ring Definition at line 213 of file frame.h. Referenced by aopen_handle_escape(), ast_frame_dump(), bestdata_handle_escape(), control2str(), i4l_handle_escape(), misdn_indication(), modem_mini_packet(), monitor_handle_owned(), oss_call(), ss_thread(), waitforring_exec(), and zt_handle_event(). |
|
|
Make it go off hook Definition at line 221 of file frame.h. Referenced by ast_frame_dump(), control2str(), and misdn_indication(). |
|
Indicate call is left from hold Definition at line 243 of file frame.h. Referenced by ast_feature_request_and_dial(), ast_generic_bridge(), ast_indicate(), ast_rtp_bridge(), builtin_atxfer(), builtin_blindtransfer(), control2str(), do_parking_thread(), misdn_indication(), park_exec(), sip_indicate(), wait_for_answer(), and zt_indicate(). |
|
Indicate video frame update Definition at line 245 of file frame.h. Referenced by alsa_indicate(), ast_generic_bridge(), ast_indicate(), ast_play_and_record_full(), ast_rtp_bridge(), handle_recordfile(), handle_request_info(), oss_indicate(), record_exec(), sip_indicate(), and wait_for_answer(). |
|
Wink Definition at line 229 of file frame.h. Referenced by ast_frame_dump(), and control2str(). |
|
ADPCM (IMA) Definition at line 183 of file frame.h. Referenced by adpcmtolin_sample(), ast2vpbformat(), ast2vpbformatname(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_rtp_write(), astformatbits(), convertcap(), lintoadpcm_frameout(), load_module(), vox_open(), vox_read(), and vox_write(). |
|
Raw A-law data (G.711) Definition at line 179 of file frame.h. Referenced by alawtolin_sample(), alawtoulaw_sample(), ast2vpbformat(), ast2vpbformatname(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_dsp_process(), ast_rtp_write(), astformatbits(), cb_events(), convertcap(), lintoalaw_frameout(), load_module(), misdn_read(), misdn_set_opt_exec(), misdn_tx2ast_frm(), pcm_open(), pcm_read(), pcm_write(), sms_exec(), sms_generate(), ulawtoalaw_frameout(), zt_new(), zt_read(), and zt_write(). |
|
G.723.1 compression Definition at line 173 of file frame.h. Referenced by ast_best_codec(), ast_codec_get_samples(), ast_rtp_write(), convertcap(), g723_open(), g723_write(), g723tolin_sample(), lintog723_frameout(), load_module(), phone_request(), phone_setup(), and phone_write(). |
|
ADPCM (G.726, 32kbps) Definition at line 181 of file frame.h. Referenced by ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_rtp_write(), g726_16_open(), g726_24_open(), g726_32_open(), g726_40_open(), g726_read(), g726_write(), g726tolin_sample(), lintog726_frameout(), and load_module(). |
|
G.729A audio Definition at line 189 of file frame.h. Referenced by add_codec_to_sdp(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_rtp_write(), convertcap(), g729_open(), g729_read(), g729_write(), and load_module(). |
|
GSM compression Definition at line 175 of file frame.h. Referenced by ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_rtp_write(), convertcap(), gsm_open(), gsm_read(), gsm_write(), gsmtolin_sample(), lintogsm_frameout(), load_module(), wav_open(), wav_read(), and wav_write(). |
|
H.261 Video Definition at line 201 of file frame.h. Referenced by ast_rtp_write(). |
|
H.263 Video Definition at line 203 of file frame.h. Referenced by ast_rtp_write(), h263_open(), h263_read(), h263_write(), and load_module(). |
|
H.263+ Video Definition at line 205 of file frame.h. Referenced by ast_rtp_write(). |
|
iLBC Free Compression Definition at line 193 of file frame.h. Referenced by ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_codec_interp_len(), ast_rtp_write(), convertcap(), ilbc_open(), ilbc_read(), ilbc_write(), ilbctolin_sample(), lintoilbc_frameout(), and load_module(). |
|
JPEG Images Definition at line 197 of file frame.h. Referenced by jpeg_read_image(), and jpeg_write_image(). |
|
LPC10, 180 samples/frame Definition at line 187 of file frame.h. Referenced by ast_best_codec(), ast_codec_get_samples(), ast_rtp_write(), lintolpc10_frameout(), and lpc10tolin_sample(). |
|
Maximum audio format Definition at line 195 of file frame.h. Referenced by add_sdp(), ast_closestream(), ast_filehelper(), ast_playstream(), ast_rtp_raw_write(), ast_rtp_read(), ast_writestream(), oh323_request(), phone_read(), sip_request_call(), transmit_connect_with_sdp(), and transmit_modify_with_sdp(). |
|
Maximum video format Definition at line 207 of file frame.h. Referenced by add_sdp(). |
|
PNG Images Definition at line 199 of file frame.h. Referenced by phone_read(). |
|
|
SpeeX Free Compression Definition at line 191 of file frame.h. Referenced by ast_best_codec(), ast_codec_get_samples(), ast_rtp_write(), convertcap(), lintospeex_frameout(), and speextolin_sample(). |
|
Raw mu-law data (G.711) Definition at line 177 of file frame.h. Referenced by __adsi_transmit_messages(), adsi_careful_send(), adsi_transmit_message_full(), alarmreceiver_exec(), alawtoulaw_frameout(), ast2vpbformat(), ast2vpbformatname(), ast_best_codec(), ast_codec_get_len(), ast_codec_get_samples(), ast_dsp_process(), ast_rtp_write(), astformatbits(), au_open(), au_read(), au_write(), build_conf(), conf_run(), convertcap(), disa_exec(), get_callerid_ast(), lintoulaw_frameout(), load_module(), milliwatt_exec(), milliwatt_generate(), pcm_open(), pcm_read(), pcm_write(), phone_request(), phone_setup(), phone_write(), send_tone_burst(), ulawtoalaw_sample(), ulawtolin_sample(), zt_new(), zt_read(), zt_request(), and zt_write(). |
|
Definition at line 364 of file frame.h. Referenced by ast_rtp_read(), and socket_read(). |
|
Definition at line 363 of file frame.h. Referenced by phone_read(). |
|
Comfort Noise frame (subclass is level of CNG in -dBov), body may include zero or more 8-bit quantization coefficients Definition at line 147 of file frame.h. Referenced by ast_read(), ast_translate(), calc_timestamp(), lintospeex_frameout(), process_rfc3389(), and schedule_delivery(). |
|
|
|
HTML Frame Definition at line 144 of file frame.h. Referenced by ast_frame_dump(), ast_generic_bridge(), ast_write(), iax2_sendhtml(), local_sendhtml(), sendurl_exec(), and wait_for_answer(). |
|
Inter Asterisk Exchange private frame type Definition at line 138 of file frame.h. Referenced by ast_frame_dump(), attempt_transmit(), auth_reject(), authenticate_reply(), authenticate_request(), auto_hangup(), cache_get_callno_locked(), calc_timestamp(), dp_lookup(), iax2_call(), iax2_do_register(), iax2_dprequest(), iax2_hangup(), iax2_poke_peer(), iax2_provision(), iax2_send(), iax2_start_transfer(), iax2_transfer(), iax2_vnak(), iax_showframe(), raw_hangup(), registry_authrequest(), registry_rerequest(), send_lagrq(), send_ping(), socket_read(), try_transfer(), and update_registry(). |
|
Image Frames Definition at line 142 of file frame.h. Referenced by ast_frame_dump(), ast_generic_bridge(), iax2_bridge(), iax2_sendimage(), jpeg_read_image(), jpeg_write_image(), mgcp_write(), nbs_xwrite(), oh323_write(), phone_read(), phone_write(), sip_write(), skinny_write(), wait_for_answer(), and zt_write(). |
|
|
T.38 Fax-over-IP data stream |
|
Text messages Definition at line 140 of file frame.h. Referenced by ast_feature_request_and_dial(), ast_frame_dump(), ast_generic_bridge(), ast_recvtext(), ast_write(), console_sendtext(), function_ilink(), handle_link_data(), iax2_bridge(), iax2_sendtext(), receive_message(), rpt(), rpt_exec(), send_link_dtmf(), wait_for_answer(), and zt_read(). |
|
Video frame, maybe?? :) Definition at line 132 of file frame.h. Referenced by ast_frame_dump(), ast_generic_bridge(), ast_play_and_prepend(), ast_play_and_record_full(), ast_rtp_bridge(), ast_rtp_read(), ast_rtp_write(), ast_write(), ast_writestream(), decode_frame(), echo_exec(), h263_open(), h263_read(), h263_write(), handle_recordfile(), iax2_bridge(), iax2_send(), phone_read(), record_exec(), sip_write(), socket_read(), and vpb_bridge(). |
|
|
|
Beginning frame Definition at line 157 of file frame.h. Referenced by ast_frame_dump(). |
|
Data frame Definition at line 155 of file frame.h. Referenced by ast_frame_dump(). |
|
End frame Definition at line 159 of file frame.h. Referenced by ast_frame_dump(). |
|
Load is complete Definition at line 161 of file frame.h. Referenced by ast_frame_dump(), and sendurl_exec(). |
|
Reject link request Definition at line 169 of file frame.h. Referenced by ast_frame_dump(). |
|
Send URL, and track Definition at line 165 of file frame.h. Referenced by ast_frame_dump(). |
|
Peer is unable to support HTML Definition at line 163 of file frame.h. Referenced by ast_frame_dump(), and sendurl_exec(). |
|
No more HTML linkage Definition at line 167 of file frame.h. Referenced by ast_frame_dump(). |
|
Sending a URL Definition at line 153 of file frame.h. Referenced by ast_channel_sendurl(), and ast_frame_dump(). |
|
Need the data be free'd? Definition at line 122 of file frame.h. Referenced by ast_frfree(), and ast_frisolate(). |
|
Need the header be free'd? Definition at line 120 of file frame.h. Referenced by ast_frdup(), ast_frfree(), and ast_frisolate(). |
|
Need the source be free'd? (haha!) Definition at line 124 of file frame.h. Referenced by ast_frfree(), and ast_frisolate(). |
|
Definition at line 117 of file frame.h. Referenced by __ast_smoother_feed(). |
|
Set (or clear) Audio (Not-Clear) Mode Definition at line 268 of file frame.h. Referenced by zt_hangup(), and zt_setoption(). |
|
|
|
|
|
|
|
|
|
Definition at line 250 of file frame.h. Referenced by ast_bridge_call(), and iax2_setoption(). |
|
|
|
Relax the parameters for DTMF reception (mainly for radio use) Definition at line 265 of file frame.h. Referenced by rpt(), and zt_setoption(). |
|
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 284 of file frame.h. Referenced by iax2_setoption(), play_record_review(), reset_volumes(), set_talk_volume(), vm_forwardoptions(), and zt_setoption(). |
|
Put a compatible channel into TDD (TTY for the hearing-impared) mode Definition at line 262 of file frame.h. Referenced by handle_tddmode(), zt_hangup(), and zt_setoption(). |
|
Verify touchtones by muting audio transmission (and reception) and verify the tone is still present Definition at line 259 of file frame.h. Referenced by conf_run(), rpt(), try_calling(), zt_hangup(), and zt_setoption(). |
|
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 276 of file frame.h. Referenced by chanspy_exec(), iax2_setoption(), reset_volumes(), set_listen_volume(), set_volume(), and zt_setoption(). |
|
Definition at line 412 of file frame.h. Referenced by ast_rtp_write(). |
|
Definition at line 414 of file frame.h. Referenced by ast_rtp_write(). |
|
|
|
Definition at line 247 of file frame.h. Referenced by __ast_smoother_feed(), ast_rtp_write(), and ast_smoother_read(). |
|
Definition at line 137 of file frame.c. References AST_FRAME_VOICE, ast_log(), AST_MIN_OFFSET, AST_SMOOTHER_FLAG_G729, ast_swapcopy_samples(), ast_frame::data, ast_smoother::data, ast_frame::datalen, ast_smoother::delivery, ast_frame::delivery, ast_smoother::flags, ast_smoother::format, ast_frame::frametype, ast_smoother::len, LOG_NOTICE, LOG_WARNING, ast_frame::offset, ast_smoother::opt, ast_smoother::optimizablestream, ast_frame::samples, ast_smoother::samplesperbyte, ast_smoother::size, SMOOTHER_SIZE, and ast_frame::subclass. 00138 { 00139 if (f->frametype != AST_FRAME_VOICE) { 00140 ast_log(LOG_WARNING, "Huh? Can't smooth a non-voice frame!\n"); 00141 return -1; 00142 } 00143 if (!s->format) { 00144 s->format = f->subclass; 00145 s->samplesperbyte = (float)f->samples / (float)f->datalen; 00146 } else if (s->format != f->subclass) { 00147 ast_log(LOG_WARNING, "Smoother was working on %d format frames, now trying to feed %d?\n", s->format, f->subclass); 00148 return -1; 00149 } 00150 if (s->len + f->datalen > SMOOTHER_SIZE) { 00151 ast_log(LOG_WARNING, "Out of smoother space\n"); 00152 return -1; 00153 } 00154 if (((f->datalen == s->size) || ((f->datalen < 10) && (s->flags & AST_SMOOTHER_FLAG_G729))) 00155 && !s->opt && (f->offset >= AST_MIN_OFFSET)) { 00156 if (!s->len) { 00157 /* Optimize by sending the frame we just got 00158 on the next read, thus eliminating the douple 00159 copy */ 00160 s->opt = f; 00161 return 0; 00162 } else { 00163 s->optimizablestream++; 00164 if (s->optimizablestream > 10) { 00165 /* For the past 10 rounds, we have input and output 00166 frames of the correct size for this smoother, yet 00167 we were unable to optimize because there was still 00168 some cruft left over. Lets just drop the cruft so 00169 we can move to a fully optimized path */ 00170 s->len = 0; 00171 s->opt = f; 00172 return 0; 00173 } 00174 } 00175 } else 00176 s->optimizablestream = 0; 00177 if (s->flags & AST_SMOOTHER_FLAG_G729) { 00178 if (s->len % 10) { 00179 ast_log(LOG_NOTICE, "Dropping extra frame of G.729 since we already have a VAD frame at the end\n"); 00180 return 0; 00181 } 00182 } 00183 if (swap) 00184 ast_swapcopy_samples(s->data+s->len, f->data, f->samples); 00185 else 00186 memcpy(s->data + s->len, f->data, f->datalen); 00187 /* If either side is empty, reset the delivery time */ 00188 if (!s->len || ast_tvzero(f->delivery) || ast_tvzero(s->delivery)) /* XXX really ? */ 00189 s->delivery = f->delivery; 00190 s->len += f->datalen; 00191 return 0; 00192 }
|
|
Get a name from a format Gets a name from a format.
Definition at line 586 of file frame.c. Referenced by moh_alloc(), show_codec_n(), and show_codecs(). 00586 { 00587 int x = 0; 00588 char *ret = "unknown"; 00589 for (x = 0 ; x < sizeof(AST_FORMAT_LIST) / sizeof(struct ast_format_list) ; x++) { 00590 if(AST_FORMAT_LIST[x].visible && AST_FORMAT_LIST[x].bits == codec) { 00591 ret = AST_FORMAT_LIST[x].desc; 00592 break; 00593 } 00594 } 00595 return ret; 00596 }
|
|
Select the best 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 1000 of file frame.c. References ast_best_codec(), ast_format_list::bits, and ast_codec_pref::order. Referenced by process_sdp(), sip_new(), and socket_read(). 01001 { 01002 size_t size = 0; 01003 int x = 0, ret = 0, slot = 0; 01004 01005 size = sizeof(AST_FORMAT_LIST) / sizeof(struct ast_format_list); 01006 for (x = 0; x < size; x++) { 01007 slot = pref->order[x]; 01008 01009 if(!slot) 01010 break; 01011 if ( formats & AST_FORMAT_LIST[slot-1].bits ) { 01012 ret = AST_FORMAT_LIST[slot-1].bits; 01013 break; 01014 } 01015 } 01016 if(ret) 01017 return ret; 01018 01019 return find_best ? ast_best_codec(formats) : 0; 01020 }
|
|
Returns the number of bytes for the number of samples of the given format.
Definition at line 1241 of file frame.c. References AST_FORMAT_ADPCM, AST_FORMAT_ALAW, AST_FORMAT_G726, AST_FORMAT_G729A, AST_FORMAT_GSM, AST_FORMAT_ILBC, AST_FORMAT_SLINEAR, AST_FORMAT_ULAW, ast_getformatname(), ast_log(), and LOG_WARNING. Referenced by ast_channel_spy_read_frame(), copy_data_from_queue(), moh_generate(), and monmp3thread(). 01242 { 01243 int len = 0; 01244 01245 /* XXX Still need speex, g723, and lpc10 XXX */ 01246 switch(format) { 01247 case AST_FORMAT_ILBC: 01248 len = (samples / 240) * 50; 01249 break; 01250 case AST_FORMAT_GSM: 01251 len = (samples / 160) * 33; 01252 break; 01253 case AST_FORMAT_G729A: 01254 len = samples / 8; 01255 break; 01256 case AST_FORMAT_SLINEAR: 01257 len = samples * 2; 01258 break; 01259 case AST_FORMAT_ULAW: 01260 case AST_FORMAT_ALAW: 01261 len = samples; 01262 break; 01263 case AST_FORMAT_ADPCM: 01264 case AST_FORMAT_G726: 01265 len = samples / 2; 01266 break; 01267 default: 01268 ast_log(LOG_WARNING, "Unable to calculate sample length for format %s\n", ast_getformatname(format)); 01269 } 01270 01271 return len; 01272 }
|
|
Returns the number of samples contained in the frame.
Definition at line 1200 of file frame.c. References AST_FORMAT_ADPCM, AST_FORMAT_ALAW, AST_FORMAT_G723_1, AST_FORMAT_G726, 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(), ast_frame::data, ast_frame::datalen, g723_samples(), LOG_WARNING, speex_samples(), and ast_frame::subclass. Referenced by ast_rtp_read(), moh_generate(), schedule_delivery(), and socket_read(). 01201 { 01202 int samples=0; 01203 switch(f->subclass) { 01204 case AST_FORMAT_SPEEX: 01205 samples = speex_samples(f->data, f->datalen); 01206 break; 01207 case AST_FORMAT_G723_1: 01208 samples = g723_samples(f->data, f->datalen); 01209 break; 01210 case AST_FORMAT_ILBC: 01211 samples = 240 * (f->datalen / 50); 01212 break; 01213 case AST_FORMAT_GSM: 01214 samples = 160 * (f->datalen / 33); 01215 break; 01216 case AST_FORMAT_G729A: 01217 samples = f->datalen * 8; 01218 break; 01219 case AST_FORMAT_SLINEAR: 01220 samples = f->datalen / 2; 01221 break; 01222 case AST_FORMAT_LPC10: 01223 /* assumes that the RTP packet contains one LPC10 frame */ 01224 samples = 22 * 8; 01225 samples += (((char *)(f->data))[7] & 0x1) * 8; 01226 break; 01227 case AST_FORMAT_ULAW: 01228 case AST_FORMAT_ALAW: 01229 samples = f->datalen; 01230 break; 01231 case AST_FORMAT_ADPCM: 01232 case AST_FORMAT_G726: 01233 samples = f->datalen * 2; 01234 break; 01235 default: 01236 ast_log(LOG_WARNING, "Unable to calculate samples for format %s\n", ast_getformatname(f->subclass)); 01237 } 01238 return samples; 01239 }
|
|
Gets duration in ms of interpolation frame for a format.
Definition at line 456 of file frame.h. References AST_FORMAT_ILBC. Referenced by get_from_jb(). 00457 { 00458 return (format == AST_FORMAT_ILBC) ? 30 : 20; 00459 }
|
|
Append a codec to a preference list, removing it first if it was already there.
Definition at line 971 of file frame.c. References ast_codec_pref_remove(), ast_format_list::bits, and ast_codec_pref::order. Referenced by ast_parse_allow_disallow(). 00972 { 00973 size_t size = 0; 00974 int x = 0, newindex = -1; 00975 00976 ast_codec_pref_remove(pref, format); 00977 size = sizeof(AST_FORMAT_LIST) / sizeof(struct ast_format_list); 00978 00979 for (x = 0; x < size; x++) { 00980 if(AST_FORMAT_LIST[x].bits == format) { 00981 newindex = x + 1; 00982 break; 00983 } 00984 } 00985 00986 if(newindex) { 00987 for (x = 0; x < size; x++) { 00988 if(!pref->order[x]) { 00989 pref->order[x] = newindex; 00990 break; 00991 } 00992 } 00993 } 00994 00995 return x; 00996 }
|
|
Shift a codec preference list up or down 65 bytes so that it becomes an ASCII string.
Definition at line 874 of file frame.c. References ast_codec_pref::order. Referenced by check_access(), create_addr(), dump_prefs(), and socket_read(). 00875 { 00876 int x = 0, differential = (int) 'A', mem = 0; 00877 char *from = NULL, *to = NULL; 00878 00879 if(right) { 00880 from = pref->order; 00881 to = buf; 00882 mem = size; 00883 } else { 00884 to = pref->order; 00885 from = buf; 00886 mem = 32; 00887 } 00888 00889 memset(to, 0, mem); 00890 for (x = 0; x < 32 ; x++) { 00891 if(!from[x]) 00892 break; 00893 to[x] = right ? (from[x] + differential) : (from[x] - differential); 00894 } 00895 }
|
|
Codec located at a particular place in the preference index.
Definition at line 932 of file frame.c. References ast_format_list::bits, and ast_codec_pref::order. Referenced by _sip_show_peer(), add_sdp(), ast_codec_pref_string(), function_iaxpeer(), function_sippeer(), iax2_show_peer(), print_codec_to_cli(), sip_show_user(), and socket_read(). 00933 { 00934 int slot = 0; 00935 00936 00937 if((index >= 0) && (index < sizeof(pref->order))) { 00938 slot = pref->order[index]; 00939 } 00940 00941 return slot ? AST_FORMAT_LIST[slot-1].bits : 0; 00942 }
|
|
Initialize a codec preference to "no preference".
|
|
Remove a codec from a preference list.
Definition at line 945 of file frame.c. References ast_format_list::bits, and ast_codec_pref::order. Referenced by ast_codec_pref_append(), and ast_parse_allow_disallow(). 00946 { 00947 struct ast_codec_pref oldorder; 00948 int x=0, y=0; 00949 size_t size = 0; 00950 int slot = 0; 00951 00952 if(!pref->order[0]) 00953 return; 00954 00955 size = sizeof(AST_FORMAT_LIST) / sizeof(struct ast_format_list); 00956 00957 memcpy(&oldorder,pref,sizeof(struct ast_codec_pref)); 00958 memset(pref,0,sizeof(struct ast_codec_pref)); 00959 00960 for (x = 0; x < size; x++) { 00961 slot = oldorder.order[x]; 00962 if(! slot) 00963 break; 00964 if(AST_FORMAT_LIST[slot-1].bits != format) 00965 pref->order[y++] = slot; 00966 } 00967 00968 }
|
|
Dump codec preference list into a string.
Definition at line 897 of file frame.c. References ast_codec_pref_index(), and ast_getformatname(). Referenced by dump_prefs(), and socket_read(). 00898 { 00899 int x = 0, codec = 0; 00900 size_t total_len = 0, slen = 0; 00901 char *formatname = 0; 00902 00903 memset(buf,0,size); 00904 total_len = size; 00905 buf[0] = '('; 00906 total_len--; 00907 for(x = 0; x < 32 ; x++) { 00908 if(total_len <= 0) 00909 break; 00910 if(!(codec = ast_codec_pref_index(pref,x))) 00911 break; 00912 if((formatname = ast_getformatname(codec))) { 00913 slen = strlen(formatname); 00914 if(slen > total_len) 00915 break; 00916 strncat(buf,formatname,total_len); 00917 total_len -= slen; 00918 } 00919 if(total_len && x < 31 && ast_codec_pref_index(pref , x + 1)) { 00920 strncat(buf,"|",total_len); 00921 total_len--; 00922 } 00923 } 00924 if(total_len) { 00925 strncat(buf,")",total_len); 00926 total_len--; 00927 } 00928 00929 return size - total_len; 00930 }
|
|
Sends a hangup to an fd Send a hangup (NULL equivalent) on an fd.
|
|
Reads a frame from an fd Read a frame from a stream or packet fd, as written by fd_write.
|
|
Writes a frame to an fd Write a frame to an fd
|
|
Adjusts the volume of the audio samples contained in a frame.
Definition at line 1274 of file frame.c. References AST_FORMAT_SLINEAR, AST_FRAME_VOICE, ast_slinear_saturated_divide(), ast_slinear_saturated_multiply(), ast_frame::data, ast_frame::frametype, and ast_frame::subclass. Referenced by ast_channel_spy_read_frame(), and conf_run(). 01275 { 01276 int count; 01277 short *fdata = f->data; 01278 short adjust_value = abs(adjustment); 01279 01280 if ((f->frametype != AST_FRAME_VOICE) || (f->subclass != AST_FORMAT_SLINEAR)) 01281 return -1; 01282 01283 if (!adjustment) 01284 return 0; 01285 01286 for (count = 0; count < f->samples; count++) { 01287 if (adjustment > 0) { 01288 ast_slinear_saturated_multiply(&fdata[count], &adjust_value); 01289 } else if (adjustment < 0) { 01290 ast_slinear_saturated_divide(&fdata[count], &adjust_value); 01291 } 01292 } 01293 01294 return 0; 01295 }
|
|
Dump a frame for debugging purposes Definition at line 673 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, AST_FRAME_HTML, AST_FRAME_IAX, AST_FRAME_IMAGE, 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_strlen_zero(), ast_verbose(), COLOR_BLACK, COLOR_BRCYAN, COLOR_BRGREEN, COLOR_BRMAGENTA, COLOR_BRRED, COLOR_YELLOW, ast_frame::data, ast_frame::frametype, n, ast_frame::subclass, and term_color(). Referenced by ast_read(), and ast_write(). 00674 { 00675 char *n = "unknown"; 00676 char ftype[40] = "Unknown Frametype"; 00677 char cft[80]; 00678 char subclass[40] = "Unknown Subclass"; 00679 char csub[80]; 00680 char moreinfo[40] = ""; 00681 char cn[60]; 00682 char cp[40]; 00683 char cmn[40]; 00684 if (name) 00685 n = name; 00686 if (!f) { 00687 ast_verbose("%s [ %s (NULL) ] [%s]\n", 00688 term_color(cp, prefix, COLOR_BRMAGENTA, COLOR_BLACK, sizeof(cp)), 00689 term_color(cft, "HANGUP", COLOR_BRRED, COLOR_BLACK, sizeof(cft)), 00690 term_color(cn, n, COLOR_YELLOW, COLOR_BLACK, sizeof(cn))); 00691 return; 00692 } 00693 /* XXX We should probably print one each of voice and video when the format changes XXX */ 00694 if (f->frametype == AST_FRAME_VOICE) 00695 return; 00696 if (f->frametype == AST_FRAME_VIDEO) 00697 return; 00698 switch(f->frametype) { 00699 case AST_FRAME_DTMF: 00700 strcpy(ftype, "DTMF"); 00701 subclass[0] = f->subclass; 00702 subclass[1] = '\0'; 00703 break; 00704 case AST_FRAME_CONTROL: 00705 strcpy(ftype, "Control"); 00706 switch(f->subclass) { 00707 case AST_CONTROL_HANGUP: 00708 strcpy(subclass, "Hangup"); 00709 break; 00710 case AST_CONTROL_RING: 00711 strcpy(subclass, "Ring"); 00712 break; 00713 case AST_CONTROL_RINGING: 00714 strcpy(subclass, "Ringing"); 00715 break; 00716 case AST_CONTROL_ANSWER: 00717 strcpy(subclass, "Answer"); 00718 break; 00719 case AST_CONTROL_BUSY: 00720 strcpy(subclass, "Busy"); 00721 break; 00722 case AST_CONTROL_TAKEOFFHOOK: 00723 strcpy(subclass, "Take Off Hook"); 00724 break; 00725 case AST_CONTROL_OFFHOOK: 00726 strcpy(subclass, "Line Off Hook"); 00727 break; 00728 case AST_CONTROL_CONGESTION: 00729 strcpy(subclass, "Congestion"); 00730 break; 00731 case AST_CONTROL_FLASH: 00732 strcpy(subclass, "Flash"); 00733 break; 00734 case AST_CONTROL_WINK: 00735 strcpy(subclass, "Wink"); 00736 break; 00737 case AST_CONTROL_OPTION: 00738 strcpy(subclass, "Option"); 00739 break; 00740 case AST_CONTROL_RADIO_KEY: 00741 strcpy(subclass, "Key Radio"); 00742 break; 00743 case AST_CONTROL_RADIO_UNKEY: 00744 strcpy(subclass, "Unkey Radio"); 00745 break; 00746 case -1: 00747 strcpy(subclass, "Stop generators"); 00748 break; 00749 default: 00750 snprintf(subclass, sizeof(subclass), "Unknown control '%d'", f->subclass); 00751 } 00752 break; 00753 case AST_FRAME_NULL: 00754 strcpy(ftype, "Null Frame"); 00755 strcpy(subclass, "N/A"); 00756 break; 00757 case AST_FRAME_IAX: 00758 /* Should never happen */ 00759 strcpy(ftype, "IAX Specific"); 00760 snprintf(subclass, sizeof(subclass), "IAX Frametype %d", f->subclass); 00761 break; 00762 case AST_FRAME_TEXT: 00763 strcpy(ftype, "Text"); 00764 strcpy(subclass, "N/A"); 00765 ast_copy_string(moreinfo, f->data, sizeof(moreinfo)); 00766 break; 00767 case AST_FRAME_IMAGE: 00768 strcpy(ftype, "Image"); 00769 snprintf(subclass, sizeof(subclass), "Image format %s\n", ast_getformatname(f->subclass)); 00770 break; 00771 case AST_FRAME_HTML: 00772 strcpy(ftype, "HTML"); 00773 switch(f->subclass) { 00774 case AST_HTML_URL: 00775 strcpy(subclass, "URL"); 00776 ast_copy_string(moreinfo, f->data, sizeof(moreinfo)); 00777 break; 00778 case AST_HTML_DATA: 00779 strcpy(subclass, "Data"); 00780 break; 00781 case AST_HTML_BEGIN: 00782 strcpy(subclass, "Begin"); 00783 break; 00784 case AST_HTML_END: 00785 strcpy(subclass, "End"); 00786 break; 00787 case AST_HTML_LDCOMPLETE: 00788 strcpy(subclass, "Load Complete"); 00789 break; 00790 case AST_HTML_NOSUPPORT: 00791 strcpy(subclass, "No Support"); 00792 break; 00793 case AST_HTML_LINKURL: 00794 strcpy(subclass, "Link URL"); 00795 ast_copy_string(moreinfo, f->data, sizeof(moreinfo)); 00796 break; 00797 case AST_HTML_UNLINK: 00798 strcpy(subclass, "Unlink"); 00799 break; 00800 case AST_HTML_LINKREJECT: 00801 strcpy(subclass, "Link Reject"); 00802 break; 00803 default: 00804 snprintf(subclass, sizeof(subclass), "Unknown HTML frame '%d'\n", f->subclass); 00805 break; 00806 } 00807 break; 00808 default: 00809 snprintf(ftype, sizeof(ftype), "Unknown Frametype '%d'", f->frametype); 00810 } 00811 if (!ast_strlen_zero(moreinfo)) 00812 ast_verbose("%s [ TYPE: %s (%d) SUBCLASS: %s (%d) '%s' ] [%s]\n", 00813 term_color(cp, prefix, COLOR_BRMAGENTA, COLOR_BLACK, sizeof(cp)), 00814 term_color(cft, ftype, COLOR_BRRED, COLOR_BLACK, sizeof(cft)), 00815 f->frametype, 00816 term_color(csub, subclass, COLOR_BRCYAN, COLOR_BLACK, sizeof(csub)), 00817 f->subclass, 00818 term_color(cmn, moreinfo, COLOR_BRGREEN, COLOR_BLACK, sizeof(cmn)), 00819 term_color(cn, n, COLOR_YELLOW, COLOR_BLACK, sizeof(cn))); 00820 else 00821 ast_verbose("%s [ TYPE: %s (%d) SUBCLASS: %s (%d) ] [%s]\n", 00822 term_color(cp, prefix, COLOR_BRMAGENTA, COLOR_BLACK, sizeof(cp)), 00823 term_color(cft, ftype, COLOR_BRRED, COLOR_BLACK, sizeof(cft)), 00824 f->frametype, 00825 term_color(csub, subclass, COLOR_BRCYAN, COLOR_BLACK, sizeof(csub)), 00826 f->subclass, 00827 term_color(cn, n, COLOR_YELLOW, COLOR_BLACK, sizeof(cn))); 00828 00829 }
|
|
Sums two frames of audio samples.
Definition at line 1297 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(). 01298 { 01299 int count; 01300 short *data1, *data2; 01301 01302 if ((f1->frametype != AST_FRAME_VOICE) || (f1->subclass != AST_FORMAT_SLINEAR)) 01303 return -1; 01304 01305 if ((f2->frametype != AST_FRAME_VOICE) || (f2->subclass != AST_FORMAT_SLINEAR)) 01306 return -1; 01307 01308 if (f1->samples != f2->samples) 01309 return -1; 01310 01311 for (count = 0, data1 = f1->data, data2 = f2->data; 01312 count < f1->samples; 01313 count++, data1++, data2++) 01314 ast_slinear_saturated_add(data1, data2); 01315 01316 return 0; 01317 }
|
|
Copies a frame.
Definition at line 361 of file frame.c. References AST_MALLOCD_HDR, ast_frame::data, ast_frame::datalen, ast_frame::delivery, ast_frame::frametype, malloc, ast_frame::mallocd, ast_frame::next, ast_frame::offset, ast_frame::prev, ast_frame::samples, ast_frame::src, and ast_frame::subclass. Referenced by ast_channel_spy_read_frame(), ast_queue_frame(), ast_rtp_write(), ast_slinfactory_feed(), and queue_frame_to_spies(). 00362 { 00363 struct ast_frame *out; 00364 int len, srclen = 0; 00365 void *buf; 00366 /* Start with standard stuff */ 00367 len = sizeof(struct ast_frame) + AST_FRIENDLY_OFFSET + f->datalen; 00368 /* If we have a source, add space for it */ 00369 /* 00370 * XXX Watch out here - if we receive a src which is not terminated 00371 * properly, we can be easily attacked. Should limit the size we deal with. 00372 */ 00373 if (f->src) 00374 srclen = strlen(f->src); 00375 if (srclen > 0) 00376 len += srclen + 1; 00377 buf = malloc(len); 00378 if (!buf) 00379 return NULL; 00380 out = buf; 00381 /* Set us as having malloc'd header only, so it will eventually 00382 get freed. */ 00383 out->frametype = f->frametype; 00384 out->subclass = f->subclass; 00385 out->datalen = f->datalen; 00386 out->samples = f->samples; 00387 out->delivery = f->delivery; 00388 out->mallocd = AST_MALLOCD_HDR; 00389 out->offset = AST_FRIENDLY_OFFSET; 00390 out->data = buf + sizeof(struct ast_frame) + AST_FRIENDLY_OFFSET; 00391 if (srclen > 0) { 00392 out->src = out->data + f->datalen; 00393 /* Must have space since we allocated for it */ 00394 strcpy((char *)out->src, f->src); 00395 } else 00396 out->src = NULL; 00397 out->prev = NULL; 00398 out->next = NULL; 00399 memcpy(out->data, f->data, out->datalen); 00400 return out; 00401 }
|
|
|
Copies a frame.
Definition at line 304 of file frame.c. References ast_frame_header_new(), AST_FRIENDLY_OFFSET, ast_log(), AST_MALLOCD_DATA, AST_MALLOCD_HDR, AST_MALLOCD_SRC, ast_frame::data, ast_frame::datalen, ast_frame::frametype, free, LOG_WARNING, malloc, ast_frame::mallocd, ast_frame::offset, ast_frame::samples, ast_frame::src, strdup, and ast_frame::subclass. Referenced by jpeg_read_image(), and monitor_handle_owned(). 00305 { 00306 struct ast_frame *out; 00307 void *newdata; 00308 00309 if (!(fr->mallocd & AST_MALLOCD_HDR)) { 00310 /* Allocate a new header if needed */ 00311 out = ast_frame_header_new(); 00312 if (!out) { 00313 ast_log(LOG_WARNING, "Out of memory\n"); 00314 return NULL; 00315 } 00316 out->frametype = fr->frametype; 00317 out->subclass = fr->subclass; 00318 out->datalen = fr->datalen; 00319 out->samples = fr->samples; 00320 out->offset = fr->offset; 00321 out->src = NULL; 00322 out->data = fr->data; 00323 } else 00324 out = fr; 00325 00326 if (!(fr->mallocd & AST_MALLOCD_SRC)) { 00327 if (fr->src) { 00328 out->src = strdup(fr->src); 00329 if (!out->src) { 00330 if (out != fr) 00331 free(out); 00332 ast_log(LOG_WARNING, "Out of memory\n"); 00333 return NULL; 00334 } 00335 } 00336 } else 00337 out->src = fr->src; 00338 00339 if (!(fr->mallocd & AST_MALLOCD_DATA)) { 00340 newdata = malloc(fr->datalen + AST_FRIENDLY_OFFSET); 00341 if (!newdata) { 00342 if (out->src != fr->src) 00343 free((void *) out->src); 00344 if (out != fr) 00345 free(out); 00346 ast_log(LOG_WARNING, "Out of memory\n"); 00347 return NULL; 00348 } 00349 newdata += AST_FRIENDLY_OFFSET; 00350 out->offset = AST_FRIENDLY_OFFSET; 00351 out->datalen = fr->datalen; 00352 memcpy(newdata, fr->data, fr->datalen); 00353 out->data = newdata; 00354 } 00355 00356 out->mallocd = AST_MALLOCD_HDR | AST_MALLOCD_SRC | AST_MALLOCD_DATA; 00357 00358 return out; 00359 }
|
|
Definition at line 503 of file frame.c. 00504 { 00505 *size = (sizeof(AST_FORMAT_LIST) / sizeof(struct ast_format_list)); 00506 return AST_FORMAT_LIST; 00507 }
|
|
Definition at line 498 of file frame.c. 00499 { 00500 return &AST_FORMAT_LIST[index]; 00501 }
|
|
Gets a format from a name.
Definition at line 568 of file frame.c. References ast_expand_codec_alias(), and format. Referenced by ast_parse_allow_disallow(), iax_template_parse(), load_moh_classes(), reload_config(), try_suggested_sip_codec(), and update_common_options(). 00569 { 00570 int x = 0, all = 0, format = 0; 00571 00572 all = strcasecmp(name, "all") ? 0 : 1; 00573 for (x = 0 ; x < sizeof(AST_FORMAT_LIST) / sizeof(struct ast_format_list) ; x++) { 00574 if(AST_FORMAT_LIST[x].visible && (all || 00575 !strcasecmp(AST_FORMAT_LIST[x].name,name) || 00576 !strcasecmp(AST_FORMAT_LIST[x].name,ast_expand_codec_alias(name)))) { 00577 format |= AST_FORMAT_LIST[x].bits; 00578 if(!all) 00579 break; 00580 } 00581 } 00582 00583 return format; 00584 }
|
|
|
Get the names of a set of formats.
Definition at line 522 of file frame.c. References ast_format_list::bits, name, and ast_format_list::visible. Referenced by _sip_show_peer(), function_iaxpeer(), function_sippeer(), iax2_bridge(), iax2_show_peer(), and process_sdp(). 00522 { 00523 00524 int x = 0; 00525 unsigned len; 00526 char *end = buf; 00527 char *start = buf; 00528 if (!size) return buf; 00529 snprintf(end, size, "0x%x (", format); 00530 len = strlen(end); 00531 end += len; 00532 size -= len; 00533 start = end; 00534 for (x = 0 ; x < sizeof(AST_FORMAT_LIST) / sizeof(struct ast_format_list) ; x++) { 00535 if (AST_FORMAT_LIST[x].visible && (AST_FORMAT_LIST[x].bits & format)) { 00536 snprintf(end, size,"%s|",AST_FORMAT_LIST[x].name); 00537 len = strlen(end); 00538 end += len; 00539 size -= len; 00540 } 00541 } 00542 if (start == end) 00543 snprintf(start, size, "nothing)"); 00544 else if (size > 1) 00545 *(end -1) = ')'; 00546 return buf; 00547 }
|
|
Parse an "allow" or "deny" line and update the mask and pref if provided.
Definition at line 1022 of file frame.c. References ast_codec_pref_append(), ast_codec_pref_remove(), ast_getformatbyname(), ast_log(), ast_strdupa, format, LOG_WARNING, parse(), and strsep(). Referenced by build_peer(), build_user(), reload_config(), and set_config(). 01023 { 01024 char *parse; 01025 char *this; 01026 int format; 01027 01028 parse = ast_strdupa(list); 01029 while ((this = strsep(&parse, ","))) { 01030 if (!(format = ast_getformatbyname(this))) { 01031 ast_log(LOG_WARNING, "Cannot %s unknown format '%s'\n", allowing ? "allow" : "disallow", this); 01032 continue; 01033 } 01034 01035 if (mask) { 01036 if (allowing) 01037 *mask |= format; 01038 else 01039 *mask &= ~format; 01040 } 01041 01042 if (pref) { 01043 if (strcasecmp(this, "all")) { 01044 if (allowing) 01045 ast_codec_pref_append(pref, format); 01046 else 01047 ast_codec_pref_remove(pref, format); 01048 } else if (!allowing) { 01049 memset(pref, 0, sizeof(*pref)); 01050 } 01051 } 01052 } 01053 }
|
|
Definition at line 243 of file frame.c. References free. Referenced by ast_rtp_destroy(), and ast_rtp_write(). 00244 { 00245 free(s); 00246 }
|
|
Definition at line 127 of file frame.c. References ast_smoother::flags. 00128 { 00129 return s->flags; 00130 }
|
|
Definition at line 116 of file frame.c. References ast_smoother_reset(), malloc, and s. Referenced by ast_rtp_write(). 00117 { 00118 struct ast_smoother *s; 00119 if (size < 1) 00120 return NULL; 00121 s = malloc(sizeof(struct ast_smoother)); 00122 if (s) 00123 ast_smoother_reset(s, size); 00124 return s; 00125 }
|
|
Definition at line 194 of file frame.c. References AST_FRAME_VOICE, AST_FRIENDLY_OFFSET, ast_log(), AST_SMOOTHER_FLAG_G729, ast_tvadd(), ast_smoother::data, ast_frame::data, ast_frame::datalen, ast_smoother::delivery, ast_frame::delivery, ast_smoother::f, ast_smoother::flags, ast_smoother::format, ast_smoother::framedata, ast_frame::frametype, ast_smoother::len, LOG_WARNING, ast_frame::offset, ast_smoother::opt, ast_frame::samples, ast_smoother::samplesperbyte, ast_smoother::size, and ast_frame::subclass. Referenced by ast_rtp_write(). 00195 { 00196 struct ast_frame *opt; 00197 int len; 00198 /* IF we have an optimization frame, send it */ 00199 if (s->opt) { 00200 if (s->opt->offset < AST_FRIENDLY_OFFSET) 00201 ast_log(LOG_WARNING, "Returning a frame of inappropriate offset (%d).", 00202 s->opt->offset); 00203 opt = s->opt; 00204 s->opt = NULL; 00205 return opt; 00206 } 00207 00208 /* Make sure we have enough data */ 00209 if (s->len < s->size) { 00210 /* Or, if this is a G.729 frame with VAD on it, send it immediately anyway */ 00211 if (!((s->flags & AST_SMOOTHER_FLAG_G729) && (s->size % 10))) 00212 return NULL; 00213 } 00214 len = s->size; 00215 if (len > s->len) 00216 len = s->len; 00217 /* Make frame */ 00218 s->f.frametype = AST_FRAME_VOICE; 00219 s->f.subclass = s->format; 00220 s->f.data = s->framedata + AST_FRIENDLY_OFFSET; 00221 s->f.offset = AST_FRIENDLY_OFFSET; 00222 s->f.datalen = len; 00223 /* Samples will be improper given VAD, but with VAD the concept really doesn't even exist */ 00224 s->f.samples = len * s->samplesperbyte; /* XXX rounding */ 00225 s->f.delivery = s->delivery; 00226 /* Fill Data */ 00227 memcpy(s->f.data, s->data, len); 00228 s->len -= len; 00229 /* Move remaining data to the front if applicable */ 00230 if (s->len) { 00231 /* In principle this should all be fine because if we are sending 00232 G.729 VAD, the next timestamp will take over anyawy */ 00233 memmove(s->data, s->data + len, s->len); 00234 if (!ast_tvzero(s->delivery)) { 00235 /* If we have delivery time, increment it, otherwise, leave it at 0 */ 00236 s->delivery = ast_tvadd(s->delivery, ast_samp2tv(s->f.samples, 8000)); 00237 } 00238 } 00239 /* Return frame */ 00240 return &s->f; 00241 }
|
|
Definition at line 110 of file frame.c. References ast_smoother::size. Referenced by ast_smoother_new(). 00111 { 00112 memset(s, 0, sizeof(struct ast_smoother)); 00113 s->size = size; 00114 }
|
|
Definition at line 132 of file frame.c. References ast_smoother::flags. Referenced by ast_rtp_write(). 00133 { 00134 s->flags = flags; 00135 }
|
|
Definition at line 487 of file frame.c. Referenced by __ast_smoother_feed(), iax_frame_wrap(), and phone_write_buf(). 00488 { 00489 int i; 00490 unsigned short *dst_s = dst; 00491 const unsigned short *src_s = src; 00492 00493 for (i=0; i<samples; i++) 00494 dst_s[i] = (src_s[i]<<8) | (src_s[i]>>8); 00495 }
|