summaryrefslogtreecommitdiff
path: root/include/baresip.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/baresip.h')
-rw-r--r--include/baresip.h85
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
*/