LLVMFuzzerTestOneInput:
   26|    635|{
   27|    635|    static thread_local struct rtpp_log *log;
   28|    635|    static thread_local struct rtpp_analyzer *rap;
   29|    635|    struct rtp_packet *pktp;
   30|       |
   31|    635|    if (size > MAX_RPKT_LEN)
  ------------------
  |  |   37|    635|#define MAX_RPKT_LEN 8192
  ------------------
  |  Branch (31:9): [True: 0, False: 635]
  ------------------
   32|      0|        return (0);
   33|       |
   34|    635|    if (log == NULL) {
  ------------------
  |  Branch (34:9): [True: 1, False: 634]
  ------------------
   35|      1|        log = rtpp_log_ctor("rtpproxy", NULL, LF_REOPEN);
  ------------------
  |  |   42|      1|#define LF_REOPEN 0
  ------------------
   36|      1|        assert(log != NULL);
  ------------------
  |  Branch (36:9): [True: 0, False: 1]
  |  Branch (36:9): [True: 1, False: 0]
  ------------------
   37|      1|        rap = rtpp_analyzer_ctor(log);
   38|      1|        assert(rap != NULL);
  ------------------
  |  Branch (38:9): [True: 0, False: 1]
  |  Branch (38:9): [True: 1, False: 0]
  ------------------
   39|      1|    }
   40|       |
   41|    635|    pktp = rtp_packet_alloc();
   42|    635|    assert(pktp != NULL);
  ------------------
  |  Branch (42:5): [True: 0, False: 635]
  |  Branch (42:5): [True: 635, False: 0]
  ------------------
   43|    635|    pktp->size = size;
   44|    635|    memcpy(pktp->data.buf, data, size);
   45|       |
   46|    635|    CALL_SMETHOD(rap, update, pktp);
  ------------------
  |  |  156|    635|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  ------------------
  |  |  |  |  154|    635|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|    635|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  119|    635|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  120|    635|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  121|    635|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  122|    635|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  123|    635|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  124|    635|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  125|    635|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  126|    635|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  127|    635|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  128|    635|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  129|    635|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  130|    635|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  131|    635|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  132|    635|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  133|    635|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  134|    635|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  135|    635|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  136|    635|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  137|    635|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  138|    635|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  139|    635|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  140|    635|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  141|    635|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  142|    635|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  143|    635|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  144|    635|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  145|    635|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  146|    635|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  147|    635|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  148|    635|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  149|    635|)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   47|    635|    RTPP_OBJ_DECREF(pktp);
  ------------------
  |  |  174|    635|#define RTPP_OBJ_DECREF(obj) RC_DECREF((obj)->rcnt)
  |  |  ------------------
  |  |  |  |   83|    635|#define RC_DECREF(rp, ...) _RC_CHOOSE(_RC_REF, __VA_ARGS__)(rp, decref, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   79|    635|#define _RC_CHOOSE(NAME, ...) _GET_ARG_3(__VA_ARGS__, NAME##_2, NAME##_1,)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   78|       |#define _GET_ARG_3(_1, _2, _3, ...) _3
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   80|    635|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|    635|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  154|    635|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  118|    635|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  119|    635|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  120|    635|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  121|    635|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  122|    635|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  123|    635|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  124|    635|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  125|    635|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  126|    635|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  127|    635|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  128|    635|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  129|    635|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  130|    635|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  131|    635|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  132|    635|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  133|    635|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  134|    635|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  135|    635|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  136|    635|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  137|    635|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  138|    635|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  139|    635|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  140|    635|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  141|    635|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  142|    635|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  143|    635|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  144|    635|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  145|    635|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  146|    635|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  147|    635|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  148|    635|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  149|    635|)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   80|    635|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   40|    635|#define HEREVAL  ({static const struct rtpp_codeptr _here = {.fname = __FILE__, .linen = __LINE__, .funcn = __func__}; &_here;})
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|    635|    return (0);
   49|    635|}

rtp_packet_parse_raw:
  282|    628|{
  283|    628|    int padding_size;
  284|    628|    rtp_hdr_ext_t *hdr_ext_ptr;
  285|    628|    rtp_hdr_t *header;
  286|       |
  287|    628|    header = (rtp_hdr_t *)buf;
  288|       |
  289|    628|    padding_size = 0;
  290|       |
  291|    628|    rinfo->data_size = 0;
  292|    628|    rinfo->data_offset = 0;
  293|    628|    rinfo->appendable = 1;
  294|    628|    rinfo->nsamples = RTP_NSAMPLES_UNKNOWN;
  ------------------
  |  |   71|    628|#define RTP_NSAMPLES_UNKNOWN  (-1)
  ------------------
  295|       |
  296|    628|    if (size < sizeof(*header))
  ------------------
  |  Branch (296:9): [True: 29, False: 599]
  ------------------
  297|     29|        return RTP_PARSER_PTOOSHRT;
  298|       |
  299|    599|    if (header->version != 2)
  ------------------
  |  Branch (299:9): [True: 4, False: 595]
  ------------------
  300|      4|        return RTP_PARSER_IHDRVER;
  301|       |
  302|    595|    rinfo->data_offset = RTP_HDR_LEN(header);
  ------------------
  |  |  137|    595|#define	RTP_HDR_LEN(rhp)	(sizeof(*(rhp)) + ((rhp)->cc * sizeof((rhp)->csrc[0])))
  ------------------
  303|       |
  304|    595|    if (header->x != 0) {
  ------------------
  |  Branch (304:9): [True: 87, False: 508]
  ------------------
  305|     87|        if (size < rinfo->data_offset + sizeof(*hdr_ext_ptr))
  ------------------
  |  Branch (305:13): [True: 7, False: 80]
  ------------------
  306|      7|            return RTP_PARSER_PTOOSHRTXS;
  307|     80|        hdr_ext_ptr = (rtp_hdr_ext_t *)&buf[rinfo->data_offset];
  308|     80|        rinfo->data_offset += sizeof(rtp_hdr_ext_t) +
  309|     80|          (ntohs(hdr_ext_ptr->length) * sizeof(hdr_ext_ptr->extension[0]));
  310|     80|    }
  311|       |
  312|    588|    if (size < rinfo->data_offset)
  ------------------
  |  Branch (312:9): [True: 23, False: 565]
  ------------------
  313|     23|        return RTP_PARSER_PTOOSHRTXH;
  314|       |
  315|    565|    if (header->p != 0) {
  ------------------
  |  Branch (315:9): [True: 101, False: 464]
  ------------------
  316|    101|        if (rinfo->data_offset == size)
  ------------------
  |  Branch (316:13): [True: 1, False: 100]
  ------------------
  317|      1|            return RTP_PARSER_PTOOSHRTPS;
  318|    100|        padding_size = buf[size - 1];
  319|    100|        if (padding_size == 0)
  ------------------
  |  Branch (319:13): [True: 4, False: 96]
  ------------------
  320|      4|            return RTP_PARSER_IPS;
  321|    100|    }
  322|       |
  323|    560|    if (size < rinfo->data_offset + padding_size)
  ------------------
  |  Branch (323:9): [True: 21, False: 539]
  ------------------
  324|     21|        return RTP_PARSER_PTOOSHRTP;
  325|       |
  326|    539|    rinfo->data_size = size - rinfo->data_offset - padding_size;
  327|    539|    rinfo->ts = ntohl(header->ts);
  328|    539|    rinfo->seq = ntohs(header->seq);
  329|    539|    rinfo->ssrc = ntohl(header->ssrc);
  330|    539|    rinfo->rtp_profile = &rtp_profiles[header->pt];
  331|       |
  332|    539|    if (rinfo->data_size == 0)
  ------------------
  |  Branch (332:9): [True: 356, False: 183]
  ------------------
  333|    356|        return RTP_PARSER_OK;
  334|       |
  335|    183|    rinfo->nsamples = rtp_calc_samples(header->pt, rinfo->data_size,
  336|    183|      &buf[rinfo->data_offset]);
  337|       |    /* 
  338|       |     * G.729 comfort noise frame as the last frame causes 
  339|       |     * packet to be non-appendable
  340|       |     */
  341|    183|    if (header->pt == RTP_G729 && (rinfo->data_size % 10) != 0)
  ------------------
  |  Branch (341:9): [True: 11, False: 172]
  |  Branch (341:35): [True: 10, False: 1]
  ------------------
  342|     10|        rinfo->appendable = 0;
  343|    183|    return RTP_PARSER_OK;
  344|    539|}
rtp.c:g723_len:
   68|  1.54k|{
   69|       |
   70|  1.54k|    switch (ch & 3) {
   71|    690|    case 2:
  ------------------
  |  Branch (71:5): [True: 690, False: 851]
  ------------------
   72|       |	/* Silence Insertion Descriptor (SID) frame */
   73|    690|	return 4;
   74|       |
   75|    402|    case 0:
  ------------------
  |  Branch (75:5): [True: 402, False: 1.13k]
  ------------------
   76|       |	/* 6.3 kbit/s frame */
   77|    402|	return 24;
   78|       |
   79|    410|    case 1:
  ------------------
  |  Branch (79:5): [True: 410, False: 1.13k]
  ------------------
   80|       |	/* 5.3 kbit/s frame */
   81|    410|	return 20;
   82|       |
   83|     39|    default:
  ------------------
  |  Branch (83:5): [True: 39, False: 1.50k]
  ------------------
   84|     39|	return RTP_NSAMPLES_UNKNOWN;
  ------------------
  |  |   71|     39|#define RTP_NSAMPLES_UNKNOWN  (-1)
  ------------------
   85|  1.54k|    }
   86|  1.54k|}
rtp.c:rtp_calc_samples:
  104|    183|{
  105|       |
  106|    183|    switch (codec_id) {
  107|     39|	case RTP_PCMU:
  ------------------
  |  Branch (107:2): [True: 39, False: 144]
  ------------------
  108|     41|	case RTP_PCMA:
  ------------------
  |  Branch (108:2): [True: 2, False: 181]
  ------------------
  109|     41|	    return nbytes;
  110|       |
  111|     11|	case RTP_G729:
  ------------------
  |  Branch (111:2): [True: 11, False: 172]
  ------------------
  112|     11|	    return (nbytes / 10) * 80 + (nbytes % 10 == 0 ? 0 : 80);
  ------------------
  |  Branch (112:35): [True: 1, False: 10]
  ------------------
  113|       |
  114|      1|	case RTP_GSM:
  ------------------
  |  Branch (114:2): [True: 1, False: 182]
  ------------------
  115|      1|	    return 160 * (nbytes / 33);
  116|       |
  117|    102|	case RTP_G723:
  ------------------
  |  Branch (117:2): [True: 102, False: 81]
  ------------------
  118|    102|	    return g723_samples(data, nbytes);
  119|       |
  120|      1|	case RTP_G722:
  ------------------
  |  Branch (120:2): [True: 1, False: 182]
  ------------------
  121|      1|	    return nbytes;
  122|       |
  123|     27|	default:
  ------------------
  |  Branch (123:2): [True: 27, False: 156]
  ------------------
  124|     27|	    return RTP_NSAMPLES_UNKNOWN;
  ------------------
  |  |   71|     27|#define RTP_NSAMPLES_UNKNOWN  (-1)
  ------------------
  125|    183|    }
  126|    183|}
