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; }
/** 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; }
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; }
/** * 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; }