av_hex_dump((uint8_t *)section, section_len);
av_hex_dump(stdout, (uint8_t *)section, section_len);
static void sdt_cb(void *opaque, const uint8_t *section, int section_len){    MpegTSContext *ts = opaque;    SectionHeader h1, *h = &h1;    const uint8_t *p, *p_end, *desc_list_end, *desc_end;    int onid, val, sid, desc_list_len, desc_tag, desc_len, service_type;    char *name, *provider_name;#ifdef DEBUG_SI    printf("SDT:\n");    av_hex_dump((uint8_t *)section, section_len);#endif    p_end = section + section_len - 4;    p = section;    if (parse_section_header(h, &p, p_end) < 0)        return;    if (h->tid != SDT_TID)        return;    onid = get16(&p, p_end);    if (onid < 0)        return;    val = get8(&p, p_end);    if (val < 0)        return;    for(;;) {        sid = get16(&p, p_end);        if (sid < 0)            break;        val = get8(&p, p_end);        if (val < 0)            break;        desc_list_len = get16(&p, p_end) & 0xfff;        if (desc_list_len < 0)            break;        desc_list_end = p + desc_list_len;        if (desc_list_end > p_end)            break;        for(;;) {            desc_tag = get8(&p, desc_list_end);            if (desc_tag < 0)                break;            desc_len = get8(&p, desc_list_end);            desc_end = p + desc_len;            if (desc_end > desc_list_end)                break;#ifdef DEBUG_SI            printf("tag: 0x%02x len=%d\n", desc_tag, desc_len);#endif            switch(desc_tag) {            case 0x48:                service_type = get8(&p, p_end);                if (service_type < 0)                    break;                provider_name = getstr8(&p, p_end);                if (!provider_name)                    break;                name = getstr8(&p, p_end);                if (!name)                    break;                new_service(ts, sid, provider_name, name);                break;            default:                break;            }            p = desc_end;        }        p = desc_list_end;    }    ts->stop_parse = 1;    /* remove filter */    mpegts_close_filter(ts, ts->sdt_filter);    ts->sdt_filter = NULL;}