Skip to content

Commit 316fda1

Browse files
committed
wip
1 parent 23d980d commit 316fda1

File tree

4 files changed

+382
-61
lines changed

4 files changed

+382
-61
lines changed

format/format.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ const (
100100
MP3_FRAME_XING = "mp3_frame_xing"
101101
MP4 = "mp4"
102102
MPEG_ASC = "mpeg_asc"
103+
MPEG_CC_DATA = "mpeg_cc_data"
103104
MPEG_ES = "mpeg_es"
105+
MPEG_ITU_T35 = "mpeg_itu_t35"
104106
MPEG_PES = "mpeg_pes"
105107
MPEG_PES_PACKET = "mpeg_pes_packet"
106108
MPEG_SPU = "mpeg_spu"

format/mpeg/avc_sei.go

Lines changed: 71 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -7,77 +7,83 @@ import (
77
"github.com/wader/fq/pkg/scalar"
88
)
99

10+
var avcSeiMpegItuT35Format decode.Group
11+
1012
func init() {
1113
interp.RegisterFormat(decode.Format{
1214
Name: format.AVC_SEI,
1315
Description: "H.264/AVC Supplemental Enhancement Information",
14-
DecodeFn: avcSEIDecode,
16+
Dependencies: []decode.Dependency{
17+
{Names: []string{format.MPEG_ITU_T35}, Group: &avcSeiMpegItuT35Format},
18+
},
19+
DecodeFn: avcSEIDecode,
1520
})
1621
}
1722

1823
const (
19-
avcSEIUserDataUnregistered = 5
24+
avcSEIUserDataRegisteredItuTT35 = 4
25+
avcSEIUserDataUnregistered = 5
2026
)
2127

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

8389
var (
@@ -107,10 +113,14 @@ func avcSEIDecode(d *decode.D) any {
107113

108114
d.FramedFn(int64(payloadSize)*8, func(d *decode.D) {
109115
switch payloadType {
116+
case avcSEIUserDataRegisteredItuTT35:
117+
d.FieldFormat("data", avcSeiMpegItuT35Format, nil)
110118
case avcSEIUserDataUnregistered:
111119
d.FieldRawLen("uuid", 16*8, userDataUnregisteredNames)
120+
d.FieldRawLen("data", d.BitsLeft())
121+
default:
122+
d.FieldRawLen("data", d.BitsLeft())
112123
}
113-
d.FieldRawLen("data", d.BitsLeft())
114124
})
115125

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

format/mpeg/mpeg_cc_data.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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(decode.Format{
15+
Name: format.MPEG_CC_DATA,
16+
Description: "EIA-708 cc_data closed captioning data",
17+
DecodeFn: mpegCcDataDecode,
18+
})
19+
}
20+
21+
func mpegCcDataDecode(d *decode.D) any {
22+
d.FieldU1("reserved0")
23+
d.FieldBool("process_cc_data_flag")
24+
d.FieldU1("zero_bit")
25+
ccCount := d.FieldU5("cc_count")
26+
d.FieldU8("reserved1")
27+
d.FieldArray("cc", func(d *decode.D) {
28+
for i := 0; i < int(ccCount); i++ {
29+
d.FieldStruct("cc", func(d *decode.D) {
30+
d.FieldU1("one_bit")
31+
d.FieldU4("reserved0")
32+
d.FieldBool("cc_valid")
33+
d.FieldU2("cc_type")
34+
d.FieldU8("cc_data_1")
35+
d.FieldU8("cc_data_2")
36+
})
37+
}
38+
})
39+
40+
return nil
41+
}

0 commit comments

Comments
 (0)