Esempio n. 1
0
static int decode_pip(struct vidfilt_dec_st *st, struct vidframe *frame)
{
	struct selfview_dec *dec = (struct selfview_dec *)st;
	struct selfview *sv = dec->selfview;

	if (!frame)
		return 0;

	lock_read_get(sv->lock);
	if (sv->frame) {
		struct vidrect rect;

		rect.w = min(sv->frame->size.w, frame->size.w/2);
		rect.h = min(sv->frame->size.h, frame->size.h/2);
		if (rect.w <= (frame->size.w - 10))
			rect.x = frame->size.w - rect.w - 10;
		else
			rect.x = frame->size.w/2;
		if (rect.h <= (frame->size.h - 10))
			rect.y = frame->size.h - rect.h - 10;
		else
			rect.y = frame->size.h/2;

		vidconv(frame, sv->frame, &rect);

		vidframe_draw_rect(frame, rect.x, rect.y, rect.w, rect.h,
				   127, 127, 127);
	}
	lock_rel(sv->lock);

	return 0;
}
Esempio n. 2
0
/** Create a Sender Report */
static int mk_sr(struct rtcp_sess *sess, struct mbuf *mb)
{
	struct ntp_time ntp = {0, 0};
	struct txstat txstat;
	uint32_t dur = 0, rtp_ts = 0;
	int err;

	err = ntp_time_get(&ntp);
	if (err)
		return err;

	lock_read_get(sess->lock);
	txstat = sess->txstat;
	lock_rel(sess->lock);

	if (txstat.start) {
		dur = (uint32_t)(time(NULL) - txstat.start);
		rtp_ts = txstat.ts_offset + dur * sess->srate_tx;
	}

	err = rtcp_encode(mb, RTCP_SR, sess->senderc, rtp_sess_ssrc(sess->rs),
			  ntp.hi, ntp.lo, rtp_ts, txstat.psent, txstat.osent,
			  encode_handler, sess->members);
	if (err)
		return err;

	return err;
}
Esempio n. 3
0
static int decode_pip(struct vidfilt_st *st, struct vidframe *frame)
{
	struct selfview *sv = (struct selfview *)st;

	if (!frame)
		return 0;

	lock_read_get(sv->lock);
	if (sv->frame) {
		struct vidrect rect;

		rect.w = sv->frame->size.w;
		rect.h = sv->frame->size.h;
		rect.x = frame->size.w - rect.w - 10;
		rect.y = frame->size.h - rect.h - 10;

		vidconv(frame, sv->frame, &rect);
	}
	lock_rel(sv->lock);

	return 0;
}
Esempio n. 4
0
/**
 * RTCP Debug handler, use with fmt %H
 *
 * @param pf Print function
 * @param rs RTP Socket
 *
 * @return 0 if success, otherwise errorcode
 */
int rtcp_debug(struct re_printf *pf, const struct rtp_sock *rs)
{
	const struct rtcp_sess *sess = rtp_rtcp_sess(rs);
	int err = 0;

	if (!sess)
		return 0;

	err |= re_hprintf(pf, "----- RTCP Session: -----\n");
	err |= re_hprintf(pf, "  cname=%s SSRC=0x%08x/%u rx=%uHz\n",
			  sess->cname,
			  rtp_sess_ssrc(sess->rs), rtp_sess_ssrc(sess->rs),
			  sess->srate_rx);

	hash_apply(sess->members, debug_handler, pf);

	lock_read_get(sess->lock);
	err |= re_hprintf(pf, "  TX: packets=%u, octets=%u\n",
			  sess->txstat.psent, sess->txstat.osent);
	lock_rel(sess->lock);

	return err;
}