diff options
Diffstat (limited to 'include/baresip.h')
-rw-r--r-- | include/baresip.h | 85 |
1 files changed, 69 insertions, 16 deletions
diff --git a/include/baresip.h b/include/baresip.h index 746a95e..57369ef 100644 --- a/include/baresip.h +++ b/include/baresip.h @@ -13,7 +13,7 @@ extern "C" { /** Defines the Baresip version string */ -#define BARESIP_VERSION "0.5.7" +#define BARESIP_VERSION "0.5.9" #ifndef NET_MAX_NS @@ -21,6 +21,12 @@ extern "C" { #endif +/* + * Clock-rate for video timestamp + */ +#define VIDEO_TIMEBASE 1000000U + + /* forward declarations */ struct sa; struct sdp_media; @@ -113,6 +119,7 @@ void call_set_handlers(struct call *call, call_event_h *eh, uint16_t call_scode(const struct call *call); uint32_t call_duration(const struct call *call); uint32_t call_setup_duration(const struct call *call); +const char *call_id(const struct call *call); const char *call_peeruri(const struct call *call); const char *call_peername(const struct call *call); const char *call_localuri(const struct call *call); @@ -205,6 +212,8 @@ struct config_audio { bool level; /**< Enable audio level indication */ int src_fmt; /**< Audio source sample format */ int play_fmt; /**< Audio playback sample format */ + int enc_fmt; /**< Audio encoder sample format */ + int dec_fmt; /**< Audio decoder sample format */ }; #ifdef USE_VIDEO @@ -216,8 +225,9 @@ struct config_video { char disp_dev[128]; /**< Video display device */ unsigned width, height; /**< Video resolution */ uint32_t bitrate; /**< Encoder bitrate in [bit/s] */ - uint32_t fps; /**< Video framerate */ + double fps; /**< Video framerate */ bool fullscreen; /**< Enable fullscreen display */ + int enc_fmt; /**< Encoder pixelfmt (enum vidfmt) */ }; #endif @@ -486,7 +496,7 @@ void log_register_handler(struct log *logh); void log_unregister_handler(struct log *logh); void log_enable_debug(bool enable); void log_enable_info(bool enable); -void log_enable_stderr(bool enable); +void log_enable_stdout(bool enable); void vlog(enum log_level level, const char *fmt, va_list ap); void loglv(enum log_level level, const char *fmt, ...); void debug(const char *fmt, ...); @@ -636,6 +646,7 @@ struct list *ua_calls(const struct ua *ua); enum presence_status ua_presence_status(const struct ua *ua); void ua_presence_status_set(struct ua *ua, const enum presence_status status); void ua_set_media_af(struct ua *ua, int af_media); +void ua_set_catchall(struct ua *ua, bool enabled); /* One instance */ @@ -756,10 +767,18 @@ struct vidsrc_st; /** Video Source parameters */ struct vidsrc_prm { int orient; /**< Wanted picture orientation (enum vidorient) */ - int fps; /**< Wanted framerate */ + double fps; /**< Wanted framerate */ }; -typedef void (vidsrc_frame_h)(struct vidframe *frame, void *arg); +/** + * Provides video frames to the core + * + * @param frame Video frame + * @param timestamp Frame timestamp in VIDEO_TIMEBASE units + * @param arg Handler argument + */ +typedef void (vidsrc_frame_h)(struct vidframe *frame, uint64_t timestamp, + void *arg); typedef void (vidsrc_error_h)(int err, void *arg); typedef int (vidsrc_alloc_h)(struct vidsrc_st **vsp, const struct vidsrc *vs, @@ -772,6 +791,14 @@ typedef int (vidsrc_alloc_h)(struct vidsrc_st **vsp, const struct vidsrc *vs, typedef void (vidsrc_update_h)(struct vidsrc_st *st, struct vidsrc_prm *prm, const char *dev); +/** Defines a video source */ +struct vidsrc { + struct le le; + const char *name; + vidsrc_alloc_h *alloch; + vidsrc_update_h *updateh; +}; + int vidsrc_register(struct vidsrc **vp, struct list *vidsrcl, const char *name, vidsrc_alloc_h *alloch, vidsrc_update_h *updateh); const struct vidsrc *vidsrc_find(const struct list *vidsrcl, const char *name); @@ -780,6 +807,7 @@ int vidsrc_alloc(struct vidsrc_st **stp, struct list *vidsrcl, struct media_ctx **ctx, struct vidsrc_prm *prm, const struct vidsz *size, const char *fmt, const char *dev, vidsrc_frame_h *frameh, vidsrc_error_h *errorh, void *arg); +struct vidsrc *vidsrc_get(struct vidsrc_st *st); /* @@ -807,6 +835,16 @@ typedef int (vidisp_disp_h)(struct vidisp_st *st, const char *title, const struct vidframe *frame); typedef void (vidisp_hide_h)(struct vidisp_st *st); +/** Defines a Video display */ +struct vidisp { + struct le le; + const char *name; + vidisp_alloc_h *alloch; + vidisp_update_h *updateh; + vidisp_disp_h *disph; + vidisp_hide_h *hideh; +}; + int vidisp_register(struct vidisp **vp, struct list *vidispl, const char *name, vidisp_alloc_h *alloch, vidisp_update_h *updateh, vidisp_disp_h *disph, vidisp_hide_h *hideh); @@ -817,6 +855,7 @@ int vidisp_alloc(struct vidisp_st **stp, struct list *vidispl, int vidisp_display(struct vidisp_st *st, const char *title, const struct vidframe *frame); const struct vidisp *vidisp_find(const struct list *vidispl, const char *name); +struct vidisp *vidisp_get(struct vidisp_st *st); /* @@ -826,6 +865,7 @@ const struct vidisp *vidisp_find(const struct list *vidispl, const char *name); /** Audio Codec parameters */ struct auenc_param { uint32_t ptime; /**< Packet time in [ms] */ + uint32_t bitrate;/**< Wanted bitrate in [bit/s] */ }; struct auenc_state; @@ -835,15 +875,17 @@ struct aucodec; typedef int (auenc_update_h)(struct auenc_state **aesp, const struct aucodec *ac, struct auenc_param *prm, const char *fmtp); -typedef int (auenc_encode_h)(struct auenc_state *aes, uint8_t *buf, - size_t *len, const int16_t *sampv, size_t sampc); +typedef int (auenc_encode_h)(struct auenc_state *aes, + uint8_t *buf, size_t *len, + int fmt, const void *sampv, size_t sampc); typedef int (audec_update_h)(struct audec_state **adsp, const struct aucodec *ac, const char *fmtp); -typedef int (audec_decode_h)(struct audec_state *ads, int16_t *sampv, - size_t *sampc, const uint8_t *buf, size_t len); +typedef int (audec_decode_h)(struct audec_state *ads, + int fmt, void *sampv, size_t *sampc, + const uint8_t *buf, size_t len); typedef int (audec_plc_h)(struct audec_state *ads, - int16_t *sampv, size_t *sampc); + int fmt, void *sampv, size_t *sampc); struct aucodec { struct le le; @@ -877,7 +919,7 @@ const struct aucodec *aucodec_find(const struct list *aucodecl, struct videnc_param { unsigned bitrate; /**< Encoder bitrate in [bit/s] */ unsigned pktsize; /**< RTP packetsize in [bytes] */ - unsigned fps; /**< Video framerate */ + double fps; /**< Video framerate (max) */ uint32_t max_fs; }; @@ -885,7 +927,7 @@ struct videnc_state; struct viddec_state; struct vidcodec; -typedef int (videnc_packet_h)(bool marker, uint32_t rtp_ts, +typedef int (videnc_packet_h)(bool marker, uint64_t rtp_ts, const uint8_t *hdr, size_t hdr_len, const uint8_t *pld, size_t pld_len, void *arg); @@ -986,6 +1028,8 @@ void audio_encoder_cycle(struct audio *audio); int audio_level_get(const struct audio *au, double *level); int audio_debug(struct re_printf *pf, const struct audio *a); struct stream *audio_strm(const struct audio *a); +int audio_set_bitrate(struct audio *au, uint32_t bitrate); +bool audio_rxaubuf_started(struct audio *au); /* @@ -1003,9 +1047,10 @@ int video_set_source(struct video *v, const char *name, const char *dev); void video_set_devicename(struct video *v, const char *src, const char *disp); void video_encoder_cycle(struct video *video); int video_debug(struct re_printf *pf, const struct video *v); -uint32_t video_calc_rtp_timestamp(int64_t pts, unsigned fps); -double video_calc_seconds(uint32_t rtp_ts); +uint64_t video_calc_rtp_timestamp(int64_t pts, double fps); +double video_calc_seconds(uint64_t rtp_ts); struct stream *video_strm(const struct video *v); +double video_timestamp_to_seconds(uint64_t timestamp); /* @@ -1135,12 +1180,13 @@ int h264_fu_hdr_decode(struct h264_fu *fu, struct mbuf *mb); const uint8_t *h264_find_startcode(const uint8_t *p, const uint8_t *end); -int h264_packetize(uint32_t rtp_ts, const uint8_t *buf, size_t len, +int h264_packetize(uint64_t rtp_ts, const uint8_t *buf, size_t len, size_t pktsize, videnc_packet_h *pkth, void *arg); int h264_nal_send(bool first, bool last, - bool marker, uint32_t ihdr, uint32_t rtp_ts, + bool marker, uint32_t ihdr, uint64_t rtp_ts, const uint8_t *buf, size_t size, size_t maxsz, videnc_packet_h *pkth, void *arg); +const char *h264_nalunit_name(int type); static inline bool h264_is_keyframe(int type) { return type == H264_NAL_SPS; @@ -1180,6 +1226,13 @@ int event_encode_dict(struct odict *od, struct ua *ua, enum ua_event ev, /* + * Timer + */ + +uint64_t tmr_jiffies_usec(void); + + +/* * Baresip instance */ |