Skip to content

Commit 323e736

Browse files
committed
wip
1 parent 94834c0 commit 323e736

File tree

4 files changed

+383
-60
lines changed

4 files changed

+383
-60
lines changed

format/format.go

+2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ var (
104104
Mp4 = &decode.Group{Name: "mp4"}
105105
MpegAsc = &decode.Group{Name: "mpeg_asc"}
106106
MpegEs = &decode.Group{Name: "mpeg_es"}
107+
MpegItuT35 = &decode.Group{Name: "mpeg_itu_t35"}
108+
MpegCcData = &decode.Group{Name: "mpeg_cc_data"}
107109
MpegPes = &decode.Group{Name: "mpeg_pes"}
108110
MpegPesPacket = &decode.Group{Name: "mpeg_pes_packet"}
109111
MpegSpu = &decode.Group{Name: "mpeg_spu"}

format/mpeg/avc_sei.go

+70-60
Original file line numberDiff line numberDiff line change
@@ -7,78 +7,84 @@ import (
77
"github.com/wader/fq/pkg/scalar"
88
)
99

10+
var avcSeiMpegItuT35Group decode.Group
11+
1012
func init() {
1113
interp.RegisterFormat(
1214
format.AvcSei,
1315
&decode.Format{
1416
Description: "H.264/AVC Supplemental Enhancement Information",
1517
DecodeFn: avcSEIDecode,
18+
Dependencies: []decode.Dependency{
19+
{Groups: []*decode.Group{format.MpegItuT35}, Out: &avcSeiMpegItuT35Group},
20+
},
1621
})
1722
}
1823

1924
const (
20-
avcSEIUserDataUnregistered = 5
25+
avcSEIUserDataRegisteredItuTT35 = 4
26+
avcSEIUserDataUnregistered = 5
2127
)
2228

2329
var seiNames = scalar.UintMapSymStr{
24-
0: "buffering_period",
25-
1: "pic_timing",
26-
2: "pan_scan_rect",
27-
3: "filler_payload",
28-
4: "user_data_registered_itu_t_t35",
29-
avcSEIUserDataUnregistered: "user_data_unregistered",
30-
6: "recovery_point",
31-
7: "dec_ref_pic_marking_repetition",
32-
8: "spare_pic",
33-
9: "scene_info",
34-
10: "sub_seq_info",
35-
11: "sub_seq_layer_characteristics",
36-
12: "sub_seq_characteristics",
37-
13: "full_frame_freeze",
38-
14: "full_frame_freeze_release",
39-
15: "full_frame_snapshot",
40-
16: "progressive_refinement_segment_start",
41-
17: "progressive_refinement_segment_end",
42-
18: "motion_constrained_slice_group_set",
43-
19: "film_grain_characteristics",
44-
20: "deblocking_filter_display_preference",
45-
21: "stereo_video_info",
46-
22: "post_filter_hint",
47-
23: "tone_mapping_info",
48-
24: "scalability_info",
49-
25: "sub_pic_scalable_layer",
50-
26: "non_required_layer_rep",
51-
27: "priority_layer_info",
52-
28: "layers_not_present",
53-
29: "layer_dependency_change",
54-
30: "scalable_nesting",
55-
31: "base_layer_temporal_hrd",
56-
32: "quality_layer_integrity_check",
57-
33: "redundant_pic_property",
58-
34: "tl0_dep_rep_index",
59-
35: "tl_switching_point",
60-
36: "parallel_decoding_info",
61-
37: "mvc_scalable_nesting",
62-
38: "view_scalability_info",
63-
39: "multiview_scene_info",
64-
40: "multiview_acquisition_info",
65-
41: "non_required_view_component",
66-
42: "view_dependency_change",
67-
43: "operation_points_not_present",
68-
44: "base_view_temporal_hrd",
69-
45: "frame_packing_arrangement",
70-
46: "multiview_view_position",
71-
47: "display_orientation",
72-
48: "mvcd_scalable_nesting",
73-
49: "mvcd_view_scalability_info",
74-
50: "depth_representation_info",
75-
51: "three_dimensional_reference_displays_info",
76-
52: "depth_timing",
77-
53: "depth_sampling_info",
78-
54: "constrained_depth_parameter_set_identifier",
79-
56: "green_metadata",
80-
137: "mastering_display_colour_volume",
81-
181: "alternative_depth_info",
30+
0: "buffering_period",
31+
1: "pic_timing",
32+
2: "pan_scan_rect",
33+
3: "filler_payload",
34+
avcSEIUserDataRegisteredItuTT35: "user_data_registered_itu_t_t35",
35+
avcSEIUserDataUnregistered: "user_data_unregistered",
36+
6: "recovery_point",
37+
7: "dec_ref_pic_marking_repetition",
38+
8: "spare_pic",
39+
9: "scene_info",
40+
10: "sub_seq_info",
41+
11: "sub_seq_layer_characteristics",
42+
12: "sub_seq_characteristics",
43+
13: "full_frame_freeze",
44+
14: "full_frame_freeze_release",
45+
15: "full_frame_snapshot",
46+
16: "progressive_refinement_segment_start",
47+
17: "progressive_refinement_segment_end",
48+
18: "motion_constrained_slice_group_set",
49+
19: "film_grain_characteristics",
50+
20: "deblocking_filter_display_preference",
51+
21: "stereo_video_info",
52+
22: "post_filter_hint",
53+
23: "tone_mapping_info",
54+
24: "scalability_info",
55+
25: "sub_pic_scalable_layer",
56+
26: "non_required_layer_rep",
57+
27: "priority_layer_info",
58+
28: "layers_not_present",
59+
29: "layer_dependency_change",
60+
30: "scalable_nesting",
61+
31: "base_layer_temporal_hrd",
62+
32: "quality_layer_integrity_check",
63+
33: "redundant_pic_property",
64+
34: "tl0_dep_rep_index",
65+
35: "tl_switching_point",
66+
36: "parallel_decoding_info",
67+
37: "mvc_scalable_nesting",
68+
38: "view_scalability_info",
69+
39: "multiview_scene_info",
70+
40: "multiview_acquisition_info",
71+
41: "non_required_view_component",
72+
42: "view_dependency_change",
73+
43: "operation_points_not_present",
74+
44: "base_view_temporal_hrd",
75+
45: "frame_packing_arrangement",
76+
46: "multiview_view_position",
77+
47: "display_orientation",
78+
48: "mvcd_scalable_nesting",
79+
49: "mvcd_view_scalability_info",
80+
50: "depth_representation_info",
81+
51: "three_dimensional_reference_displays_info",
82+
52: "depth_timing",
83+
53: "depth_sampling_info",
84+
54: "constrained_depth_parameter_set_identifier",
85+
56: "green_metadata",
86+
137: "mastering_display_colour_volume",
87+
181: "alternative_depth_info",
8288
}
8389

8490
var (
@@ -108,10 +114,14 @@ func avcSEIDecode(d *decode.D) any {
108114

109115
d.FramedFn(int64(payloadSize)*8, func(d *decode.D) {
110116
switch payloadType {
117+
case avcSEIUserDataRegisteredItuTT35:
118+
d.FieldFormat("data", &avcSeiMpegItuT35Group, nil)
111119
case avcSEIUserDataUnregistered:
112120
d.FieldRawLen("uuid", 16*8, userDataUnregisteredNames)
121+
d.FieldRawLen("data", d.BitsLeft())
122+
default:
123+
d.FieldRawLen("data", d.BitsLeft())
113124
}
114-
d.FieldRawLen("data", d.BitsLeft())
115125
})
116126

117127
d.FieldRawLen("rbsp_trailing_bits", d.BitsLeft())

format/mpeg/mpeg_cc_data.go

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package mpeg
2+
3+
// TODO: rename? eia something?
4+
// EIA-708 cc_data
5+
// https://shop.cta.tech/products/digital-television-dtv-closed-captioning
6+
7+
import (
8+
"github.com/wader/fq/format"
9+
"github.com/wader/fq/pkg/decode"
10+
"github.com/wader/fq/pkg/interp"
11+
)
12+
13+
func init() {
14+
interp.RegisterFormat(
15+
format.MpegCcData,
16+
&decode.Format{
17+
Description: "EIA-708 cc_data closed captioning data",
18+
DecodeFn: mpegCcDataDecode,
19+
})
20+
}
21+
22+
func mpegCcDataDecode(d *decode.D) any {
23+
d.FieldU1("reserved0")
24+
d.FieldBool("process_cc_data_flag")
25+
d.FieldU1("zero_bit")
26+
ccCount := d.FieldU5("cc_count")
27+
d.FieldU8("reserved1")
28+
d.FieldArray("cc", func(d *decode.D) {
29+
for i := 0; i < int(ccCount); i++ {
30+
d.FieldStruct("cc", func(d *decode.D) {
31+
d.FieldU1("one_bit")
32+
d.FieldU4("reserved0")
33+
d.FieldBool("cc_valid")
34+
d.FieldU2("cc_type")
35+
d.FieldU8("cc_data_1")
36+
d.FieldU8("cc_data_2")
37+
})
38+
}
39+
})
40+
41+
return nil
42+
}

0 commit comments

Comments
 (0)