| 1 | mpegts.c
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 | static int parse_MP4SLDescrTag(MP4DescrParseContext *d, int64_t off, int len)
|
|---|
| 5 | {
|
|---|
| 6 | Mp4Descr *descr = d->active_descr;
|
|---|
| 7 | int predefined;
|
|---|
| 8 | if (!descr)
|
|---|
| 9 | return -1;
|
|---|
| 10 |
|
|---|
| 11 | predefined = avio_r8(&d->pb);
|
|---|
| 12 | if (!predefined) {
|
|---|
| 13 | int lengths;
|
|---|
| 14 | int flags = avio_r8(&d->pb);
|
|---|
| 15 | descr->sl.use_au_start = !!(flags & 0x80);
|
|---|
| 16 | descr->sl.use_au_end = !!(flags & 0x40);
|
|---|
| 17 | descr->sl.use_rand_acc_pt = !!(flags & 0x20);
|
|---|
| 18 | descr->sl.use_padding = !!(flags & 0x08);
|
|---|
| 19 | descr->sl.use_timestamps = !!(flags & 0x04);
|
|---|
| 20 | descr->sl.use_idle = !!(flags & 0x02);
|
|---|
| 21 | descr->sl.timestamp_res = avio_rb32(&d->pb);
|
|---|
| 22 | avio_rb32(&d->pb);
|
|---|
| 23 | descr->sl.timestamp_len = avio_r8(&d->pb);
|
|---|
| 24 | descr->sl.ocr_len = avio_r8(&d->pb);
|
|---|
| 25 | descr->sl.au_len = avio_r8(&d->pb);
|
|---|
| 26 | descr->sl.inst_bitrate_len = avio_r8(&d->pb);
|
|---|
| 27 | lengths = avio_rb16(&d->pb);
|
|---|
| 28 | descr->sl.degr_prior_len = lengths >> 12;
|
|---|
| 29 | descr->sl.au_seq_num_len = (lengths >> 7) & 0x1f;
|
|---|
| 30 | descr->sl.packet_seq_num_len = (lengths >> 2) & 0x1f;
|
|---|
| 31 | } else {
|
|---|
| 32 | av_log_missing_feature(d->s, "Predefined SLConfigDescriptor\n", 0);
|
|---|
| 33 | }
|
|---|
| 34 | return 0;
|
|---|
| 35 | }
|
|---|