diff --git a/format/mp4/boxes.go b/format/mp4/boxes.go index c811b32b..48a228bb 100644 --- a/format/mp4/boxes.go +++ b/format/mp4/boxes.go @@ -226,6 +226,17 @@ func decodeFieldMatrix(d *decode.D, name string) { }) } +func decodeSampleFlags(d *decode.D) { + d.FieldU4("reserved0") + d.FieldU2("is_leading") + d.FieldU2("sample_depends_on") + d.FieldU2("sample_is_depended_on") + d.FieldU2("sample_has_redundancy") + d.FieldU3("sample_padding_value") + d.FieldU1("sample_is_non_sync_sample") + d.FieldU16("sample_degradation_priority") +} + func decodeBoxWithParentData(ctx *decodeContext, d *decode.D, parentData any) { var typ string var dataSize uint64 @@ -946,7 +957,7 @@ func init() { m.defaultSampleSize = int64(d.FieldU32("default_sample_size")) } if defaultSampleFlagsPresent { - d.FieldU32("default_sample_flags") + d.FieldStruct("default_sample_flags", decodeSampleFlags) } if t := ctx.currentTrafBox(); t != nil { @@ -989,7 +1000,7 @@ func init() { dataOffset = d.FieldS32("data_offset") } if firstSampleFlagsPresent { - d.FieldU32("first_sample_flags") + d.FieldStruct("first_sample_flags", decodeSampleFlags) } if sampleCount > maxSampleEntryCount { @@ -1010,7 +1021,7 @@ func init() { sampleSize = int64(d.FieldU32("sample_size")) } if sampleFlagsPresent { - d.FieldU32("sample_flags") + d.FieldStruct("sample_flags", decodeSampleFlags) } if sampleCompositionTimeOffsetsPresent { d.FieldU32("sample_composition_time_offset") @@ -1040,14 +1051,7 @@ func init() { d.FieldU32("default_sample_description_index") d.FieldU32("default_sample_duration") d.FieldU32("default_sample_size") - d.FieldU4("reserved0") - d.FieldU2("is_leading") - d.FieldU2("sample_depends_on") - d.FieldU2("sample_is_depended_on") - d.FieldU2("sample_has_redundancy") - d.FieldU3("sample_padding_value") - d.FieldU1("sample_is_non_sync_sample") - d.FieldU16("sample_degradation_priority") + d.FieldStruct("default_sample_flags", decodeSampleFlags) }, "mfra": decodeBoxes, "tfra": func(_ *decodeContext, d *decode.D) { diff --git a/format/mp4/testdata/dash.fqtest b/format/mp4/testdata/dash.fqtest index 71dbf8db..cb33d5aa 100644 --- a/format/mp4/testdata/dash.fqtest +++ b/format/mp4/testdata/dash.fqtest @@ -337,14 +337,15 @@ $ fq -d mp4 dv dash_audio_init.mp4 0x320|00 00 00 01 |.... | default_sample_description_index: 1 0x320-0x323.7 (4) 0x320| 00 00 04 00 | .... | default_sample_duration: 1024 0x324-0x327.7 (4) 0x320| 00 00 00 00 | .... | default_sample_size: 0 0x328-0x32b.7 (4) -0x320| 00 | . | reserved0: 0 0x32c-0x32c.3 (0.4) -0x320| 00 | . | is_leading: 0 0x32c.4-0x32c.5 (0.2) -0x320| 00 | . | sample_depends_on: 0 0x32c.6-0x32c.7 (0.2) -0x320| 00 | . | sample_is_depended_on: 0 0x32d-0x32d.1 (0.2) -0x320| 00 | . | sample_has_redundancy: 0 0x32d.2-0x32d.3 (0.2) -0x320| 00 | . | sample_padding_value: 0 0x32d.4-0x32d.6 (0.3) -0x320| 00 | . | sample_is_non_sync_sample: 0 0x32d.7-0x32d.7 (0.1) -0x320| 00 00| ..| sample_degradation_priority: 0 0x32e-0x32f.7 (2) + | | | default_sample_flags{}: 0x32c-0x32f.7 (4) +0x320| 00 | . | reserved0: 0 0x32c-0x32c.3 (0.4) +0x320| 00 | . | is_leading: 0 0x32c.4-0x32c.5 (0.2) +0x320| 00 | . | sample_depends_on: 0 0x32c.6-0x32c.7 (0.2) +0x320| 00 | . | sample_is_depended_on: 0 0x32d-0x32d.1 (0.2) +0x320| 00 | . | sample_has_redundancy: 0 0x32d.2-0x32d.3 (0.2) +0x320| 00 | . | sample_padding_value: 0 0x32d.4-0x32d.6 (0.3) +0x320| 00 | . | sample_is_non_sync_sample: 0 0x32d.7-0x32d.7 (0.1) +0x320| 00 00| ..| sample_degradation_priority: 0 0x32e-0x32f.7 (2) | | | tracks[0:1]: 0x330-NA (0) | | | [0]{}: track 0x330-NA (0) | | | id: 1 0x330-NA (0) @@ -412,7 +413,15 @@ $ fq -d mp4 dv dash_audio_1.m4s 0x070| 22 | " | base_data_offset_present: false 0x77.7-0x77.7 (0.1) 0x070| 00 00 00 01 | .... | track_id: 1 0x78-0x7b.7 (4) 0x070| 00 00 00 01| ....| sample_description_index: 1 0x7c-0x7f.7 (4) -0x080|00 00 00 00 |.... | default_sample_flags: 0 0x80-0x83.7 (4) + | | | default_sample_flags{}: 0x80-0x83.7 (4) +0x080|00 |. | reserved0: 0 0x80-0x80.3 (0.4) +0x080|00 |. | is_leading: 0 0x80.4-0x80.5 (0.2) +0x080|00 |. | sample_depends_on: 0 0x80.6-0x80.7 (0.2) +0x080| 00 | . | sample_is_depended_on: 0 0x81-0x81.1 (0.2) +0x080| 00 | . | sample_has_redundancy: 0 0x81.2-0x81.3 (0.2) +0x080| 00 | . | sample_padding_value: 0 0x81.4-0x81.6 (0.3) +0x080| 00 | . | sample_is_non_sync_sample: 0 0x81.7-0x81.7 (0.1) +0x080| 00 00 | .. | sample_degradation_priority: 0 0x82-0x83.7 (2) | | | [1]{}: box 0x84-0x93.7 (16) 0x080| 00 00 00 10 | .... | size: 16 0x84-0x87.7 (4) 0x080| 74 66 64 74 | tfdt | type: "tfdt" (Track fragment decode time) 0x88-0x8b.7 (4) @@ -875,14 +884,15 @@ $ fq -d mp4 dv dash_video_init.mp4 0x0320| 00 00 00 01 | .... | default_sample_description_index: 1 0x323-0x326.7 (4) 0x0320| 00 00 02 00 | .... | default_sample_duration: 512 0x327-0x32a.7 (4) 0x0320| 00 00 00 00 | .... | default_sample_size: 0 0x32b-0x32e.7 (4) -0x0320| 00| .| reserved0: 0 0x32f-0x32f.3 (0.4) -0x0320| 00| .| is_leading: 0 0x32f.4-0x32f.5 (0.2) -0x0320| 00| .| sample_depends_on: 0 0x32f.6-0x32f.7 (0.2) -0x0330|00 |. | sample_is_depended_on: 0 0x330-0x330.1 (0.2) -0x0330|00 |. | sample_has_redundancy: 0 0x330.2-0x330.3 (0.2) -0x0330|00 |. | sample_padding_value: 0 0x330.4-0x330.6 (0.3) -0x0330|00 |. | sample_is_non_sync_sample: 0 0x330.7-0x330.7 (0.1) -0x0330| 00 00| | ..| | sample_degradation_priority: 0 0x331-0x332.7 (2) + | | | default_sample_flags{}: 0x32f-0x332.7 (4) +0x0320| 00| .| reserved0: 0 0x32f-0x32f.3 (0.4) +0x0320| 00| .| is_leading: 0 0x32f.4-0x32f.5 (0.2) +0x0320| 00| .| sample_depends_on: 0 0x32f.6-0x32f.7 (0.2) +0x0330|00 |. | sample_is_depended_on: 0 0x330-0x330.1 (0.2) +0x0330|00 |. | sample_has_redundancy: 0 0x330.2-0x330.3 (0.2) +0x0330|00 |. | sample_padding_value: 0 0x330.4-0x330.6 (0.3) +0x0330|00 |. | sample_is_non_sync_sample: 0 0x330.7-0x330.7 (0.1) +0x0330| 00 00| | ..| | sample_degradation_priority: 0 0x331-0x332.7 (2) | | | tracks[0:1]: 0x333-NA (0) | | | [0]{}: track 0x333-NA (0) | | | id: 1 0x333-NA (0) @@ -952,7 +962,15 @@ $ fq -d mp4 dv dash_video_1.m4s 0x0070| 00 00 00 01| ....| track_id: 1 0x7c-0x7f.7 (4) 0x0080|00 00 00 01 |.... | sample_description_index: 1 0x80-0x83.7 (4) 0x0080| 00 00 02 00 | .... | default_sample_duration: 512 0x84-0x87.7 (4) -0x0080| 00 00 00 00 | .... | default_sample_flags: 0 0x88-0x8b.7 (4) + | | | default_sample_flags{}: 0x88-0x8b.7 (4) +0x0080| 00 | . | reserved0: 0 0x88-0x88.3 (0.4) +0x0080| 00 | . | is_leading: 0 0x88.4-0x88.5 (0.2) +0x0080| 00 | . | sample_depends_on: 0 0x88.6-0x88.7 (0.2) +0x0080| 00 | . | sample_is_depended_on: 0 0x89-0x89.1 (0.2) +0x0080| 00 | . | sample_has_redundancy: 0 0x89.2-0x89.3 (0.2) +0x0080| 00 | . | sample_padding_value: 0 0x89.4-0x89.6 (0.3) +0x0080| 00 | . | sample_is_non_sync_sample: 0 0x89.7-0x89.7 (0.1) +0x0080| 00 00 | .. | sample_degradation_priority: 0 0x8a-0x8b.7 (2) | | | [1]{}: box 0x8c-0x9b.7 (16) 0x0080| 00 00 00 10| ....| size: 16 0x8c-0x8f.7 (4) 0x0090|74 66 64 74 |tfdt | type: "tfdt" (Track fragment decode time) 0x90-0x93.7 (4) diff --git a/format/mp4/testdata/fragmented.fqtest b/format/mp4/testdata/fragmented.fqtest index b9da3782..a78330d5 100644 --- a/format/mp4/testdata/fragmented.fqtest +++ b/format/mp4/testdata/fragmented.fqtest @@ -516,14 +516,15 @@ $ fq -d mp4 dv fragmented.mp4 0x00450| 00| .| default_sample_duration: 0 0x45f-0x462.7 (4) 0x00460|00 00 00 |... | 0x00460| 00 00 00 00 | .... | default_sample_size: 0 0x463-0x466.7 (4) -0x00460| 00 | . | reserved0: 0 0x467-0x467.3 (0.4) -0x00460| 00 | . | is_leading: 0 0x467.4-0x467.5 (0.2) -0x00460| 00 | . | sample_depends_on: 0 0x467.6-0x467.7 (0.2) -0x00460| 00 | . | sample_is_depended_on: 0 0x468-0x468.1 (0.2) -0x00460| 00 | . | sample_has_redundancy: 0 0x468.2-0x468.3 (0.2) -0x00460| 00 | . | sample_padding_value: 0 0x468.4-0x468.6 (0.3) -0x00460| 00 | . | sample_is_non_sync_sample: 0 0x468.7-0x468.7 (0.1) -0x00460| 00 00 | .. | sample_degradation_priority: 0 0x469-0x46a.7 (2) + | | | default_sample_flags{}: 0x467-0x46a.7 (4) +0x00460| 00 | . | reserved0: 0 0x467-0x467.3 (0.4) +0x00460| 00 | . | is_leading: 0 0x467.4-0x467.5 (0.2) +0x00460| 00 | . | sample_depends_on: 0 0x467.6-0x467.7 (0.2) +0x00460| 00 | . | sample_is_depended_on: 0 0x468-0x468.1 (0.2) +0x00460| 00 | . | sample_has_redundancy: 0 0x468.2-0x468.3 (0.2) +0x00460| 00 | . | sample_padding_value: 0 0x468.4-0x468.6 (0.3) +0x00460| 00 | . | sample_is_non_sync_sample: 0 0x468.7-0x468.7 (0.1) +0x00460| 00 00 | .. | sample_degradation_priority: 0 0x469-0x46a.7 (2) | | | [1]{}: box 0x46b-0x48a.7 (32) 0x00460| 00 00 00 20 | ... | size: 32 0x46b-0x46e.7 (4) 0x00460| 74| t| type: "trex" (Track extends defaults) 0x46f-0x472.7 (4) @@ -535,14 +536,15 @@ $ fq -d mp4 dv fragmented.mp4 0x00470| 00| .| default_sample_duration: 0 0x47f-0x482.7 (4) 0x00480|00 00 00 |... | 0x00480| 00 00 00 00 | .... | default_sample_size: 0 0x483-0x486.7 (4) -0x00480| 00 | . | reserved0: 0 0x487-0x487.3 (0.4) -0x00480| 00 | . | is_leading: 0 0x487.4-0x487.5 (0.2) -0x00480| 00 | . | sample_depends_on: 0 0x487.6-0x487.7 (0.2) -0x00480| 00 | . | sample_is_depended_on: 0 0x488-0x488.1 (0.2) -0x00480| 00 | . | sample_has_redundancy: 0 0x488.2-0x488.3 (0.2) -0x00480| 00 | . | sample_padding_value: 0 0x488.4-0x488.6 (0.3) -0x00480| 00 | . | sample_is_non_sync_sample: 0 0x488.7-0x488.7 (0.1) -0x00480| 00 00 | .. | sample_degradation_priority: 0 0x489-0x48a.7 (2) + | | | default_sample_flags{}: 0x487-0x48a.7 (4) +0x00480| 00 | . | reserved0: 0 0x487-0x487.3 (0.4) +0x00480| 00 | . | is_leading: 0 0x487.4-0x487.5 (0.2) +0x00480| 00 | . | sample_depends_on: 0 0x487.6-0x487.7 (0.2) +0x00480| 00 | . | sample_is_depended_on: 0 0x488-0x488.1 (0.2) +0x00480| 00 | . | sample_has_redundancy: 0 0x488.2-0x488.3 (0.2) +0x00480| 00 | . | sample_padding_value: 0 0x488.4-0x488.6 (0.3) +0x00480| 00 | . | sample_is_non_sync_sample: 0 0x488.7-0x488.7 (0.1) +0x00480| 00 00 | .. | sample_degradation_priority: 0 0x489-0x48a.7 (2) | | | [4]{}: box 0x48b-0x4ec.7 (98) 0x00480| 00 00 00 62 | ...b | size: 98 0x48b-0x48e.7 (4) 0x00480| 75| u| type: "udta" (User-data) 0x48f-0x492.7 (4) @@ -693,7 +695,15 @@ $ fq -d mp4 dv fragmented.mp4 0x005b0| 00 00 03| ...| default_sample_duration: 810 0x5bd-0x5c0.7 (4) 0x005c0|2a |* | 0x005c0| 00 00 0d 83 | .... | default_sample_size: 3459 0x5c1-0x5c4.7 (4) -0x005c0| 01 01 00 00 | .... | default_sample_flags: 16842752 0x5c5-0x5c8.7 (4) + | | | default_sample_flags{}: 0x5c5-0x5c8.7 (4) +0x005c0| 01 | . | reserved0: 0 0x5c5-0x5c5.3 (0.4) +0x005c0| 01 | . | is_leading: 0 0x5c5.4-0x5c5.5 (0.2) +0x005c0| 01 | . | sample_depends_on: 1 0x5c5.6-0x5c5.7 (0.2) +0x005c0| 01 | . | sample_is_depended_on: 0 0x5c6-0x5c6.1 (0.2) +0x005c0| 01 | . | sample_has_redundancy: 0 0x5c6.2-0x5c6.3 (0.2) +0x005c0| 01 | . | sample_padding_value: 0 0x5c6.4-0x5c6.6 (0.3) +0x005c0| 01 | . | sample_is_non_sync_sample: 1 0x5c6.7-0x5c6.7 (0.1) +0x005c0| 00 00 | .. | sample_degradation_priority: 0 0x5c7-0x5c8.7 (2) | | | [1]{}: box 0x5c9-0x5dc.7 (20) 0x005c0| 00 00 00 14 | .... | size: 20 0x5c9-0x5cc.7 (4) 0x005c0| 74 66 64| tfd| type: "tfdt" (Track fragment decode time) 0x5cd-0x5d0.7 (4) @@ -719,7 +729,15 @@ $ fq -d mp4 dv fragmented.mp4 0x005e0| 00 00 00 01 | .... | sample_count: 1 0x5e9-0x5ec.7 (4) 0x005e0| 00 00 00| ...| data_offset: 216 0x5ed-0x5f0.7 (4) 0x005f0|d8 |. | -0x005f0| 02 00 00 00 | .... | first_sample_flags: 33554432 0x5f1-0x5f4.7 (4) + | | | first_sample_flags{}: 0x5f1-0x5f4.7 (4) +0x005f0| 02 | . | reserved0: 0 0x5f1-0x5f1.3 (0.4) +0x005f0| 02 | . | is_leading: 0 0x5f1.4-0x5f1.5 (0.2) +0x005f0| 02 | . | sample_depends_on: 2 0x5f1.6-0x5f1.7 (0.2) +0x005f0| 00 | . | sample_is_depended_on: 0 0x5f2-0x5f2.1 (0.2) +0x005f0| 00 | . | sample_has_redundancy: 0 0x5f2.2-0x5f2.3 (0.2) +0x005f0| 00 | . | sample_padding_value: 0 0x5f2.4-0x5f2.6 (0.3) +0x005f0| 00 | . | sample_is_non_sync_sample: 0 0x5f2.7-0x5f2.7 (0.1) +0x005f0| 00 00 | .. | sample_degradation_priority: 0 0x5f3-0x5f4.7 (2) | | | samples[0:1]: 0x5f5-NA (0) | | | [0]{}: sample 0x5f5-NA (0) | | | [2]{}: box 0x5f5-0x654.7 (96) @@ -746,7 +764,15 @@ $ fq -d mp4 dv fragmented.mp4 0x00610|00 00 00 04 ed |..... | 0x00610| 00 00 04 00 | .... | default_sample_duration: 1024 0x615-0x618.7 (4) 0x00610| 00 00 00 ce | .... | default_sample_size: 206 0x619-0x61c.7 (4) -0x00610| 02 00 00| ...| default_sample_flags: 33554432 0x61d-0x620.7 (4) + | | | default_sample_flags{}: 0x61d-0x620.7 (4) +0x00610| 02 | . | reserved0: 0 0x61d-0x61d.3 (0.4) +0x00610| 02 | . | is_leading: 0 0x61d.4-0x61d.5 (0.2) +0x00610| 02 | . | sample_depends_on: 2 0x61d.6-0x61d.7 (0.2) +0x00610| 00 | . | sample_is_depended_on: 0 0x61e-0x61e.1 (0.2) +0x00610| 00 | . | sample_has_redundancy: 0 0x61e.2-0x61e.3 (0.2) +0x00610| 00 | . | sample_padding_value: 0 0x61e.4-0x61e.6 (0.3) +0x00610| 00 | . | sample_is_non_sync_sample: 0 0x61e.7-0x61e.7 (0.1) +0x00610| 00| .| sample_degradation_priority: 0 0x61f-0x620.7 (2) 0x00620|00 |. | | | | [1]{}: box 0x621-0x634.7 (20) 0x00620| 00 00 00 14 | .... | size: 20 0x621-0x624.7 (4) @@ -817,7 +843,15 @@ $ fq -d mp4 dv fragmented.mp4 0x01670| 00 00 00 00 00 00 15 b0| ........| base_data_offset: 5552 0x1678-0x167f.7 (8) 0x01680|00 00 02 00 |.... | default_sample_duration: 512 0x1680-0x1683.7 (4) 0x01680| 00 00 08 ca | .... | default_sample_size: 2250 0x1684-0x1687.7 (4) -0x01680| 01 01 00 00 | .... | default_sample_flags: 16842752 0x1688-0x168b.7 (4) + | | | default_sample_flags{}: 0x1688-0x168b.7 (4) +0x01680| 01 | . | reserved0: 0 0x1688-0x1688.3 (0.4) +0x01680| 01 | . | is_leading: 0 0x1688.4-0x1688.5 (0.2) +0x01680| 01 | . | sample_depends_on: 1 0x1688.6-0x1688.7 (0.2) +0x01680| 01 | . | sample_is_depended_on: 0 0x1689-0x1689.1 (0.2) +0x01680| 01 | . | sample_has_redundancy: 0 0x1689.2-0x1689.3 (0.2) +0x01680| 01 | . | sample_padding_value: 0 0x1689.4-0x1689.6 (0.3) +0x01680| 01 | . | sample_is_non_sync_sample: 1 0x1689.7-0x1689.7 (0.1) +0x01680| 00 00 | .. | sample_degradation_priority: 0 0x168a-0x168b.7 (2) | | | [1]{}: box 0x168c-0x169f.7 (20) 0x01680| 00 00 00 14| ....| size: 20 0x168c-0x168f.7 (4) 0x01690|74 66 64 74 |tfdt | type: "tfdt" (Track fragment decode time) 0x1690-0x1693.7 (4) @@ -840,7 +874,15 @@ $ fq -d mp4 dv fragmented.mp4 0x016a0| 05 | . | data_offset_present: true 0x16ab.7-0x16ab.7 (0.1) 0x016a0| 00 00 00 01| ....| sample_count: 1 0x16ac-0x16af.7 (4) 0x016b0|00 00 00 d4 |.... | data_offset: 212 0x16b0-0x16b3.7 (4) -0x016b0| 02 00 00 00 | .... | first_sample_flags: 33554432 0x16b4-0x16b7.7 (4) + | | | first_sample_flags{}: 0x16b4-0x16b7.7 (4) +0x016b0| 02 | . | reserved0: 0 0x16b4-0x16b4.3 (0.4) +0x016b0| 02 | . | is_leading: 0 0x16b4.4-0x16b4.5 (0.2) +0x016b0| 02 | . | sample_depends_on: 2 0x16b4.6-0x16b4.7 (0.2) +0x016b0| 00 | . | sample_is_depended_on: 0 0x16b5-0x16b5.1 (0.2) +0x016b0| 00 | . | sample_has_redundancy: 0 0x16b5.2-0x16b5.3 (0.2) +0x016b0| 00 | . | sample_padding_value: 0 0x16b5.4-0x16b5.6 (0.3) +0x016b0| 00 | . | sample_is_non_sync_sample: 0 0x16b5.7-0x16b5.7 (0.1) +0x016b0| 00 00 | .. | sample_degradation_priority: 0 0x16b6-0x16b7.7 (2) | | | samples[0:1]: 0x16b8-NA (0) | | | [0]{}: sample 0x16b8-NA (0) | | | [2]{}: box 0x16b8-0x1713.7 (92) @@ -865,7 +907,15 @@ $ fq -d mp4 dv fragmented.mp4 0x016d0|00 00 00 00 00 00 15 b0 |........ | base_data_offset: 5552 0x16d0-0x16d7.7 (8) 0x016d0| 00 00 04 00 | .... | default_sample_duration: 1024 0x16d8-0x16db.7 (4) 0x016d0| 00 00 00 c2| ....| default_sample_size: 194 0x16dc-0x16df.7 (4) -0x016e0|02 00 00 00 |.... | default_sample_flags: 33554432 0x16e0-0x16e3.7 (4) + | | | default_sample_flags{}: 0x16e0-0x16e3.7 (4) +0x016e0|02 |. | reserved0: 0 0x16e0-0x16e0.3 (0.4) +0x016e0|02 |. | is_leading: 0 0x16e0.4-0x16e0.5 (0.2) +0x016e0|02 |. | sample_depends_on: 2 0x16e0.6-0x16e0.7 (0.2) +0x016e0| 00 | . | sample_is_depended_on: 0 0x16e1-0x16e1.1 (0.2) +0x016e0| 00 | . | sample_has_redundancy: 0 0x16e1.2-0x16e1.3 (0.2) +0x016e0| 00 | . | sample_padding_value: 0 0x16e1.4-0x16e1.6 (0.3) +0x016e0| 00 | . | sample_is_non_sync_sample: 0 0x16e1.7-0x16e1.7 (0.1) +0x016e0| 00 00 | .. | sample_degradation_priority: 0 0x16e2-0x16e3.7 (2) | | | [1]{}: box 0x16e4-0x16f7.7 (20) 0x016e0| 00 00 00 14 | .... | size: 20 0x16e4-0x16e7.7 (4) 0x016e0| 74 66 64 74 | tfdt | type: "tfdt" (Track fragment decode time) 0x16e8-0x16eb.7 (4) @@ -935,7 +985,15 @@ $ fq -d mp4 dv fragmented.mp4 0x021a0|d1 |. | 0x021a0| 00 00 02 00 | .... | default_sample_duration: 512 0x21a1-0x21a4.7 (4) 0x021a0| 00 00 08 c0 | .... | default_sample_size: 2240 0x21a5-0x21a8.7 (4) -0x021a0| 01 01 00 00 | .... | default_sample_flags: 16842752 0x21a9-0x21ac.7 (4) + | | | default_sample_flags{}: 0x21a9-0x21ac.7 (4) +0x021a0| 01 | . | reserved0: 0 0x21a9-0x21a9.3 (0.4) +0x021a0| 01 | . | is_leading: 0 0x21a9.4-0x21a9.5 (0.2) +0x021a0| 01 | . | sample_depends_on: 1 0x21a9.6-0x21a9.7 (0.2) +0x021a0| 01 | . | sample_is_depended_on: 0 0x21aa-0x21aa.1 (0.2) +0x021a0| 01 | . | sample_has_redundancy: 0 0x21aa.2-0x21aa.3 (0.2) +0x021a0| 01 | . | sample_padding_value: 0 0x21aa.4-0x21aa.6 (0.3) +0x021a0| 01 | . | sample_is_non_sync_sample: 1 0x21aa.7-0x21aa.7 (0.1) +0x021a0| 00 00 | .. | sample_degradation_priority: 0 0x21ab-0x21ac.7 (2) | | | [1]{}: box 0x21ad-0x21c0.7 (20) 0x021a0| 00 00 00| ...| size: 20 0x21ad-0x21b0.7 (4) 0x021b0|14 |. | @@ -961,7 +1019,15 @@ $ fq -d mp4 dv fragmented.mp4 0x021c0| 00 00 00| ...| sample_count: 1 0x21cd-0x21d0.7 (4) 0x021d0|01 |. | 0x021d0| 00 00 00 cc | .... | data_offset: 204 0x21d1-0x21d4.7 (4) -0x021d0| 02 00 00 00 | .... | first_sample_flags: 33554432 0x21d5-0x21d8.7 (4) + | | | first_sample_flags{}: 0x21d5-0x21d8.7 (4) +0x021d0| 02 | . | reserved0: 0 0x21d5-0x21d5.3 (0.4) +0x021d0| 02 | . | is_leading: 0 0x21d5.4-0x21d5.5 (0.2) +0x021d0| 02 | . | sample_depends_on: 2 0x21d5.6-0x21d5.7 (0.2) +0x021d0| 00 | . | sample_is_depended_on: 0 0x21d6-0x21d6.1 (0.2) +0x021d0| 00 | . | sample_has_redundancy: 0 0x21d6.2-0x21d6.3 (0.2) +0x021d0| 00 | . | sample_padding_value: 0 0x21d6.4-0x21d6.6 (0.3) +0x021d0| 00 | . | sample_is_non_sync_sample: 0 0x21d6.7-0x21d6.7 (0.1) +0x021d0| 00 00 | .. | sample_degradation_priority: 0 0x21d7-0x21d8.7 (2) | | | samples[0:1]: 0x21d9-NA (0) | | | [0]{}: sample 0x21d9-NA (0) | | | [2]{}: box 0x21d9-0x222c.7 (84) @@ -989,7 +1055,15 @@ $ fq -d mp4 dv fragmented.mp4 0x021f0| 00 00 01 3a | ...: | default_sample_duration: 314 0x21f9-0x21fc.7 (4) 0x021f0| 00 00 00| ...| default_sample_size: 5 0x21fd-0x2200.7 (4) 0x02200|05 |. | -0x02200| 02 00 00 00 | .... | default_sample_flags: 33554432 0x2201-0x2204.7 (4) + | | | default_sample_flags{}: 0x2201-0x2204.7 (4) +0x02200| 02 | . | reserved0: 0 0x2201-0x2201.3 (0.4) +0x02200| 02 | . | is_leading: 0 0x2201.4-0x2201.5 (0.2) +0x02200| 02 | . | sample_depends_on: 2 0x2201.6-0x2201.7 (0.2) +0x02200| 00 | . | sample_is_depended_on: 0 0x2202-0x2202.1 (0.2) +0x02200| 00 | . | sample_has_redundancy: 0 0x2202.2-0x2202.3 (0.2) +0x02200| 00 | . | sample_padding_value: 0 0x2202.4-0x2202.6 (0.3) +0x02200| 00 | . | sample_is_non_sync_sample: 0 0x2202.7-0x2202.7 (0.1) +0x02200| 00 00 | .. | sample_degradation_priority: 0 0x2203-0x2204.7 (2) | | | [1]{}: box 0x2205-0x2218.7 (20) 0x02200| 00 00 00 14 | .... | size: 20 0x2205-0x2208.7 (4) 0x02200| 74 66 64 74 | tfdt | type: "tfdt" (Track fragment decode time) 0x2209-0x220c.7 (4)