rtp.c:g723_samples:
   90|    102|{
   91|    102|    int pos, samples, n;
   92|       |
   93|  1.60k|    for (pos = 0, samples = 0; pos < maxlen; pos += n) {
  ------------------
  |  Branch (93:32): [True: 1.54k, False: 63]
  ------------------
   94|  1.54k|	samples += 240;
   95|  1.54k|	n = g723_len(buf[pos]);
   96|  1.54k|	if (n == RTP_NSAMPLES_UNKNOWN)
  ------------------
  |  |   71|  1.54k|#define RTP_NSAMPLES_UNKNOWN  (-1)
  ------------------
  |  Branch (96:6): [True: 39, False: 1.50k]
  ------------------
   97|     39|	    return RTP_NSAMPLES_UNKNOWN;
  ------------------
  |  |   71|     39|#define RTP_NSAMPLES_UNKNOWN  (-1)
  ------------------
   98|  1.54k|    }
   99|     63|    return samples;
  100|    102|}

rtpp_stats_init:
  212|      1|{
  213|       |
  214|      1|    memset(stat, '\0', sizeof(struct rtpp_session_stat));
  215|      1|    stat->jdata = rtp_analyze_jt_ctor();
  216|      1|    if (stat->jdata == NULL) {
  ------------------
  |  Branch (216:9): [True: 0, False: 1]
  ------------------
  217|      0|        return (-1);
  218|      0|    }
  219|      1|    stat->last.pt = PT_UNKN;
  ------------------
  |  |   41|      1|#define PT_UNKN 128
  ------------------
  220|      1|    return (0);
  221|      1|}
update_rtpp_stats:
  349|    539|{
  350|    539|    uint32_t seq;
  351|    539|    uint16_t idx;
  352|    539|    uint32_t mask;
  353|    539|    const struct rtp_profile *rpp;
  354|    539|    struct rtp_analyze_jdata *jdp;
  355|       |
  356|    539|    rpp = rinfo->rtp_profile;
  357|    539|    jdp = jdata_by_ssrc(stat->jdata, rinfo->ssrc);
  358|    539|    if (jdp == NULL)
  ------------------
  |  Branch (358:9): [True: 0, False: 539]
  ------------------
  359|      0|        return (UPDATE_ERR);
  360|    539|    if (stat->ssrc_changes == 0) {
  ------------------
  |  Branch (360:9): [True: 1, False: 538]
  ------------------
  361|      1|        RTPP_DBG_ASSERT(stat->last.pcount == 0);
  362|      1|        RTPP_DBG_ASSERT(stat->psent == 0);
  363|      1|        RTPP_DBG_ASSERT(stat->precvd == 0);
  364|      1|        stat->last.ssrc.val = rinfo->ssrc;
  365|      1|        stat->last.ssrc.inited = 1;
  366|      1|        stat->last.max_seq = stat->last.min_seq = rinfo->seq;
  367|      1|        stat->last.base_ts = rinfo->ts;
  368|      1|        stat->last.base_rtime = rtime;
  369|      1|        stat->last.pcount = 1;
  370|      1|        stat->ssrc_changes = 1;
  371|      1|        idx = (rinfo->seq % 131072) >> 5;
  372|      1|        stat->last.seen[idx] |= (uint32_t)1 << (rinfo->seq & 31);
  373|      1|        stat->last.seq = rinfo->seq;
  374|      1|        if (rpp->ts_rate > 0) {
  ------------------
  |  Branch (374:13): [True: 0, False: 1]
  ------------------
  375|      0|            update_jitter_stats(jdp, rinfo, rtime, RTP_NORMAL, rlog);
  ------------------
  |  |  111|      0|#define RTP_NORMAL     0
  ------------------
  376|      0|        }
  377|      1|        return (UPDATE_OK);
  378|      1|    }
  379|    538|    RTPP_DBG_ASSERT(stat->last.ssrc.inited == 1);
  380|    538|    if (stat->last.ssrc.val != rinfo->ssrc) {
  ------------------
  |  Branch (380:9): [True: 208, False: 330]
  ------------------
  381|    208|        update_rtpp_totals(stat, stat);
  382|    208|        stat->last.duplicates = 0;
  383|    208|        memset(stat->last.seen, '\0', sizeof(stat->last.seen));
  384|       |#if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
  385|       |        LOGI_IF_NOT_NULL(rlog, "SSRC changed from " SSRC_FMT "/%d to "
  386|       |          SSRC_FMT "/%d", stat->last.ssrc.val, stat->last.seq, rinfo->ssrc,
  387|       |          rinfo->seq); 
  388|       |#endif
  389|    208|        stat->last.ssrc.val = rinfo->ssrc;
  390|    208|        stat->last.max_seq = stat->last.min_seq = rinfo->seq;
  391|    208|        stat->last.base_ts = rinfo->ts;
  392|    208|        stat->last.base_rtime = rtime;
  393|    208|        stat->last.pcount = 1;
  394|    208|        stat->ssrc_changes += 1;
  395|    208|        if ((stat->psent > 0 || stat->precvd > 0) && rlog != NULL) {
  ------------------
  |  Branch (395:14): [True: 208, False: 0]
  |  Branch (395:33): [True: 0, False: 0]
  |  Branch (395:54): [True: 208, False: 0]
  ------------------
  396|    208|            LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: ssrc_changes=%u, psent=%u, precvd=%u",
  ------------------
  |  |  103|    208|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 208, False: 0]
  |  |  ------------------
  |  |  104|    208|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|    208|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    624|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    208|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|    208|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|    208|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  396|    208|            LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: ssrc_changes=%u, psent=%u, precvd=%u",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|    208|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    208|              rinfo->ssrc, rinfo->seq, stat->ssrc_changes, stat->psent, stat->precvd);
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|    208|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|    208|    }
  ------------------
  397|    208|              rinfo->ssrc, rinfo->seq, stat->ssrc_changes, stat->psent, stat->precvd);
  398|    208|        }
  399|    208|        idx = (rinfo->seq % 131072) >> 5;
  400|    208|        stat->last.seen[idx] |= (uint32_t)1 << (rinfo->seq & 31);
  401|    208|        stat->last.seq = rinfo->seq;
  402|    208|        if (rpp->ts_rate > 0) {
  ------------------
  |  Branch (402:13): [True: 170, False: 38]
  ------------------
  403|    170|            update_jitter_stats(jdp, rinfo, rtime, RTP_SSRC_RESET, rlog);
  ------------------
  |  |  113|    170|#define RTP_SSRC_RESET 2
  ------------------
  404|    170|        }
  405|    208|        return (UPDATE_SSRC_CHG);
  406|    208|    }
  407|    330|    seq = rinfo->seq + stat->last.seq_offset;
  408|    330|    if (header->mbt && (seq < stat->last.max_seq && (stat->last.max_seq & 0xffff) != 65535)) {
  ------------------
  |  Branch (408:9): [True: 174, False: 156]
  |  Branch (408:25): [True: 49, False: 125]
  |  Branch (408:53): [True: 28, False: 21]
  ------------------
  409|     28|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: seq reset last->max_seq=%u, seq=%u, m=%u",
  ------------------
  |  |  103|     28|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 28, False: 0]
  |  |  ------------------
  |  |  104|     28|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|     28|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|     84|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|     28|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|     28|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|     28|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  409|     28|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: seq reset last->max_seq=%u, seq=%u, m=%u",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|     28|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  410|     28|          rinfo->ssrc, rinfo->seq, stat->last.max_seq, seq, header->mbt);
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|     28|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|     28|    }
  ------------------
  410|     28|          rinfo->ssrc, rinfo->seq, stat->last.max_seq, seq, header->mbt);
  411|       |        /* Seq reset has happened. Treat it as a ssrc change */
  412|     28|        update_rtpp_totals(stat, stat);
  413|     28|        stat->last.duplicates = 0;
  414|     28|        memset(stat->last.seen, '\0', sizeof(stat->last.seen));
  415|     28|        stat->last.max_seq = stat->last.min_seq = seq;
  416|     28|        stat->last.base_ts = rinfo->ts;
  417|     28|        stat->last.base_rtime = rtime;
  418|     28|        stat->last.pcount = 1;
  419|     28|        stat->seq_res_count += 1;
  420|     28|        idx = (seq % 131072) >> 5;
  421|     28|        stat->last.seen[idx] |= (uint32_t)1 << (rinfo->seq & 31);
  422|     28|        stat->last.seq = rinfo->seq;
  423|     28|        if (rpp->ts_rate > 0) {
  ------------------
  |  Branch (423:13): [True: 24, False: 4]
  ------------------
  424|     24|            update_jitter_stats(jdp, rinfo, rtime, RTP_SEQ_RESET, rlog);
  ------------------
  |  |  112|     24|#define RTP_SEQ_RESET  1
  ------------------
  425|     24|        }
  426|     28|        return (UPDATE_OK);
  427|    302|    } else {
  428|    302|        if (rpp->ts_rate > 0) {
  ------------------
  |  Branch (428:13): [True: 243, False: 59]
  ------------------
  429|    243|            if (seq == 0 && (stat->last.max_seq & 0xffff) < 65500) {
  ------------------
  |  Branch (429:17): [True: 0, False: 243]
  |  Branch (429:29): [True: 0, False: 0]
  ------------------
  430|      0|                update_jitter_stats(jdp, rinfo, rtime, RTP_SEQ_RESET, rlog);
  ------------------
  |  |  112|      0|#define RTP_SEQ_RESET  1
  ------------------
  431|    243|            } else {
  432|    243|                update_jitter_stats(jdp, rinfo, rtime, RTP_NORMAL, rlog);
  ------------------
  |  |  111|    243|#define RTP_NORMAL     0
  ------------------
  433|    243|            }
  434|    243|        }
  435|    302|    }
  436|    302|    if (rpp->ts_rate != 0 && ABS(rtime - stat->last.base_rtime -
  ------------------
  |  |   42|    243|#define ABS(x)          ((x) > 0 ? (x) : (-x))
  |  |  ------------------
  |  |  |  Branch (42:26): [True: 0, False: 243]
  |  |  ------------------
  ------------------
  |  Branch (436:9): [True: 243, False: 59]
  |  Branch (436:30): [True: 0, False: 243]
  ------------------
  437|    243|      rtp_ts2dtime(rpp->ts_rate, rinfo->ts - stat->last.base_ts)) > 0.1) {
  438|      0|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: delta rtime=%f, delta ts=%f",
  ------------------
  |  |  103|      0|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|      0|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  438|      0|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: delta rtime=%f, delta ts=%f",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|      0|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  439|      0|          rinfo->ssrc, rinfo->seq, rtime - stat->last.base_rtime,
  |  |  |  |  |  |  |  |  440|      0|          rtp_ts2dtime(rpp->ts_rate, rinfo->ts - stat->last.base_ts));
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|      0|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|      0|    }
  ------------------
  439|      0|          rinfo->ssrc, rinfo->seq, rtime - stat->last.base_rtime,
  440|      0|          rtp_ts2dtime(rpp->ts_rate, rinfo->ts - stat->last.base_ts));
  441|      0|        stat->last.base_rtime = rtime;
  442|      0|    }
  443|    302|    if (stat->last.max_seq % 65536 < 536 && rinfo->seq > 65000) {
  ------------------
  |  Branch (443:9): [True: 107, False: 195]
  |  Branch (443:45): [True: 49, False: 58]
  ------------------
  444|       |        /* Pre-wrap packet received after a wrap */
  445|     49|        seq -= 65536;
  446|    253|    } else if (stat->last.max_seq > 65000 && seq < stat->last.max_seq - 65000) {
  ------------------
  |  Branch (446:16): [True: 220, False: 33]
  |  Branch (446:46): [True: 10, False: 210]
  ------------------
  447|     10|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: wrap last->max_seq=%u, seq=%u",
  ------------------
  |  |  103|     10|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 10, False: 0]
  |  |  ------------------
  |  |  104|     10|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|     10|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|     30|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|     10|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|     10|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|     10|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  447|     10|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: wrap last->max_seq=%u, seq=%u",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|     10|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  448|     10|          rinfo->ssrc, rinfo->seq, stat->last.max_seq, seq);
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|     10|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|     10|    }
  ------------------
  448|     10|          rinfo->ssrc, rinfo->seq, stat->last.max_seq, seq);
  449|       |        /* Wrap up has happened */
  450|     10|        stat->last.seq_offset += 65536;
  451|     10|        seq += 65536;
  452|     10|        if (stat->last.seq_offset % 131072 == 65536) {
  ------------------
  |  Branch (452:13): [True: 5, False: 5]
  ------------------
  453|      5|            memset(stat->last.seen + 2048, '\0', sizeof(stat->last.seen) / 2);
  454|      5|        } else {
  455|      5|            memset(stat->last.seen, '\0', sizeof(stat->last.seen) / 2);
  456|      5|        }
  457|    243|    } else if (seq + 536 < stat->last.max_seq || seq > stat->last.max_seq + 536) {
  ------------------
  |  Branch (457:16): [True: 30, False: 213]
  |  Branch (457:50): [True: 117, False: 96]
  ------------------
  458|    147|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: desync last->max_seq=%u, seq=%u, m=%u",
  ------------------
  |  |  103|    147|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 147, False: 0]
  |  |  ------------------
  |  |  104|    147|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|    147|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    441|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    147|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|    147|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|    147|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  458|    147|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: desync last->max_seq=%u, seq=%u, m=%u",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|    147|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|    147|          rinfo->ssrc, rinfo->seq, stat->last.max_seq, seq, header->mbt);
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|    147|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|    147|    }
  ------------------
  459|    147|          rinfo->ssrc, rinfo->seq, stat->last.max_seq, seq, header->mbt);
  460|       |        /* Desynchronization has happened. Treat it as a ssrc change */
  461|    147|        update_rtpp_totals(stat, stat);
  462|    147|        stat->last.duplicates = 0;
  463|    147|        memset(stat->last.seen, '\0', sizeof(stat->last.seen));
  464|    147|        stat->last.max_seq = stat->last.min_seq = seq;
  465|    147|        stat->last.pcount = 1;
  466|    147|        stat->desync_count += 1;
  467|    147|        idx = (seq % 131072) >> 5;
  468|    147|        stat->last.seen[idx] |= (uint32_t)1 << (rinfo->seq & 31);
  469|    147|        stat->last.seq = rinfo->seq;
  470|    147|        return (UPDATE_OK);
  471|    147|    }
  472|       |        /* printf("last->max_seq=%u, seq=%u, m=%u\n", stat->last.max_seq, seq, header->mbt);*/
  473|    155|    idx = (seq % 131072) >> 5;
  474|    155|    mask = stat->last.seen[idx];
  475|    155|    if (((mask >> (seq & 31)) & 1) != 0) {
  ------------------
  |  Branch (475:9): [True: 27, False: 128]
  ------------------
  476|     27|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: DUP",
  ------------------
  |  |  103|     27|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 27, False: 0]
  |  |  ------------------
  |  |  104|     27|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|     27|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|     81|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|     27|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|     27|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|     27|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  476|     27|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: DUP",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|     27|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  477|     27|          rinfo->ssrc, rinfo->seq);
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|     27|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|     27|    }
  ------------------
  477|     27|          rinfo->ssrc, rinfo->seq);
  478|     27|        stat->last.duplicates += 1;
  479|     27|        stat->last.seq = rinfo->seq;
  480|     27|        return (UPDATE_OK);
  481|     27|    }
  482|    128|    stat->last.seen[idx] |= (uint32_t)1 << (rinfo->seq & 31);
  483|    128|    if (seq - stat->last.max_seq != 1)
  ------------------
  |  Branch (483:9): [True: 120, False: 8]
  ------------------
  484|    120|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: delta = %d",
  ------------------
  |  |  103|    120|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 120, False: 0]
  |  |  ------------------
  |  |  104|    120|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|    120|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    360|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|    120|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|    120|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|    120|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    120|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: delta = %d",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|    120|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  485|    120|          rinfo->ssrc, rinfo->seq, seq - stat->last.max_seq);
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|    120|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|    120|    }
  ------------------
  485|    128|          rinfo->ssrc, rinfo->seq, seq - stat->last.max_seq);
  486|    128|    if (seq >= stat->last.max_seq) {
  ------------------
  |  Branch (486:9): [True: 58, False: 70]
  ------------------
  487|     58|        stat->last.max_seq = seq;
  488|     58|        stat->last.pcount += 1;
  489|     58|        stat->last.seq = rinfo->seq;
  490|     58|        return (UPDATE_OK);
  491|     58|    }
  492|     70|    if (seq >= stat->last.min_seq) {
  ------------------
  |  Branch (492:9): [True: 19, False: 51]
  ------------------
  493|     19|        stat->last.pcount += 1;
  494|     19|        stat->last.seq = rinfo->seq;
  495|     19|        return (UPDATE_OK);
  496|     19|    }
  497|     51|    if (stat->last.seq_offset == 0 && seq < stat->last.min_seq) {
  ------------------
  |  Branch (497:9): [True: 1, False: 50]
  |  Branch (497:39): [True: 1, False: 0]
  ------------------
  498|      1|        stat->last.min_seq = seq;
  499|      1|        stat->last.pcount += 1;
  500|      1|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: last->min_seq=%u",
  ------------------
  |  |  103|      1|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 1, False: 0]
  |  |  ------------------
  |  |  104|      1|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|      1|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      3|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      1|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|      1|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|      1|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  500|      1|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT "/%d: last->min_seq=%u",
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|      1|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  501|      1|          rinfo->ssrc, rinfo->seq, stat->last.min_seq);
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|      1|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|      1|    }
  ------------------
  501|      1|          rinfo->ssrc, rinfo->seq, stat->last.min_seq);
  502|      1|        stat->last.seq = rinfo->seq;
  503|      1|        return (UPDATE_OK);
  504|      1|    }
  505|       |    /* XXX something wrong with the stream */
  506|     50|    stat->last.seq = rinfo->seq;
  507|     50|    return (UPDATE_ERR);
  508|     51|}
