mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-07-24 05:02:10 +00:00
FS-9576 #resolve [Add Realtime Text]
This commit is contained in:
@@ -189,7 +189,13 @@ struct switch_core_session {
|
||||
uint32_t decoder_errors;
|
||||
switch_core_video_thread_callback_func_t video_read_callback;
|
||||
void *video_read_user_data;
|
||||
switch_core_video_thread_callback_func_t text_read_callback;
|
||||
void *text_read_user_data;
|
||||
switch_io_routines_t *io_override;
|
||||
switch_slin_data_t *sdata;
|
||||
|
||||
switch_buffer_t *text_buffer;
|
||||
switch_mutex_t *text_mutex;
|
||||
};
|
||||
|
||||
struct switch_media_bug {
|
||||
@@ -228,6 +234,11 @@ struct switch_media_bug {
|
||||
switch_image_t *spy_img[2];
|
||||
switch_vid_spy_fmt_t spy_fmt;
|
||||
switch_thread_t *video_bug_thread;
|
||||
|
||||
switch_buffer_t *text_buffer;
|
||||
char *text_framedata;
|
||||
uint32_t text_framesize;
|
||||
|
||||
struct switch_media_bug *next;
|
||||
};
|
||||
|
||||
|
||||
@@ -162,6 +162,8 @@ SWITCH_DECLARE(void) switch_buffer_destroy(switch_buffer_t **buffer);
|
||||
SWITCH_DECLARE(switch_size_t) switch_buffer_zwrite(_In_ switch_buffer_t *buffer, _In_bytecount_(datalen)
|
||||
const void *data, _In_ switch_size_t datalen);
|
||||
|
||||
SWITCH_DECLARE(void *) switch_buffer_get_head_pointer(switch_buffer_t *buffer);
|
||||
|
||||
/** @} */
|
||||
|
||||
SWITCH_END_EXTERN_C
|
||||
|
||||
@@ -317,6 +317,11 @@ SWITCH_DECLARE(switch_status_t) switch_channel_get_variables(switch_channel_t *c
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_channel_pass_callee_id(switch_channel_t *channel, switch_channel_t *other_channel);
|
||||
|
||||
|
||||
static inline int switch_channel_var_true(switch_channel_t *channel, const char *variable) {
|
||||
return switch_true(switch_channel_get_variable_dup(channel, variable, SWITCH_FALSE, -1));
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Start iterating over the entries in the channel variable list.
|
||||
* \param channel the channel to iterate the variables for
|
||||
|
||||
@@ -351,6 +351,8 @@ SWITCH_DECLARE(void) switch_core_media_bug_set_read_demux_frame(_In_ switch_medi
|
||||
*/
|
||||
SWITCH_DECLARE(switch_core_session_t *) switch_core_media_bug_get_session(_In_ switch_media_bug_t *bug);
|
||||
|
||||
SWITCH_DECLARE(const char *) switch_core_media_bug_get_text(switch_media_bug_t *bug);
|
||||
|
||||
/*!
|
||||
\brief Test for the existance of a flag on an media bug
|
||||
\param bug the object to test
|
||||
@@ -1163,6 +1165,8 @@ SWITCH_DECLARE(void *) switch_core_session_get_stream(_In_ switch_core_session_t
|
||||
*/
|
||||
SWITCH_DECLARE(int) switch_core_session_get_stream_count(_In_ switch_core_session_t *session);
|
||||
|
||||
SWITCH_DECLARE(const char *) switch_core_session_get_text_buffer(switch_core_session_t *session);
|
||||
|
||||
/*!
|
||||
\brief Launch a thread designed to exist within the scope of a given session
|
||||
\param session a session to allocate the thread from
|
||||
@@ -2741,6 +2745,8 @@ SWITCH_DECLARE(int) switch_stream_system(const char *cmd, switch_stream_handle_t
|
||||
SWITCH_DECLARE(switch_call_direction_t) switch_ice_direction(switch_core_session_t *session);
|
||||
SWITCH_DECLARE(void) switch_core_session_debug_pool(switch_stream_handle_t *stream);
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_override_io_routines(switch_core_session_t *session, switch_io_routines_t *ior);
|
||||
|
||||
SWITCH_DECLARE(const char *)switch_version_major(void);
|
||||
SWITCH_DECLARE(const char *)switch_version_minor(void);
|
||||
SWITCH_DECLARE(const char *)switch_version_micro(void);
|
||||
@@ -2752,6 +2758,9 @@ SWITCH_DECLARE(const char *)switch_version_full_human(void);
|
||||
|
||||
SWITCH_DECLARE(void) switch_core_autobind_cpu(void);
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_start_text_thread(switch_core_session_t *session);
|
||||
|
||||
|
||||
SWITCH_END_EXTERN_C
|
||||
#endif
|
||||
/* For Emacs:
|
||||
|
||||
@@ -41,6 +41,8 @@ typedef struct switch_io_event_hook_read_frame switch_io_event_hook_read_frame_t
|
||||
typedef struct switch_io_event_hook_video_read_frame switch_io_event_hook_video_read_frame_t;
|
||||
typedef struct switch_io_event_hook_write_frame switch_io_event_hook_write_frame_t;
|
||||
typedef struct switch_io_event_hook_video_write_frame switch_io_event_hook_video_write_frame_t;
|
||||
typedef struct switch_io_event_hook_text_read_frame switch_io_event_hook_text_read_frame_t;
|
||||
typedef struct switch_io_event_hook_text_write_frame switch_io_event_hook_text_write_frame_t;
|
||||
typedef struct switch_io_event_hook_kill_channel switch_io_event_hook_kill_channel_t;
|
||||
typedef struct switch_io_event_hook_send_dtmf switch_io_event_hook_send_dtmf_t;
|
||||
typedef struct switch_io_event_hook_recv_dtmf switch_io_event_hook_recv_dtmf_t;
|
||||
@@ -54,6 +56,8 @@ typedef switch_status_t (*switch_read_frame_hook_t) (switch_core_session_t *, sw
|
||||
typedef switch_status_t (*switch_video_read_frame_hook_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_video_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_text_read_frame_hook_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_text_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_kill_channel_hook_t) (switch_core_session_t *, int);
|
||||
typedef switch_status_t (*switch_send_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *, switch_dtmf_direction_t direction);
|
||||
typedef switch_status_t (*switch_recv_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *, switch_dtmf_direction_t direction);
|
||||
@@ -108,6 +112,20 @@ struct switch_io_event_hook_video_write_frame {
|
||||
struct switch_io_event_hook_video_write_frame *next;
|
||||
};
|
||||
|
||||
/*! \brief Node in which to store custom read frame channel callback hooks */
|
||||
struct switch_io_event_hook_text_read_frame {
|
||||
/*! the read frame channel callback hook */
|
||||
switch_read_frame_hook_t text_read_frame;
|
||||
struct switch_io_event_hook_text_read_frame *next;
|
||||
};
|
||||
|
||||
/*! \brief Node in which to store custom video_write_frame channel callback hooks */
|
||||
struct switch_io_event_hook_text_write_frame {
|
||||
/*! the video_write_frame channel callback hook */
|
||||
switch_video_write_frame_hook_t text_write_frame;
|
||||
struct switch_io_event_hook_text_write_frame *next;
|
||||
};
|
||||
|
||||
/*! \brief Node in which to store custom kill channel callback hooks */
|
||||
struct switch_io_event_hook_kill_channel {
|
||||
/*! the kill channel callback hook */
|
||||
@@ -158,8 +176,12 @@ struct switch_io_event_hooks {
|
||||
switch_io_event_hook_video_read_frame_t *video_read_frame;
|
||||
/*! a list of write frame hooks */
|
||||
switch_io_event_hook_write_frame_t *write_frame;
|
||||
/*! a list of video write frame hooks */
|
||||
/*! a list of text write frame hooks */
|
||||
switch_io_event_hook_video_write_frame_t *video_write_frame;
|
||||
/*! a list of text write frame hooks */
|
||||
switch_io_event_hook_text_write_frame_t *text_write_frame;
|
||||
/*! a list of text read frame hooks */
|
||||
switch_io_event_hook_text_read_frame_t *text_read_frame;
|
||||
/*! a list of kill channel hooks */
|
||||
switch_io_event_hook_kill_channel_t *kill_channel;
|
||||
/*! a list of send dtmf hooks */
|
||||
@@ -225,6 +247,8 @@ NEW_HOOK_DECL_ADD_P(read_frame);
|
||||
NEW_HOOK_DECL_ADD_P(write_frame);
|
||||
NEW_HOOK_DECL_ADD_P(video_read_frame);
|
||||
NEW_HOOK_DECL_ADD_P(video_write_frame);
|
||||
NEW_HOOK_DECL_ADD_P(text_read_frame);
|
||||
NEW_HOOK_DECL_ADD_P(text_write_frame);
|
||||
NEW_HOOK_DECL_ADD_P(kill_channel);
|
||||
NEW_HOOK_DECL_ADD_P(send_dtmf);
|
||||
NEW_HOOK_DECL_ADD_P(recv_dtmf);
|
||||
@@ -238,6 +262,8 @@ NEW_HOOK_DECL_REM_P(read_frame);
|
||||
NEW_HOOK_DECL_REM_P(write_frame);
|
||||
NEW_HOOK_DECL_REM_P(video_read_frame);
|
||||
NEW_HOOK_DECL_REM_P(video_write_frame);
|
||||
NEW_HOOK_DECL_REM_P(text_read_frame);
|
||||
NEW_HOOK_DECL_REM_P(text_write_frame);
|
||||
NEW_HOOK_DECL_REM_P(kill_channel);
|
||||
NEW_HOOK_DECL_REM_P(send_dtmf);
|
||||
NEW_HOOK_DECL_REM_P(recv_dtmf);
|
||||
|
||||
@@ -122,9 +122,11 @@ typedef struct switch_core_media_params_s {
|
||||
|
||||
switch_rtp_bug_flag_t manual_rtp_bugs;
|
||||
switch_rtp_bug_flag_t manual_video_rtp_bugs;
|
||||
switch_rtp_bug_flag_t manual_text_rtp_bugs;
|
||||
|
||||
char *rtcp_audio_interval_msec;
|
||||
char *rtcp_video_interval_msec;
|
||||
char *rtcp_text_interval_msec;
|
||||
|
||||
|
||||
char *extrtpip;
|
||||
@@ -331,10 +333,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_codec_control(switch_core_sess
|
||||
|
||||
|
||||
SWITCH_DECLARE(switch_timer_t *) switch_core_media_get_timer(switch_core_session_t *session, switch_media_type_t mtype);
|
||||
SWITCH_DECLARE(void) switch_core_media_start_video_function(switch_core_session_t *session, switch_video_function_t video_function, void *user_data);
|
||||
SWITCH_DECLARE(void) switch_core_media_end_video_function(switch_core_session_t *session);
|
||||
SWITCH_DECLARE(void) switch_core_media_start_engine_function(switch_core_session_t *session, switch_media_type_t type, switch_engine_function_t engine_function, void *user_data);
|
||||
SWITCH_DECLARE(void) switch_core_media_end_engine_function(switch_core_session_t *session, switch_media_type_t type);
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_start_video_thread(switch_core_session_t *session);
|
||||
SWITCH_DECLARE(int) switch_core_media_check_video_function(switch_core_session_t *session);
|
||||
SWITCH_DECLARE(int) switch_core_media_check_engine_function(switch_core_session_t *session, switch_media_type_t type);
|
||||
SWITCH_DECLARE(void) switch_core_session_video_reinit(switch_core_session_t *session);
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_media_read_lock_unlock(switch_core_session_t *session, switch_media_type_t type, switch_bool_t lock);
|
||||
|
||||
@@ -353,7 +355,23 @@ SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_media_set_outgoing_bitrate(switch_core_session_t *session, switch_media_type_t type, uint32_t bitrate);
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_media_reset_jb(switch_core_session_t *session, switch_media_type_t type);
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_wait_for_video_input_params(switch_core_session_t *session, uint32_t timeout_ms);
|
||||
|
||||
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_set_text_read_callback(switch_core_session_t *session,
|
||||
switch_core_text_thread_callback_func_t func, void *user_data);
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_text_read_callback(switch_core_session_t *session, switch_frame_t *frame);
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_read_text_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags,
|
||||
int stream_id);
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_write_text_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags,
|
||||
int stream_id);
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_rtp_text_factory_create(switch_rtp_text_factory_t **tfP, switch_memory_pool_t *pool);
|
||||
SWITCH_DECLARE(switch_status_t) switch_rtp_text_factory_destroy(switch_rtp_text_factory_t **tfP);
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_print(switch_core_session_t *session, const char *data);
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_session_printf(switch_core_session_t *session, const char *fmt, ...);
|
||||
|
||||
SWITCH_END_EXTERN_C
|
||||
#endif
|
||||
/* For Emacs:
|
||||
|
||||
@@ -1020,6 +1020,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_stop_video_write_overlay_session(swit
|
||||
SWITCH_DECLARE(switch_status_t) switch_ivr_video_write_overlay_session(switch_core_session_t *session, const char *img_path,
|
||||
switch_img_position_t pos, uint8_t alpha);
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_ivr_capture_text(switch_core_session_t *session, switch_bool_t on);
|
||||
|
||||
/** @} */
|
||||
|
||||
|
||||
@@ -39,7 +39,8 @@ typedef enum {
|
||||
|
||||
typedef enum {
|
||||
SJB_VIDEO = 0,
|
||||
SJB_AUDIO
|
||||
SJB_AUDIO,
|
||||
SJB_TEXT
|
||||
} switch_jb_type_t;
|
||||
|
||||
|
||||
|
||||
@@ -119,6 +119,8 @@ typedef switch_status_t (*switch_io_state_change_t) (switch_core_session_t *);
|
||||
typedef switch_status_t (*switch_io_state_run_t) (switch_core_session_t *);
|
||||
typedef switch_status_t (*switch_io_read_video_frame_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_io_write_video_frame_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_io_read_text_frame_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
|
||||
typedef switch_status_t (*switch_io_write_text_frame_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
|
||||
typedef switch_jb_t *(*switch_io_get_jb_t) (switch_core_session_t *, switch_media_type_t);
|
||||
|
||||
typedef enum {
|
||||
@@ -132,6 +134,8 @@ typedef enum {
|
||||
SWITCH_IO_STATE_CHANGE,
|
||||
SWITCH_IO_READ_VIDEO_FRAME,
|
||||
SWITCH_IO_WRITE_VIDEO_FRAME,
|
||||
SWITCH_IO_READ_TEXT_FRAME,
|
||||
SWITCH_IO_WRITE_TEXT_FRAME,
|
||||
SWITCH_IO_GET_JB,
|
||||
} switch_io_routine_name_t;
|
||||
|
||||
@@ -157,6 +161,10 @@ struct switch_io_routines {
|
||||
switch_io_read_video_frame_t read_video_frame;
|
||||
/*! write a video frame to a session */
|
||||
switch_io_write_video_frame_t write_video_frame;
|
||||
/*! read a video frame from a session */
|
||||
switch_io_read_text_frame_t read_text_frame;
|
||||
/*! write a video frame to a session */
|
||||
switch_io_write_text_frame_t write_text_frame;
|
||||
/*! change a sessions channel run state */
|
||||
switch_io_state_run_t state_run;
|
||||
/*! get sessions jitterbuffer */
|
||||
|
||||
@@ -213,6 +213,8 @@ SWITCH_BEGIN_EXTERN_C
|
||||
#define SWITCH_REMOTE_VIDEO_PORT_VARIABLE "remote_video_port"
|
||||
#define SWITCH_LOCAL_VIDEO_IP_VARIABLE "local_video_ip"
|
||||
#define SWITCH_LOCAL_VIDEO_PORT_VARIABLE "local_video_port"
|
||||
#define SWITCH_LOCAL_TEXT_IP_VARIABLE "local_text_ip"
|
||||
#define SWITCH_LOCAL_TEXT_PORT_VARIABLE "local_text_port"
|
||||
#define SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE "hangup_after_bridge"
|
||||
#define SWITCH_PARK_AFTER_BRIDGE_VARIABLE "park_after_bridge"
|
||||
#define SWITCH_PARK_AFTER_EARLY_BRIDGE_VARIABLE "park_after_early_bridge"
|
||||
@@ -234,6 +236,7 @@ SWITCH_BEGIN_EXTERN_C
|
||||
#define SWITCH_RTCP_AUDIO_INTERVAL_MSEC "5000"
|
||||
#define SWITCH_RTCP_VIDEO_INTERVAL_MSEC "2000"
|
||||
|
||||
#define TEXT_UNICODE_LINEFEED {0xe2, 0x80, 0xa8}
|
||||
#define MAX_FMTP_LEN 256
|
||||
|
||||
/* Jitter */
|
||||
@@ -496,7 +499,8 @@ typedef enum {
|
||||
SWITCH_ABC_TYPE_READ_VIDEO_PING,
|
||||
SWITCH_ABC_TYPE_WRITE_VIDEO_PING,
|
||||
SWITCH_ABC_TYPE_STREAM_VIDEO_PING,
|
||||
SWITCH_ABC_TYPE_VIDEO_PATCH
|
||||
SWITCH_ABC_TYPE_VIDEO_PATCH,
|
||||
SWITCH_ABC_TYPE_READ_TEXT
|
||||
} switch_abc_type_t;
|
||||
|
||||
typedef struct {
|
||||
@@ -769,6 +773,7 @@ typedef enum {
|
||||
SWITCH_RTP_FLAG_TMMBR,
|
||||
SWITCH_RTP_FLAG_GEN_TS_DELTA,
|
||||
SWITCH_RTP_FLAG_DETECT_SSRC,
|
||||
SWITCH_RTP_FLAG_TEXT,
|
||||
SWITCH_RTP_FLAG_INVALID
|
||||
} switch_rtp_flag_t;
|
||||
|
||||
@@ -1369,6 +1374,8 @@ typedef enum {
|
||||
CC_JITTERBUFFER,
|
||||
CC_FS_RTP,
|
||||
CC_QUEUEABLE_DTMF_DELAY,
|
||||
CC_IO_OVERRIDE,
|
||||
CC_RTP_RTT,
|
||||
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
|
||||
CC_FLAG_MAX
|
||||
} switch_channel_cap_t;
|
||||
@@ -1514,6 +1521,13 @@ typedef enum {
|
||||
CF_3P_NOMEDIA_REQUESTED_BLEG,
|
||||
CF_IMAGE_SDP,
|
||||
CF_VIDEO_SDP_RECVD,
|
||||
CF_TEXT_SDP_RECVD,
|
||||
CF_TEXT,
|
||||
CF_TEXT_POSSIBLE,
|
||||
CF_TEXT_PASSIVE,
|
||||
CF_TEXT_ECHO,
|
||||
CF_TEXT_ACTIVE,
|
||||
CF_TEXT_IDLE,
|
||||
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
|
||||
/* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */
|
||||
CF_FLAG_MAX
|
||||
@@ -1570,7 +1584,8 @@ typedef enum {
|
||||
SFF_PICTURE_RESET = (1 << 14),
|
||||
SFF_SAME_IMAGE = (1 << 15),
|
||||
SFF_USE_VIDEO_TIMESTAMP = (1 << 16),
|
||||
SFF_ENCODED = (1 << 17)
|
||||
SFF_ENCODED = (1 << 17),
|
||||
SFF_TEXT_LINE_BREAK = (1 << 18)
|
||||
} switch_frame_flag_enum_t;
|
||||
typedef uint32_t switch_frame_flag_t;
|
||||
|
||||
@@ -1714,9 +1729,10 @@ typedef enum {
|
||||
|
||||
typedef enum {
|
||||
SWITCH_MEDIA_TYPE_AUDIO,
|
||||
SWITCH_MEDIA_TYPE_VIDEO
|
||||
SWITCH_MEDIA_TYPE_VIDEO,
|
||||
SWITCH_MEDIA_TYPE_TEXT
|
||||
} switch_media_type_t;
|
||||
#define SWITCH_MEDIA_TYPE_TOTAL 2
|
||||
#define SWITCH_MEDIA_TYPE_TOTAL 3
|
||||
|
||||
|
||||
/*!
|
||||
@@ -1775,7 +1791,8 @@ typedef enum {
|
||||
SMBF_VIDEO_PATCH = (1 << 21),
|
||||
SMBF_SPY_VIDEO_STREAM = (1 << 22),
|
||||
SMBF_SPY_VIDEO_STREAM_BLEG = (1 << 23),
|
||||
SMBF_READ_VIDEO_PATCH = (1 << 24)
|
||||
SMBF_READ_VIDEO_PATCH = (1 << 24),
|
||||
SMBF_READ_TEXT_STREAM = (1 << 25)
|
||||
} switch_media_bug_flag_enum_t;
|
||||
typedef uint32_t switch_media_bug_flag_t;
|
||||
|
||||
@@ -2021,6 +2038,7 @@ typedef enum {
|
||||
SWITCH_EVENT_CALL_SETUP_RESULT,
|
||||
SWITCH_EVENT_CALL_DETAIL,
|
||||
SWITCH_EVENT_DEVICE_STATE,
|
||||
SWITCH_EVENT_REAL_TIME_TEXT,
|
||||
SWITCH_EVENT_ALL
|
||||
} switch_event_types_t;
|
||||
|
||||
@@ -2236,13 +2254,15 @@ typedef struct switch_console_callback_match switch_console_callback_match_t;
|
||||
typedef void (*switch_media_bug_exec_cb_t)(switch_media_bug_t *bug, void *user_data);
|
||||
|
||||
typedef switch_status_t (*switch_core_video_thread_callback_func_t) (switch_core_session_t *session, switch_frame_t *frame, void *user_data);
|
||||
typedef switch_status_t (*switch_core_text_thread_callback_func_t) (switch_core_session_t *session, switch_frame_t *frame, void *user_data);
|
||||
typedef void (*switch_cap_callback_t) (const char *var, const char *val, void *user_data);
|
||||
typedef switch_status_t (*switch_console_complete_callback_t) (const char *, const char *, switch_console_callback_match_t **matches);
|
||||
typedef switch_bool_t (*switch_media_bug_callback_t) (switch_media_bug_t *, void *, switch_abc_type_t);
|
||||
typedef switch_bool_t (*switch_tone_detect_callback_t) (switch_core_session_t *, const char *, const char *);
|
||||
typedef struct switch_xml_binding switch_xml_binding_t;
|
||||
|
||||
typedef void (*switch_video_function_t) (switch_core_session_t *session, void *user_data);
|
||||
typedef void (*switch_engine_function_t) (switch_core_session_t *session, void *user_data);
|
||||
|
||||
|
||||
typedef switch_status_t (*switch_core_codec_encode_func_t) (switch_codec_t *codec,
|
||||
switch_codec_t *other_codec,
|
||||
@@ -2609,6 +2629,10 @@ typedef enum {
|
||||
SCFC_PAUSE_READ
|
||||
} switch_file_command_t;
|
||||
|
||||
|
||||
struct switch_rtp_text_factory_s;
|
||||
typedef struct switch_rtp_text_factory_s switch_rtp_text_factory_t;
|
||||
|
||||
SWITCH_END_EXTERN_C
|
||||
#endif
|
||||
/* For Emacs:
|
||||
|
||||
@@ -373,6 +373,33 @@ SWITCH_DECLARE(switch_status_t) switch_b64_encode(unsigned char *in, switch_size
|
||||
SWITCH_DECLARE(switch_size_t) switch_b64_decode(char *in, char *out, switch_size_t olen);
|
||||
SWITCH_DECLARE(char *) switch_amp_encode(char *s, char *buf, switch_size_t len);
|
||||
|
||||
|
||||
|
||||
static inline char *switch_print_bits(const unsigned char *byte, char *buf, switch_size_t buflen)
|
||||
{
|
||||
|
||||
int i, j = 0, k = 0, l = 0;
|
||||
|
||||
while(k < buflen) {
|
||||
l = 0;
|
||||
for (i = 7; i >= 0; i--) {
|
||||
buf[j++] = (*byte & (1 << i)) ? '1' : '0';
|
||||
if (++l % 4 == 0) {
|
||||
buf[j++] = ' ';
|
||||
}
|
||||
}
|
||||
k++;
|
||||
byte++;
|
||||
}
|
||||
|
||||
if (buf[j-1] == ' ') j--;
|
||||
buf[j++] = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static inline switch_bool_t switch_is_digit_string(const char *s)
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user