update_rtpp_totals:
  512|    383|{
  513|       |
  514|    383|    if (ostat != wstat) {
  ------------------
  |  Branch (514:9): [True: 0, False: 383]
  ------------------
  515|      0|        ostat->psent = wstat->psent;
  516|      0|        ostat->precvd = wstat->precvd;
  517|      0|        ostat->duplicates = wstat->duplicates;
  518|      0|    }
  519|    383|    if (wstat->last.pcount == 0)
  ------------------
  |  Branch (519:9): [True: 0, False: 383]
  ------------------
  520|      0|        return;
  521|    383|    ostat->psent += wstat->last.max_seq - wstat->last.min_seq + 1;
  522|    383|    ostat->precvd += wstat->last.pcount;
  523|    383|    ostat->duplicates += wstat->last.duplicates;
  524|    383|}
rtp_analyze.c:rtp_analyze_jt_ctor:
  246|      1|{
  247|      1|    struct rtp_analyze_jitter *jp;
  248|       |
  249|      1|    jp = rtpp_zmalloc(sizeof(*jp));
  250|      1|    if (jp == NULL) {
  ------------------
  |  Branch (250:9): [True: 0, False: 1]
  ------------------
  251|      0|        goto e0;
  252|      0|    }
  253|      1|    jp->first = rtp_analyze_jdata_ctor();
  254|      1|    if (jp->first == NULL) {
  ------------------
  |  Branch (254:9): [True: 0, False: 1]
  ------------------
  255|      0|        goto e1;
  256|      0|    }
  257|      1|    jp->jdlen = 1;
  258|      1|    return (jp);
  259|       |
  260|      0|e1:
  261|      0|    free(jp);
  262|      0|e0:
  263|       |    return (NULL);
  264|      0|}
rtp_analyze.c:rtp_analyze_jdata_ctor:
  225|     10|{
  226|     10|    struct rtp_analyze_jdata *jdp;
  227|       |
  228|     10|    jdp = rtpp_zmalloc(sizeof(*jdp));
  229|     10|    if (jdp == NULL) {
  ------------------
  |  Branch (229:9): [True: 0, False: 10]
  ------------------
  230|      0|        goto e0;
  231|      0|    }
  232|     10|    jdp->ts_dedup = rtpp_ringbuf_ctor(sizeof(jdp->jss.prev_ts), 10);
  233|     10|    if (jdp->ts_dedup == NULL) {
  ------------------
  |  Branch (233:9): [True: 0, False: 10]
  ------------------
  234|      0|        goto e1;
  235|      0|    }
  236|     10|    return (jdp);
  237|       |
  238|      0|e1:
  239|      0|    free(jdp);
  240|      0|e0:
  241|       |    return (NULL);
  242|      0|}
rtp_analyze.c:jdata_by_ssrc:
  293|    539|{
  294|    539|    struct rtp_analyze_jdata *rjdp, *jdp_last, *jdp_prelast;
  295|       |
  296|    539|    if (jp->first->ssrc.inited == 0) {
  ------------------
  |  Branch (296:9): [True: 1, False: 538]
  ------------------
  297|      1|        jp->first->ssrc.val = ssrc;
  298|      1|        jp->first->ssrc.inited = 1;
  299|      1|        return (jp->first);
  300|      1|    }
  301|       |
  302|    538|    jdp_last = jdp_prelast = NULL;
  303|  3.83k|    for (rjdp = jp->first; rjdp != NULL; rjdp = rjdp->next) {
  ------------------
  |  Branch (303:28): [True: 3.70k, False: 131]
  ------------------
  304|  3.70k|        if (rjdp->ssrc.val == ssrc) {
  ------------------
  |  Branch (304:13): [True: 407, False: 3.30k]
  ------------------
  305|    407|            return (rjdp);
  306|    407|        }
  307|  3.30k|        jdp_prelast = jdp_last;
  308|  3.30k|        jdp_last = rjdp;
  309|  3.30k|    }
  310|       |
  311|    131|    if (jp->jdlen == RTPC_JDATA_MAX) {
  ------------------
  |  |  115|    131|#define RTPC_JDATA_MAX 10
  ------------------
  |  Branch (311:9): [True: 122, False: 9]
  ------------------
  312|       |        /* Re-use the last per-ssrc data */
  313|    122|        rjdp = jdp_last;
  314|    122|        if (jdp_prelast != NULL) {
  ------------------
  |  Branch (314:13): [True: 122, False: 0]
  ------------------
  315|    122|            RTPP_DBG_ASSERT(jdp_prelast->next == jdp_last);
  316|    122|            jdp_prelast->next = NULL;
  317|    122|        } else {
  318|      0|            jp->first = NULL;
  319|      0|        }
  320|    122|        CALL_SMETHOD(rjdp->ts_dedup, flush);
  ------------------
  |  |  156|    122|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  ------------------
  |  |  |  |  154|    122|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|    122|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  119|    122|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  120|    122|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  121|    122|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  122|    122|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  123|    122|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  124|    122|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  125|    122|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  126|    122|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  127|    122|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  128|    122|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  129|    122|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  130|    122|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  131|    122|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  132|    122|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  133|    122|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  134|    122|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  135|    122|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  136|    122|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  137|    122|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  138|    122|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  139|    122|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  140|    122|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  141|    122|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  142|    122|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  143|    122|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  144|    122|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  145|    122|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  146|    122|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  147|    122|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  148|    122|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  149|    122|)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|    122|        if (rjdp->jss.pcount >= 2) {
  ------------------
  |  Branch (321:13): [True: 13, False: 109]
  ------------------
  322|     13|            if (jp->jmax_acum < rjdp->jss.jmax) {
  ------------------
  |  Branch (322:17): [True: 0, False: 13]
  ------------------
  323|      0|                jp->jmax_acum = rjdp->jss.jmax;
  324|      0|            }
  325|     13|            jp->jtotal_acum += rjdp->jss.jtotal;
  326|     13|            jp->jvcount_acum += rjdp->jss.pcount - 1;
  327|     13|            jp->pcount_acum += rjdp->jss.pcount;
  328|     13|        }
  329|    122|        memset(&rjdp->jss, '\0', sizeof(rjdp->jss));
  330|    122|        RTPP_DBG_ASSERT(rjdp->ssrc.inited == 1);
  331|    122|    } else {
  332|       |        /* Allocate per-ssrc data */
  333|      9|        rjdp = rtp_analyze_jdata_ctor();
  334|      9|        if (rjdp == NULL) {
  ------------------
  |  Branch (334:13): [True: 0, False: 9]
  ------------------
  335|      0|            return (NULL);
  336|      0|        }
  337|      9|        rjdp->ssrc.inited = 1;
  338|      9|        jp->jdlen += 1;
  339|      9|    }
  340|    131|    rjdp->ssrc.val = ssrc;
  341|    131|    rjdp->next = jp->first;
  342|    131|    jp->first = rjdp;
  343|    131|    return (rjdp);
  344|    131|}
rtp_analyze.c:update_jitter_stats:
  120|    437|{
  121|    437|    int64_t dval;
  122|    437|    uint64_t rtime_ts, wrcorr;
  123|    437|#if FIX_TIMESTAMP_RESET
  124|    437|    int64_t rtime_ts_delta;
  125|    437|#endif
  126|       |
  127|    437|    rtime_ts = rtp_dtime2time_ts64(rinfo->rtp_profile->ts_rate, rtime);
  128|    437|    if (rinfo->rtp_profile->pt_kind == RTP_PTK_AUDIO &&
  ------------------
  |  Branch (128:9): [True: 437, False: 0]
  ------------------
  129|    437|      CALL_SMETHOD(jdp->ts_dedup, locate, &rinfo->ts) >= 0) {
  ------------------
  |  |  156|    437|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  ------------------
  |  |  |  |  154|    437|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|    437|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  119|    437|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  120|    437|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  121|    437|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  122|    437|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  123|    437|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  124|    437|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  125|    437|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  126|    437|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  127|    437|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  128|    437|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  129|    437|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  130|    437|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  131|    437|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  132|    437|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  133|    437|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  134|    437|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  135|    437|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  136|    437|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  137|    437|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  138|    437|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  139|    437|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  140|    437|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  141|    437|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  142|    437|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  143|    437|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  144|    437|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  145|    437|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  146|    437|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  147|    437|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  148|    437|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  149|    437|)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (129:7): [True: 37, False: 400]
  ------------------
  130|     37|        jdp->jss.ts_dcount++;
  131|     37|        if (jdp->jss.pcount == 1) {
  ------------------
  |  Branch (131:13): [True: 1, False: 36]
  ------------------
  132|      1|            jdp->jss.prev_rtime_ts = rtime_ts;
  133|      1|            jdp->jss.prev_ts = rinfo->ts;
  134|      1|        }
  135|     37|        return;
  136|     37|    }
  137|    400|    if (jdp->jss.prev_rtime_ts != 0) {
  ------------------
  |  Branch (137:9): [True: 0, False: 400]
  ------------------
  138|      0|        if (hint == RTP_SEQ_RESET) {
  ------------------
  |  |  112|      0|#define RTP_SEQ_RESET  1
  ------------------
  |  Branch (138:13): [True: 0, False: 0]
  ------------------
  139|      0|            jdp->jss.seq_rcount++;
  140|      0|            goto saveandexit;
  141|      0|        }
  142|      0|#if FIX_TIMESTAMP_RESET
  143|      0|        rtime_ts_delta = jdp->jss.prev_rtime_ts - rtime_ts;
  144|      0|#endif
  145|      0|        if (jdp->jss.prev_ts > rinfo->ts) {
  ------------------
  |  Branch (145:13): [True: 0, False: 0]
  ------------------
  146|      0|            if (((uint64_t)jdp->jss.prev_ts - (uint64_t)rinfo->ts) > ((uint32_t)1 << 31)) {
  ------------------
  |  Branch (146:17): [True: 0, False: 0]
  ------------------
  147|       |                /* Normal case, timestamp wrap */
  148|      0|                wrcorr = (uint64_t)1 << 32;
  149|      0|#if FIX_TIMESTAMP_RESET
  150|      0|            } else if (rtime_ts_delta != 0 && ((uint64_t)jdp->jss.prev_ts - (uint64_t)rinfo->ts) >
  ------------------
  |  Branch (150:24): [True: 0, False: 0]
  |  Branch (150:47): [True: 0, False: 0]
  ------------------
  151|      0|              ABS(rtime_ts_delta) * 50) {
  ------------------
  |  |   42|      0|#define ABS(x)          ((x) > 0 ? (x) : (-x))
  |  |  ------------------
  |  |  |  Branch (42:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  152|       |                /* Timestamp reset */
  153|      0|#if DEBUG_TIMESTAMP_RESET
  154|      0|                LOGD_IF_NOT_NULL(rlog, "update_jitter_stats() : timestamp reset : " SSRC_FMT ", %lld, %llu",
  ------------------
  |  |  103|      0|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|      0|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|                LOGD_IF_NOT_NULL(rlog, "update_jitter_stats() : timestamp reset : " SSRC_FMT ", %lld, %llu",
  |  |  |  |  |  |  |  |  155|      0|                  rinfo->ssrc, T_printf(ABS(rtime_ts_delta)),
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (39:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (40:36): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (41:26): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  156|      0|                  T_printf((uint64_t)jdp->jss.prev_ts - (uint64_t)rinfo->ts));
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|      0|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|      0|    }
  ------------------
  155|      0|                  rinfo->ssrc, T_printf(ABS(rtime_ts_delta)),
  156|      0|                  T_printf((uint64_t)jdp->jss.prev_ts - (uint64_t)rinfo->ts));
  157|      0|#endif
  158|      0|                jdp->jss.ts_rcount++;
  159|      0|                goto saveandexit;
  160|      0|#endif
  161|      0|            } else {
  162|      0|                wrcorr = 0;
  163|      0|            }
  164|      0|        } else {
  165|      0|# if FIX_TIMESTAMP_RESET
  166|      0|            if (rtime_ts_delta != 0 && ((uint64_t)rinfo->ts - (uint64_t)jdp->jss.prev_ts) >
  ------------------
  |  Branch (166:17): [True: 0, False: 0]
  |  Branch (166:40): [True: 0, False: 0]
  ------------------
  167|      0|              ABS(rtime_ts_delta) * 1024) {
  ------------------
  |  |   42|      0|#define ABS(x)          ((x) > 0 ? (x) : (-x))
  |  |  ------------------
  |  |  |  Branch (42:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  168|       |                /* Timestamp jump */
  169|      0|#if DEBUG_TIMESTAMP_RESET
  170|      0|                LOGD_IF_NOT_NULL(rlog,"update_jitter_stats() : timestamp jump : " SSRC_FMT ", %lld, %lld",
  ------------------
  |  |  103|      0|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|      0|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  170|      0|                LOGD_IF_NOT_NULL(rlog,"update_jitter_stats() : timestamp jump : " SSRC_FMT ", %lld, %lld",
  |  |  |  |  |  |  |  |  171|      0|                  rinfo->ssrc, T_printf(ABS(rtime_ts_delta)),
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (39:33): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (40:36): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (41:26): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|                  T_printf((uint64_t)rinfo->ts - (uint64_t)jdp->jss.prev_ts));
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|      0|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|      0|    }
  ------------------
  171|      0|                  rinfo->ssrc, T_printf(ABS(rtime_ts_delta)),
  172|      0|                  T_printf((uint64_t)rinfo->ts - (uint64_t)jdp->jss.prev_ts));
  173|      0|#endif
  174|      0|                jdp->jss.ts_jcount++;
  175|      0|                goto saveandexit;
  176|      0|            }
  177|      0|#endif
  178|      0|            wrcorr = 0;
  179|      0|        }
  180|      0|        dval = (rtime_ts - ((uint64_t)rinfo->ts + wrcorr)) -
  181|      0|          (jdp->jss.prev_rtime_ts - (uint64_t)jdp->jss.prev_ts);
  182|      0|#if DEBUG_TIMESTAMP_RESET
  183|      0|        if (dval > 10000)
  ------------------
  |  Branch (183:13): [True: 0, False: 0]
  ------------------
  184|      0|            LOGD_IF_NOT_NULL(rlog, "##### LARGE VALUE #####" SSRC_FMT ",%lld,%llu,%u,%llu,%u,%llu,%lld",
  ------------------
  |  |  103|      0|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|      0|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  184|      0|            LOGD_IF_NOT_NULL(rlog, "##### LARGE VALUE #####" SSRC_FMT ",%lld,%llu,%u,%llu,%u,%llu,%lld",
  |  |  |  |  |  |  |  |  185|      0|              rinfo->ssrc, jdp->jss.pcount, T_printf(rtime_ts), rinfo->ts,
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  186|      0|              T_printf(jdp->jss.prev_rtime_ts), jdp->jss.prev_ts,
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  187|      0|              T_printf(wrcorr), T_printf(dval));
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                             T_printf(wrcorr), T_printf(dval));
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|      0|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|      0|    }
  ------------------
  185|      0|              rinfo->ssrc, jdp->jss.pcount, T_printf(rtime_ts), rinfo->ts,
  186|      0|              T_printf(jdp->jss.prev_rtime_ts), jdp->jss.prev_ts,
  187|      0|              T_printf(wrcorr), T_printf(dval));
  188|      0|#endif
  189|      0|        jdp->jss.jlast = jdp->jss.jlast + (double)(ABS(dval) - jdp->jss.jlast) / 16.0;
  ------------------
  |  |   42|      0|#define ABS(x)          ((x) > 0 ? (x) : (-x))
  |  |  ------------------
  |  |  |  Branch (42:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  190|      0|        if (jdp->jss.jlast > jdp->jss.jmax) {
  ------------------
  |  Branch (190:13): [True: 0, False: 0]
  ------------------
  191|      0|            jdp->jss.jmax = jdp->jss.jlast;
  192|      0|        }
  193|      0|        jdp->jss.jtotal += jdp->jss.jlast;
  194|      0|    }
  195|    400|    RTPP_DBGCODE(analyze > 1) {
  ------------------
  |  |   86|    400|#define RTPP_DBGCODE(x) if (_DCOND_##x)
  |  |  ------------------
  |  |  |  |   84|    400|#define _DCOND_analyze    RTPP_DEBUG_analyze
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|    400|# define RTPP_DEBUG_analyze     RTPP_DBG_NO
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   34|    400|#define RTPP_DBG_NO	0
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (86:29): [Folded, False: 400]
  |  |  ------------------
  ------------------
  196|      0|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT ",%lld,%llu,%u,%f", rinfo->ssrc, jdp->jss.pcount,
  ------------------
  |  |  103|      0|    if ((log) != NULL) { \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  ------------------
  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|#define RTPP_LOG(log, args...) CALL_METHOD((log), genwrite, __FUNCTION__, \
  |  |  |  |  |  |  |  |   57|       |  __LINE__, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|      0|        RTPP_LOG((log), RTPP_LOG_DBUG, ## args); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   44|      0|#define	RTPP_LOG_DBUG	LOG_DEBUG
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CALL_METHOD(obj, method, args...) (obj)->method(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  196|      0|        LOGD_IF_NOT_NULL(rlog, SSRC_FMT ",%lld,%llu,%u,%f", rinfo->ssrc, jdp->jss.pcount,
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   31|      0|#define SSRC_FMT "0x%.8X"
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  197|      0|          T_printf(rtime_ts), rinfo->ts, jdp->jss.jlast);
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|      0|#define T_printf(val) _Generic((val), \
  |  |  |  |  |  |  |  |  |  |   40|      0|    uint64_t: (unsigned long long)(val), \
  |  |  |  |  |  |  |  |  |  |   41|      0|    int64_t: (long long)(val) \
  |  |  |  |  |  |  |  |  |  |   42|      0|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   57|      0|  __LINE__, ## args)
  |  |  ------------------
  |  |  105|      0|    }
  ------------------
  197|      0|          T_printf(rtime_ts), rinfo->ts, jdp->jss.jlast);
  198|      0|    }
  199|    400|    jdp->jss.pcount++;
  200|    400|saveandexit:
  201|    400|    if (rinfo->rtp_profile->pt_kind == RTP_PTK_AUDIO) {
  ------------------
  |  Branch (201:9): [True: 400, False: 0]
  ------------------
  202|    400|        CALL_SMETHOD(jdp->ts_dedup, push, &rinfo->ts);
  ------------------
  |  |  156|    400|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  ------------------
  |  |  |  |  154|    400|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|    400|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  119|    400|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  120|    400|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  121|    400|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  122|    400|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  123|    400|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  124|    400|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  125|    400|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  126|    400|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  127|    400|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  128|    400|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  129|    400|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  130|    400|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  131|    400|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  132|    400|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  133|    400|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  134|    400|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  135|    400|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  136|    400|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  137|    400|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  138|    400|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  139|    400|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  140|    400|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  141|    400|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  142|    400|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  143|    400|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  144|    400|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  145|    400|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  146|    400|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  147|    400|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  148|    400|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  149|    400|)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|    400|    }
  204|    400|    jdp->jss.prev_rtime_ts = rtime_ts;
  205|    400|    jdp->jss.prev_ts = rinfo->ts;
  206|    400|}
rtp_analyze.c:rtp_dtime2time_ts64:
   96|    437|{
   97|       |
   98|    437|    return (uint64_t)(dtime * (double)ts_rate);
   99|    437|}
rtp_analyze.c:rtp_ts2dtime:
   89|    486|{
   90|       |
   91|    486|    return ((double)ts) / ((double)ts_rate);
   92|    486|}

rtp_packet_alloc:
   79|    635|{
   80|    635|    struct rtp_packet_full *pkt;
   81|       |
   82|    635|    pkt = rtpp_rzmalloc(sizeof(*pkt), PVT_RCOFFS(pkt));
  ------------------
  |  |  165|    635|#define PVT_RCOFFS(pvtp) (offsetof(typeof(*(pvtp)), pub) + offsetof(typeof((pvtp)->pub), rcnt))
  ------------------
   83|    635|    if (pkt == NULL) {
  ------------------
  |  Branch (83:9): [True: 0, False: 635]
  ------------------
   84|      0|        return (NULL);
   85|      0|    }
   86|       |
   87|    635|    return &(pkt->pub);
   88|    635|}
rtp_packet_parse:
  139|    635|{
  140|    635|    struct rtp_packet_full *pkt_full;
  141|    635|    struct rtp_info *rinfo;
  142|       |
  143|    635|    if (pkt->parse_result != RTP_PARSER_NOTPARSED) {
  ------------------
  |  Branch (143:9): [True: 0, False: 635]
  ------------------
  144|      0|        return (pkt->parse_result);
  145|      0|    }
  146|    635|    assert(pkt->parsed == NULL);
  ------------------
  |  Branch (146:5): [True: 0, False: 635]
  |  Branch (146:5): [True: 635, False: 0]
  ------------------
  147|    635|    pkt_full = (void *)pkt;
  148|    635|    rinfo = &(pkt_full->pvt.rinfo);
  149|    635|    if (rtp_packet_is_rtcp(pkt)) {
  ------------------
  |  Branch (149:9): [True: 7, False: 628]
  ------------------
  150|      7|        pkt->parse_result = RTP_PARSER_ISRTCP;
  151|      7|        return (pkt->parse_result);
  152|      7|    }
  153|    628|    pkt->parse_result = rtp_packet_parse_raw(pkt->data.buf, pkt->size, rinfo);
  154|    628|    if (pkt->parse_result == RTP_PARSER_OK) {
  ------------------
  |  Branch (154:9): [True: 539, False: 89]
  ------------------
  155|    539|        pkt->parsed = rinfo;
  156|    539|    }
  157|    628|    return (pkt->parse_result);
  158|    635|}
rtp_packet_is_rtcp:
  165|    635|{
  166|    635|    if (pkt->size < 2)
  ------------------
  |  Branch (166:9): [True: 2, False: 633]
  ------------------
  167|      2|        return false;
  168|       |
  169|    633|    uint8_t version = (pkt->data.buf[0] >> 6) & 0b11;
  170|    633|    uint8_t packet_type = pkt->data.buf[1];
  171|       |
  172|       |    // Version should be 2 and RTCP packet types are in the range 200-213
  173|       |    // https://www.iana.org/assignments/rtp-parameters/rtp-parameters.txt
  174|    633|    if (version == 2 && packet_type >= RTCP_PT_SR && packet_type <= RTCP_PR_SNM)
  ------------------
  |  |  160|  1.25k|#define RTCP_PT_SR  200
  ------------------
                  if (version == 2 && packet_type >= RTCP_PT_SR && packet_type <= RTCP_PR_SNM)
  ------------------
  |  |  161|     79|#define RTCP_PR_SNM 213
  ------------------
  |  Branch (174:9): [True: 625, False: 8]
  |  Branch (174:25): [True: 79, False: 546]
  |  Branch (174:54): [True: 7, False: 72]
  ------------------
  175|      7|        return true;
  176|    626|    return false;
  177|    633|}

rtpp_analyzer_ctor:
   72|      1|{
   73|      1|    struct rtpp_analyzer_priv *pvt;
   74|      1|    struct rtpp_analyzer *rap;
   75|       |
   76|      1|    pvt = rtpp_rzmalloc(sizeof(struct rtpp_analyzer_priv), PVT_RCOFFS(pvt));
  ------------------
  |  |  165|      1|#define PVT_RCOFFS(pvtp) (offsetof(typeof(*(pvtp)), pub) + offsetof(typeof((pvtp)->pub), rcnt))
  ------------------
   77|      1|    if (pvt == NULL) {
  ------------------
  |  Branch (77:9): [True: 0, False: 1]
  ------------------
   78|      0|        return (NULL);
   79|      0|    }
   80|      1|    rap = &pvt->pub;
   81|      1|    if (rtpp_stats_init(&pvt->rstat) != 0) {
  ------------------
  |  Branch (81:9): [True: 0, False: 1]
  ------------------
   82|      0|        goto e0;
   83|      0|    }
   84|      1|    pvt->log = log;
   85|      1|    RTPP_OBJ_INCREF(log);
  ------------------
  |  |  173|      1|#define RTPP_OBJ_INCREF(obj) RC_INCREF((obj)->rcnt)
  |  |  ------------------
  |  |  |  |   82|      1|#define RC_INCREF(rp, ...) _RC_CHOOSE(_RC_REF, __VA_ARGS__)(rp, incref, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   79|      1|#define _RC_CHOOSE(NAME, ...) _GET_ARG_3(__VA_ARGS__, NAME##_2, NAME##_1,)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   78|       |#define _GET_ARG_3(_1, _2, _3, ...) _3
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   80|      1|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      1|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  154|      1|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  118|      1|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  119|      1|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  120|      1|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  121|      1|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  122|      1|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  123|      1|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  124|      1|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  125|      1|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  126|      1|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  127|      1|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  128|      1|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  129|      1|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  130|      1|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  131|      1|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  132|      1|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  133|      1|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  134|      1|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  135|      1|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  136|      1|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  137|      1|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  138|      1|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  139|      1|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  140|      1|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  141|      1|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  142|      1|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  143|      1|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  144|      1|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  145|      1|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  146|      1|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  147|      1|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  148|      1|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  149|      1|)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   80|      1|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   40|      1|#define HEREVAL  ({static const struct rtpp_codeptr _here = {.fname = __FILE__, .linen = __LINE__, .funcn = __func__}; &_here;})
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|      1|    PUBINST_FININIT(&pvt->pub, pvt, rtpp_analyzer_dtor);
  ------------------
  |  |   76|      1|    RTPP_OBJ_DTOR_ATTACH_s((pub_inst), (rtpp_refcnt_dtor_t)(dtor), \
  |  |  ------------------
  |  |  |  |  177|      1|#define RTPP_OBJ_DTOR_ATTACH_s(obj, f, p) CALL_SMETHOD((obj)->rcnt, attach_nc, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      1|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      1|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  118|      1|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  |  |  |  |  119|      1|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  |  |  |  |  120|      1|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  |  |  |  |  121|      1|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  |  |  |  |  122|      1|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  |  |  |  |  123|      1|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  |  |  |  |  124|      1|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  |  |  |  |  125|      1|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  |  |  |  |  126|      1|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  |  |  |  |  127|      1|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  |  |  |  |  128|      1|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  |  |  |  |  129|      1|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  |  |  |  |  130|      1|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  |  |  |  |  131|      1|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  |  |  |  |  132|      1|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  |  |  |  |  133|      1|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  |  |  |  |  134|      1|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  |  |  |  |  135|      1|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  |  |  |  |  136|      1|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  |  |  |  |  137|      1|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  |  |  |  |  138|      1|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  |  |  |  |  139|      1|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  |  |  |  |  140|      1|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  |  |  |  |  141|      1|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  |  |  |  |  142|      1|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  |  |  |  |  143|      1|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  |  |  |  |  144|      1|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  |  |  |  |  145|      1|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  |  |  |  |  146|      1|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  |  |  |  |  147|      1|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  |  |  |  |  148|      1|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  |  |  |  |  149|      1|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  178|      1|  (rtpp_refcnt_dtor_t)(f), (p))
  |  |  ------------------
  |  |   77|      1|      pvt_inst);
  ------------------
   87|      1|    return (rap);
   88|      0|e0:
   89|      0|    RTPP_OBJ_DECREF(&(pvt->pub));
  ------------------
  |  |  174|      0|#define RTPP_OBJ_DECREF(obj) RC_DECREF((obj)->rcnt)
  |  |  ------------------
  |  |  |  |   83|      0|#define RC_DECREF(rp, ...) _RC_CHOOSE(_RC_REF, __VA_ARGS__)(rp, decref, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   79|      0|#define _RC_CHOOSE(NAME, ...) _GET_ARG_3(__VA_ARGS__, NAME##_2, NAME##_1,)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   78|       |#define _GET_ARG_3(_1, _2, _3, ...) _3
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   80|      0|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      0|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  154|      0|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  118|      0|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  119|      0|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  120|      0|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  121|      0|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  122|      0|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  123|      0|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  127|      0|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  128|      0|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  129|      0|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  132|      0|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  133|      0|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  134|      0|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  135|      0|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  136|      0|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  137|      0|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  138|      0|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  139|      0|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  140|      0|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  141|      0|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  142|      0|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  143|      0|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  144|      0|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  145|      0|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  146|      0|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  147|      0|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  148|      0|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  149|      0|)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   80|      0|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   40|      0|#define HEREVAL  ({static const struct rtpp_codeptr _here = {.fname = __FILE__, .linen = __LINE__, .funcn = __func__}; &_here;})
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|       |    return (NULL);
   91|      1|}
rtpp_analyzer.c:rtpp_analyzer_update:
   95|    635|{
   96|    635|    struct rtpp_analyzer_priv *pvt;
   97|    635|    enum update_rtpp_stats_rval rval;
   98|       |
   99|    635|    PUB2PVT(rap, pvt);
  ------------------
  |  |  169|    635|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
  100|    635|    if (rtp_packet_parse(pkt) != RTP_PARSER_OK) {
  ------------------
  |  Branch (100:9): [True: 96, False: 539]
  ------------------
  101|     96|        pvt->pecount++;
  102|     96|        return (UPDATE_ERR);
  103|     96|    }
  104|    539|    rval = update_rtpp_stats(pvt->log, &(pvt->rstat), &(pkt->data.header),
  105|    539|      pkt->parsed, pkt->rtime.mono);
  106|    539|    if (rval == UPDATE_ERR) {
  ------------------
  |  Branch (106:9): [True: 50, False: 489]
  ------------------
  107|     50|        pvt->aecount++;
  108|     50|    }
  109|    539|    pvt->rstat.last.pt = pkt->data.header.pt;
  110|    539|    return (rval);
  111|    635|}

rtpp_log_ctor:
   73|      1|{
   74|      1|    struct rtpp_log_priv *pvt;
   75|       |
   76|      1|    pvt = rtpp_rzmalloc(sizeof(struct rtpp_log_priv), PVT_RCOFFS(pvt));
  ------------------
  |  |  165|      1|#define PVT_RCOFFS(pvtp) (offsetof(typeof(*(pvtp)), pub) + offsetof(typeof((pvtp)->pub), rcnt))
  ------------------
   77|      1|    if (pvt == NULL) {
  ------------------
  |  Branch (77:9): [True: 0, False: 1]
  ------------------
   78|      0|        return (NULL);
   79|      0|    }
   80|      1|    pvt->pub.genwrite = rtpp_log_obj_write_early;
   81|      1|    pvt->pub.errwrite = rtpp_log_obj_ewrite_early;
   82|      1|    pvt->pub.setlevel = rtpp_log_obj_setlevel_early;
   83|      1|    pvt->pub.start = rtpp_log_obj_start;
   84|      1|    pvt->app = app;
   85|      1|    pvt->call_id = call_id;
   86|      1|    pvt->flags = flags;
   87|      1|    pvt->level = -1;
   88|      1|    RTPP_OBJ_DTOR_ATTACH_s(&pvt->pub, (rtpp_refcnt_dtor_t)&rtpp_log_obj_dtor,
  ------------------
  |  |  177|      1|#define RTPP_OBJ_DTOR_ATTACH_s(obj, f, p) CALL_SMETHOD((obj)->rcnt, attach_nc, \
  |  |  ------------------
  |  |  |  |  156|      1|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      1|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  118|      1|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  |  |  119|      1|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  |  |  120|      1|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  |  |  121|      1|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  |  |  122|      1|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  |  |  123|      1|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  |  |  124|      1|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  |  |  125|      1|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  |  |  126|      1|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  |  |  127|      1|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  |  |  128|      1|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  |  |  129|      1|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  |  |  130|      1|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  |  |  131|      1|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  |  |  132|      1|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  |  |  133|      1|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  |  |  134|      1|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  |  |  135|      1|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  |  |  136|      1|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  |  |  137|      1|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  |  |  138|      1|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  |  |  139|      1|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  |  |  140|      1|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  |  |  141|      1|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  |  |  142|      1|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  |  |  143|      1|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  |  |  144|      1|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  |  |  145|      1|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  |  |  146|      1|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  |  |  147|      1|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  |  |  148|      1|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  |  |  149|      1|)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      1|  (rtpp_refcnt_dtor_t)(f), (p))
  ------------------
   89|      1|      pvt);
   90|      1|    return (&pvt->pub);
   91|      1|}
rtpp_log_obj.c:rtpp_log_obj_write_early:
  155|    541|{
  156|    541|    va_list ap;
  157|    541|    struct rtpp_log_priv *pvt;
  158|       |
  159|    541|    PUB2PVT(self, pvt);
  ------------------
  |  |  169|    541|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
  160|    541|    if (level > pvt->level)
  ------------------
  |  Branch (160:9): [True: 541, False: 0]
  ------------------
  161|    541|        return;
  162|      0|    fprintf(stderr, "%s: ", fname);
  163|      0|    va_start(ap, fmt);
  164|      0|    vfprintf(stderr, fmt, ap);
  165|      0|    va_end(ap);
  166|      0|    fprintf(stderr, "\n");
  167|       |    fflush(stderr);
  168|      0|    return;
  169|    541|}

rtpp_zmalloc:
   63|     21|{
   64|     21|    void *rval;
   65|       |
   66|     21|#if !defined(RTPP_CHECK_LEAKS)
   67|     21|    rval = rtpp_aligned_malloc(msize, rtpp_refcnt_oalign);
   68|       |#else
   69|       |    rval = rtpp_memdeb_malloc(msize, memdeb_p, mlp);
   70|       |#endif
   71|     21|    if (rval != NULL) {
  ------------------
  |  Branch (71:9): [True: 21, False: 0]
  ------------------
   72|     21|        memset(rval, '\0', msize);
   73|     21|    }
   74|     21|    return (rval);
   75|     21|}
rtpp_rzmalloc:
   86|    647|{
   87|    647|    void *rval;
   88|    647|    struct rtpp_refcnt *rcnt;
   89|    647|    size_t pad_size, asize, alignment;
   90|    647|    void *rco;
   91|       |
   92|    647|    RTPP_DBG_ASSERT(msize >= rcntp_offs + sizeof(struct rtpp_refcnt *));
   93|    647|    alignment = rtpp_refcnt_oalign;
   94|    647|    RTPP_DBG_ASSERT((alignment & (alignment - 1)) == 0);
   95|    647|    pad_size = (alignment - (msize & (alignment - 1))) & (alignment - 1);
   96|    647|    asize = msize + pad_size + rtpp_refcnt_osize;
   97|    647|#if !defined(RTPP_CHECK_LEAKS)
   98|    647|    rval = rtpp_aligned_malloc(asize, alignment);
   99|       |#else
  100|       |    rval = rtpp_memdeb_malloc(asize, memdeb_p, mlp);
  101|       |#endif
  102|    647|    if (rval == NULL) {
  ------------------
  |  Branch (102:9): [True: 0, False: 647]
  ------------------
  103|      0|        return (NULL);
  104|      0|    }
  105|    647|    memset(rval, '\0', asize);
  106|    647|    rco = (char *)rval + msize + pad_size;
  107|    647|    rcnt = rtpp_refcnt_ctor_pa(rco, rval);
  108|    647|    *PpP(rval, rcntp_offs, struct rtpp_refcnt **) = rcnt;
  ------------------
  |  |   77|    647|#define PpP(p1, p2, type) (type)(((char *)p1) + ((size_t)p2))
  ------------------
  109|       |
  110|    647|    return (rval);
  111|    647|}
rtpp_mallocs.c:rtpp_aligned_malloc:
   43|    668|{
   44|    668|    void *rval;
   45|       |
   46|    668|    if (alignment < sizeof(void *)) {
  ------------------
  |  Branch (46:9): [True: 0, False: 668]
  ------------------
   47|      0|        alignment = sizeof(void *);
   48|      0|    }
   49|    668|    RTPP_DBG_ASSERT((alignment & (alignment - 1)) == 0);
   50|    668|    if (posix_memalign(&rval, alignment, msize) != 0) {
  ------------------
  |  Branch (50:9): [True: 0, False: 668]
  ------------------
   51|      0|        return (NULL);
   52|      0|    }
   53|    668|    return (rval);
   54|    668|}

rtpp_refcnt_ctor_pa:
  165|    647|{
  166|    647|    struct rtpp_refcnt_priv *pvt;
  167|       |
  168|    647|    pvt = (struct rtpp_refcnt_priv *)pap;
  169|    647|    if (data != NULL) {
  ------------------
  |  Branch (169:9): [True: 647, False: 0]
  ------------------
  170|    647|#if !defined(RTPP_CHECK_LEAKS)
  171|    647|        pvt->dtors[0] = DTOR_PAIR_INIT(free, data);
  ------------------
  |  |  129|    647|#define DTOR_PAIR_INIT(fn, fd) (struct dtor_pair){.f=(fn), .data=(fd)}
  ------------------
  172|       |#else
  173|       |        pvt->dtors[0] = DTOR_PAIR_INIT(rtpp_refcnt_free, data);
  174|       |#endif
  175|    647|    } else {
  176|      0|        atomic_init(&pvt->ulen, -1);
  177|      0|    }
  178|       |#if defined(RTPP_DEBUG)
  179|       |    pvt->pub.smethods = rtpp_refcnt_smethods;
  180|       |#endif
  181|    647|    return (&pvt->pub);
  182|    647|}
rtpp_refcnt.c:rtpp_refcnt_incref:
  233|      1|{
  234|      1|    struct rtpp_refcnt_priv *pvt;
  235|      1|    MAYBE_UNUSED int oldcnt;
  ------------------
  |  |  196|      1|#define MAYBE_UNUSED [[maybe_unused]]
  ------------------
  236|       |
  237|      1|    PUB2PVT(pub, pvt);
  ------------------
  |  |  169|      1|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
  238|      1|    RTPP_DBGCODE() {
  ------------------
  |  |   86|      1|#define RTPP_DBGCODE(x) if (_DCOND_##x)
  |  |  ------------------
  |  |  |  |   77|      1|#define _DCOND_ RTPP_DBG_NO
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      1|#define RTPP_DBG_NO	0
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (34:21): [Folded, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      0|        oldcnt = atomic_load_explicit(&pvt->cnt, memory_order_relaxed);
  240|      0|        RTPP_DBG_ASSERT(oldcnt >= 0 && oldcnt < RC_ABS_MAX);
  241|      0|    }
  242|      1|    if (pvt->shared) {
  ------------------
  |  Branch (242:9): [True: 0, False: 1]
  ------------------
  243|      0|        oldcnt = atomic_fetch_add_explicit(&pvt->cnt, 1, memory_order_relaxed);
  244|      1|    } else {
  245|      1|        oldcnt = 0;
  246|      1|        pvt->shared = 1;
  247|      1|        atomic_store_explicit(&pvt->cnt, 1, memory_order_release);
  248|      1|    }
  249|      1|#if RTPP_DEBUG_refcnt
  250|      1|    if (pvt->trace == 1) {
  ------------------
  |  Branch (250:9): [True: 0, False: 1]
  ------------------
  251|       |#ifdef RTPP_DEBUG
  252|       |        char *dbuf;
  253|       |        rtpp_memdeb_asprintf(&dbuf, MEMDEB_SYM, mlp,
  254|       |          CODEPTR_FMT(": rtpp_refcnt(%p, %u).incref()", mlp, pub, oldcnt+1));
  255|       |        if (dbuf != NULL) {
  256|       |            rtpp_stacktrace_print(dbuf);
  257|       |            free(dbuf);
  258|       |        }
  259|       |#else
  260|      0|        fprintf(stderr, CODEPTR_FMT(": rtpp_refcnt(%p, %u).incref()\n", mlp, pub, oldcnt+1));
  ------------------
  |  |   30|      0|#define CODEPTR_FMT(fmt, mlp, args...) ("%s+%d, %s()" fmt), (mlp)->fname, (mlp)->linen, (mlp)->funcn, ## args
  ------------------
  261|      0|#endif
  262|      0|    }
  263|      1|#endif
  264|      1|    RTPP_DBG_ASSERT(oldcnt >= 0);
  265|      1|}
rtpp_refcnt.c:rtpp_refcnt_decref:
  290|    635|{
  291|    635|    struct rtpp_refcnt_priv *pvt;
  292|    635|    int oldcnt;
  293|       |
  294|    635|    PUB2PVT(pub, pvt);
  ------------------
  |  |  169|    635|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
  295|    635|    RTPP_DBGCODE() {
  ------------------
  |  |   86|    635|#define RTPP_DBGCODE(x) if (_DCOND_##x)
  |  |  ------------------
  |  |  |  |   77|    635|#define _DCOND_ RTPP_DBG_NO
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    635|#define RTPP_DBG_NO	0
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (34:21): [Folded, False: 635]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|      0|        oldcnt = atomic_load_explicit(&pvt->cnt, memory_order_relaxed);
  297|      0|        RTPP_DBG_ASSERT(oldcnt >= 0 && oldcnt < RC_ABS_MAX);
  298|      0|    }
  299|    635|#if RTPP_DEBUG_refcnt
  300|       |    /*
  301|       |     * Fetch flags before decrement, otherwise we can decrement and then
  302|       |     * somebody decrements it and deallocates. Atomic is not needed since
  303|       |     * this initialized at the init time.
  304|       |     */
  305|    635|    unsigned int trace = pvt->trace;
  306|    635|#endif
  307|    635|    if (pvt->shared) {
  ------------------
  |  Branch (307:9): [True: 0, False: 635]
  ------------------
  308|      0|        oldcnt = atomic_fetch_sub_explicit(&pvt->cnt, 1, memory_order_release);
  309|    635|    } else {
  310|    635|        oldcnt = 0;
  311|    635|    }
  312|    635|#if RTPP_DEBUG_refcnt
  313|    635|    if (trace) {
  ------------------
  |  Branch (313:9): [True: 0, False: 635]
  ------------------
  314|       |#ifdef RTPP_DEBUG
  315|       |        char *dbuf;
  316|       |        rtpp_memdeb_asprintf(&dbuf, MEMDEB_SYM, mlp,
  317|       |          CODEPTR_FMT(": rtpp_refcnt(%p, %u).decref()", mlp, pub, oldcnt+1));
  318|       |        if (dbuf != NULL) {
  319|       |            rtpp_stacktrace_print(dbuf);
  320|       |            free(dbuf);
  321|       |        }
  322|       |#else
  323|      0|        fprintf(stderr, CODEPTR_FMT(": rtpp_refcnt(%p, %u).decref()\n", mlp, pub, oldcnt+1));
  ------------------
  |  |   30|      0|#define CODEPTR_FMT(fmt, mlp, args...) ("%s+%d, %s()" fmt), (mlp)->fname, (mlp)->linen, (mlp)->funcn, ## args
  ------------------
  324|      0|#endif
  325|      0|    }
  326|    635|#endif
  327|    635|    RTPP_DBG_ASSERT(oldcnt >= 0);
  328|    635|    if (oldcnt == 0) {
  ------------------
  |  Branch (328:9): [True: 635, False: 0]
  ------------------
  329|    635|        if (pvt->shared) {
  ------------------
  |  Branch (329:13): [True: 0, False: 635]
  ------------------
  330|      0|            atomic_thread_fence(memory_order_acquire);
  331|      0|        }
  332|    635|        int ulen = atomic_load_explicit(&pvt->ulen, memory_order_relaxed);
  333|  1.27k|        for (int i = ulen; i >= 0; i--) {
  ------------------
  |  Branch (333:28): [True: 635, False: 635]
  ------------------
  334|    635|            struct dtor_pair *dp = &pvt->dtors[i];
  335|    635|#if RTPP_DEBUG_refcnt
  336|    635|            if (trace) {
  ------------------
  |  Branch (336:17): [True: 0, False: 635]
  ------------------
  337|      0|                Dl_info info;
  338|      0|                if (dladdr(dp->f, &info) && info.dli_sname != NULL)
  ------------------
  |  Branch (338:21): [True: 0, False: 0]
  |  Branch (338:45): [True: 0, False: 0]
  ------------------
  339|      0|                    fprintf(stderr, "calling destructor %s@<%p>(%p)\n", info.dli_sname,
  340|      0|                      dp->f, dp->data);
  341|      0|                else
  342|      0|                    fprintf(stderr, "calling destructor @<%p>(%p)\n", dp->f, dp->data);
  343|      0|            }
  344|    635|#endif
  345|    635|            if (i == 0)
  ------------------
  |  Branch (345:17): [True: 635, False: 0]
  ------------------
  346|    635|                rtpp_refcnt_fin(pub);
  347|    635|            if (dp->f != NULL) {
  ------------------
  |  Branch (347:17): [True: 635, False: 0]
  ------------------
  348|    635|                dp->f(dp->data);
  349|    635|            } else {
  350|      0|                struct rtpp_refcnt *other = dp->rcnt;
  351|      0|                rtpp_refcnt_decref(other, mlp);
  352|      0|            }
  353|    635|        }
  354|    635|    }
  355|    635|}
rtpp_refcnt.c:rtpp_refcnt_attach:
  187|     12|{
  188|     12|    struct rtpp_refcnt_priv *pvt;
  189|       |
  190|     12|    PUB2PVT(pub, pvt);
  ------------------
  |  |  169|     12|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
  191|     12|    int ulen = atomic_fetch_add_explicit(&pvt->ulen, 1, memory_order_relaxed) + 1;
  192|     12|    if (ulen >= MAX_DTORS) {
  ------------------
  |  |   32|     12|#define MAX_DTORS 24
  ------------------
  |  Branch (192:9): [True: 0, False: 12]
  ------------------
  193|      0|        atomic_fetch_sub_explicit(&pvt->ulen, 1, memory_order_relaxed);
  194|      0|        return -1;
  195|      0|    }
  196|     12|    pvt->dtors[ulen] = DTOR_PAIR_INIT(dtor_f, data);
  ------------------
  |  |  129|     12|#define DTOR_PAIR_INIT(fn, fd) (struct dtor_pair){.f=(fn), .data=(fd)}
  ------------------
  197|     12|    return 0;
  198|     12|}
rtpp_refcnt.c:rtpp_refcnt_attach_nc:
  203|     12|{
  204|     12|    MAYBE_UNUSED int r = rtpp_refcnt_attach(pub, dtor_f, data);
  ------------------
  |  |  196|     12|#define MAYBE_UNUSED [[maybe_unused]]
  ------------------
  205|     12|    RTPP_DBG_ASSERT(r == 0);
  206|     12|}

rtpp_ringbuf_ctor:
   63|     10|{
   64|     10|    struct rtpp_ringbuf_priv *pvt;
   65|       |
   66|     10|    pvt = rtpp_rzmalloc(sizeof(struct rtpp_ringbuf_priv), PVT_RCOFFS(pvt));
  ------------------
  |  |  165|     10|#define PVT_RCOFFS(pvtp) (offsetof(typeof(*(pvtp)), pub) + offsetof(typeof((pvtp)->pub), rcnt))
  ------------------
   67|     10|    if (pvt == NULL) {
  ------------------
  |  Branch (67:9): [True: 0, False: 10]
  ------------------
   68|      0|        goto e0;
   69|      0|    }
   70|     10|    pvt->elements = rtpp_zmalloc(el_size * nelements);
   71|     10|    if (pvt->elements == NULL) {
  ------------------
  |  Branch (71:9): [True: 0, False: 10]
  ------------------
   72|      0|        goto e1;
   73|      0|    }
   74|     10|    pvt->el_size = el_size;
   75|     10|    pvt->nelements = nelements;
   76|     10|    PUBINST_FININIT(&pvt->pub, pvt, rtpp_ringbuf_dtor);
  ------------------
  |  |   76|     10|    RTPP_OBJ_DTOR_ATTACH_s((pub_inst), (rtpp_refcnt_dtor_t)(dtor), \
  |  |  ------------------
  |  |  |  |  177|     10|#define RTPP_OBJ_DTOR_ATTACH_s(obj, f, p) CALL_SMETHOD((obj)->rcnt, attach_nc, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|     10|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|     10|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  118|     10|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  |  |  |  |  119|     10|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  |  |  |  |  120|     10|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  |  |  |  |  121|     10|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  |  |  |  |  122|     10|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  |  |  |  |  123|     10|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  |  |  |  |  124|     10|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  |  |  |  |  125|     10|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  |  |  |  |  126|     10|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  |  |  |  |  127|     10|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  |  |  |  |  128|     10|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  |  |  |  |  129|     10|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  |  |  |  |  130|     10|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  |  |  |  |  131|     10|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  |  |  |  |  132|     10|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  |  |  |  |  133|     10|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  |  |  |  |  134|     10|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  |  |  |  |  135|     10|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  |  |  |  |  136|     10|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  |  |  |  |  137|     10|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  |  |  |  |  138|     10|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  |  |  |  |  139|     10|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  |  |  |  |  140|     10|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  |  |  |  |  141|     10|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  |  |  |  |  142|     10|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  |  |  |  |  143|     10|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  |  |  |  |  144|     10|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  |  |  |  |  145|     10|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  |  |  |  |  146|     10|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  |  |  |  |  147|     10|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  |  |  |  |  148|     10|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  |  |  |  |  149|     10|)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  178|     10|  (rtpp_refcnt_dtor_t)(f), (p))
  |  |  ------------------
  |  |   77|     10|      pvt_inst);
  ------------------
   77|     10|    return (&pvt->pub);
   78|      0|e1:
   79|      0|    RTPP_OBJ_DECREF(&(pvt->pub));
  ------------------
  |  |  174|      0|#define RTPP_OBJ_DECREF(obj) RC_DECREF((obj)->rcnt)
  |  |  ------------------
  |  |  |  |   83|      0|#define RC_DECREF(rp, ...) _RC_CHOOSE(_RC_REF, __VA_ARGS__)(rp, decref, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   79|      0|#define _RC_CHOOSE(NAME, ...) _GET_ARG_3(__VA_ARGS__, NAME##_2, NAME##_1,)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   78|       |#define _GET_ARG_3(_1, _2, _3, ...) _3
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   80|      0|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      0|#define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  154|      0|#define GET_SMETHOD(obj, method) (GET_SMETHODS(obj)->method)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  118|      0|#define GET_SMETHODS(obj) _Generic((obj), \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  119|      0|    struct rtpp_refcnt *: rtpp_refcnt_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  120|      0|    struct rtpp_pearson_perfect *: rtpp_pearson_perfect_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  121|      0|    struct rtpp_netaddr *: rtpp_netaddr_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  122|      0|    struct rtpp_server *: rtpp_server_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  123|      0|    struct rtpp_stats *: rtpp_stats_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|    struct rtpp_timed *: rtpp_timed_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|    struct rtpp_stream *: rtpp_stream_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|    struct rtpp_pcount *: rtpp_pcount_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  127|      0|    struct rtpp_record *: rtpp_record_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  128|      0|    struct rtpp_hash_table *: rtpp_hash_table_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  129|      0|    struct rtpp_weakref *: rtpp_weakref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|    struct rtpp_analyzer *: rtpp_analyzer_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|    struct rtpp_pcnt_strm *: rtpp_pcnt_strm_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  132|      0|    struct rtpp_ttl *: rtpp_ttl_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  133|      0|    struct rtpp_pipe *: rtpp_pipe_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  134|      0|    struct rtpp_ringbuf *: rtpp_ringbuf_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  135|      0|    struct rtpp_sessinfo *: rtpp_sessinfo_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  136|      0|    struct rtpp_rw_lock *: rtpp_rw_lock_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  137|      0|    struct rtpp_proc_servers *: rtpp_proc_servers_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  138|      0|    struct rtpp_proc_wakeup *: rtpp_proc_wakeup_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  139|      0|    struct pproc_manager *: pproc_manager_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  140|      0|    struct rtpp_dtls_conn *: rtpp_dtls_conn_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  141|      0|    struct rtpp_bindaddrs *: rtpp_bindaddrs_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  142|      0|    struct rtpp_socket *: rtpp_socket_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  143|      0|    struct rtpp_session *: rtpp_session_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  144|      0|    struct rtpp_packetport_int *: rtpp_packetport_int_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  145|      0|    struct rtpp_refproxy *: rtpp_refproxy_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  146|      0|    struct rtpp_wref *: rtpp_wref_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  147|      0|    struct rtpc_reply *: rtpc_reply_smethods, \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  148|      0|    struct rtpp_genuid *: rtpp_genuid_smethods \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  149|      0|)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define CALL_SMETHOD(obj, method, args...) GET_SMETHOD(obj, method)(obj, ## args)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   80|      0|#define _RC_REF_1(rp, method) CALL_SMETHOD(rp, method, HEREVAL)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   40|      0|#define HEREVAL  ({static const struct rtpp_codeptr _here = {.fname = __FILE__, .linen = __LINE__, .funcn = __func__}; &_here;})
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      0|e0:
   81|       |    return (NULL);
   82|      0|}
rtpp_ringbuf.c:rtpp_ringbuf_push:
   94|    400|{
   95|    400|    struct rtpp_ringbuf_priv *pvt;
   96|    400|    void *dp;
   97|       |
   98|    400|    PUB2PVT(self, pvt);
  ------------------
  |  |  169|    400|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
   99|    400|    dp = (char *)pvt->elements + (pvt->el_size * pvt->c_elem);
  100|    400|    memcpy(dp, data, pvt->el_size);
  101|    400|    pvt->c_elem++;
  102|    400|    if (pvt->c_elem == pvt->nelements) {
  ------------------
  |  Branch (102:9): [True: 25, False: 375]
  ------------------
  103|     25|        if (pvt->b_full == 0) {
  ------------------
  |  Branch (103:13): [True: 11, False: 14]
  ------------------
  104|     11|            pvt->b_full = 1;
  105|     11|        }
  106|     25|        pvt->c_elem = 0;
  107|     25|    }
  108|    400|}
rtpp_ringbuf.c:rtpp_ringbuf_flush:
  112|    122|{
  113|    122|    struct rtpp_ringbuf_priv *pvt;
  114|       |
  115|       |    PUB2PVT(self, pvt);
  ------------------
  |  |  169|    122|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
  116|    122|    pvt->b_full = 0;
  117|    122|    pvt->c_elem = 0;
  118|    122|}
rtpp_ringbuf.c:rtpp_ringbuf_locate:
  122|    437|{
  123|    437|    struct rtpp_ringbuf_priv *pvt;
  124|    437|    int i, last_el;
  125|    437|    void *dp;
  126|       |
  127|    437|    PUB2PVT(self, pvt);
  ------------------
  |  |  169|    437|  (pvtp) = (typeof(pvtp))((char *)(pubp) - offsetof(typeof(*(pvtp)), pub))
  ------------------
  128|    437|    last_el = (pvt->b_full != 0) ? pvt->nelements : pvt->c_elem;
  ------------------
  |  Branch (128:15): [True: 214, False: 223]
  ------------------
  129|  2.95k|    for (i = 0; i < last_el; i++) {
  ------------------
  |  Branch (129:17): [True: 2.55k, False: 400]
  ------------------
  130|  2.55k|        dp = (char *)pvt->elements + (pvt->el_size * i);
  131|  2.55k|        if (memcmp(dp, data, pvt->el_size) == 0) {
  ------------------
  |  Branch (131:13): [True: 37, False: 2.52k]
  ------------------
  132|     37|            return (i);
  133|     37|        }
  134|  2.55k|    }
  135|    400|    return (-1);
  136|    437|}

