shaka-player 4.4.3 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/.github/workflows/release-please.yaml +2 -27
  2. package/CHANGELOG.md +64 -45
  3. package/README.md +16 -10
  4. package/demo/asset_card.js +18 -21
  5. package/demo/cast_receiver/index.html +0 -1
  6. package/demo/close_button.js +0 -3
  7. package/demo/common/asset.js +22 -5
  8. package/demo/common/assets.js +132 -49
  9. package/demo/config.js +192 -253
  10. package/demo/custom.js +39 -98
  11. package/demo/front.js +7 -10
  12. package/demo/index.html +19 -22
  13. package/demo/input.js +6 -11
  14. package/demo/input_container.js +8 -9
  15. package/demo/main.js +51 -123
  16. package/demo/search.js +22 -34
  17. package/demo/service_worker.js +0 -3
  18. package/demo/tooltip.js +3 -5
  19. package/demo/visualizer.js +3 -5
  20. package/demo/visualizer_button.js +1 -20
  21. package/dist/demo.compiled.debug.js +152 -178
  22. package/dist/demo.compiled.debug.map +4 -4
  23. package/dist/demo.compiled.js +152 -178
  24. package/dist/demo.compiled.map +4 -4
  25. package/dist/deps.js +27 -24
  26. package/dist/locales.js +31 -31
  27. package/dist/receiver.compiled.debug.js +22 -43
  28. package/dist/receiver.compiled.debug.map +4 -4
  29. package/dist/receiver.compiled.js +22 -43
  30. package/dist/receiver.compiled.map +4 -4
  31. package/dist/shaka-player.compiled.d.ts +507 -365
  32. package/dist/shaka-player.compiled.debug.d.ts +507 -365
  33. package/dist/shaka-player.compiled.debug.externs.js +205 -51
  34. package/dist/shaka-player.compiled.debug.js +541 -450
  35. package/dist/shaka-player.compiled.debug.map +4 -4
  36. package/dist/shaka-player.compiled.externs.js +205 -51
  37. package/dist/shaka-player.compiled.js +1120 -1066
  38. package/dist/shaka-player.compiled.map +4 -4
  39. package/dist/shaka-player.ui.d.ts +562 -410
  40. package/dist/shaka-player.ui.debug.d.ts +562 -410
  41. package/dist/shaka-player.ui.debug.externs.js +226 -51
  42. package/dist/shaka-player.ui.debug.js +606 -506
  43. package/dist/shaka-player.ui.debug.map +4 -4
  44. package/dist/shaka-player.ui.externs.js +226 -51
  45. package/dist/shaka-player.ui.js +1266 -1207
  46. package/dist/shaka-player.ui.map +4 -4
  47. package/docs/design/lcevc-integration.md +14 -14
  48. package/docs/tutorials/faq.md +27 -55
  49. package/docs/tutorials/index.json +2 -1
  50. package/docs/tutorials/lcevc.md +118 -0
  51. package/docs/tutorials/ui-customization.md +4 -0
  52. package/externs/css_style_declaration.js +19 -0
  53. package/externs/lcevc.js +37 -13
  54. package/externs/media_remote.js +68 -0
  55. package/externs/mediatailor.js +193 -0
  56. package/externs/pictureinpicture.js +11 -0
  57. package/externs/shaka/ads.js +27 -0
  58. package/externs/shaka/manifest.js +10 -5
  59. package/externs/shaka/manifest_parser.js +7 -1
  60. package/externs/shaka/offline.js +4 -0
  61. package/externs/shaka/player.js +12 -1
  62. package/karma.conf.js +7 -3
  63. package/lib/abr/simple_abr_manager.js +43 -3
  64. package/lib/ads/ad_manager.js +104 -50
  65. package/lib/ads/media_tailor_ad.js +297 -0
  66. package/lib/ads/media_tailor_ad_manager.js +828 -0
  67. package/lib/cea/ts_cea_parser.js +15 -2
  68. package/lib/config/codec_switching_strategy.js +24 -0
  69. package/lib/dash/content_protection.js +120 -2
  70. package/lib/dash/dash_parser.js +75 -12
  71. package/lib/dash/mpd_utils.js +10 -6
  72. package/lib/dash/segment_base.js +13 -5
  73. package/lib/dash/segment_list.js +13 -5
  74. package/lib/dash/segment_template.js +43 -85
  75. package/lib/dependencies/all.js +8 -7
  76. package/lib/hls/hls_parser.js +44 -16
  77. package/lib/lcevc/lcevc_dec.js +220 -0
  78. package/lib/media/adaptation_set.js +22 -11
  79. package/lib/media/adaptation_set_criteria.js +25 -7
  80. package/lib/media/media_source_engine.js +215 -27
  81. package/lib/media/segment_index.js +1 -1
  82. package/lib/media/segment_reference.js +7 -7
  83. package/lib/media/streaming_engine.js +33 -18
  84. package/lib/mss/mss_parser.js +1 -0
  85. package/lib/net/networking_engine.js +1 -0
  86. package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
  87. package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
  88. package/lib/offline/manifest_converter.js +1 -0
  89. package/lib/offline/storage.js +3 -0
  90. package/lib/player.js +142 -72
  91. package/lib/routing/payload.js +5 -1
  92. package/lib/text/cue.js +15 -0
  93. package/lib/text/ttml_text_parser.js +17 -0
  94. package/lib/text/ui_text_displayer.js +4 -0
  95. package/lib/text/vtt_text_parser.js +33 -20
  96. package/lib/transmuxer/h265.js +862 -0
  97. package/lib/transmuxer/mpeg_ts_transmuxer.js +3 -2
  98. package/lib/transmuxer/ts_transmuxer.js +160 -15
  99. package/lib/util/error.js +28 -9
  100. package/lib/util/exp_golomb.js +30 -2
  101. package/lib/util/fake_event.js +3 -0
  102. package/lib/util/mp4_generator.js +4 -4
  103. package/lib/util/periods.js +2 -0
  104. package/lib/util/platform.js +40 -0
  105. package/lib/util/player_configuration.js +8 -0
  106. package/lib/util/state_history.js +6 -2
  107. package/lib/util/stream_utils.js +133 -217
  108. package/lib/util/ts_parser.js +226 -40
  109. package/maintained-branches.md +3 -2
  110. package/package.json +4 -6
  111. package/roadmap.md +15 -5
  112. package/shaka-player.uncompiled.js +2 -1
  113. package/support.html +0 -1
  114. package/test/cast/cast_receiver_integration.js +47 -0
  115. package/test/codec_switching/codec_switching_integration.js +181 -0
  116. package/test/dash/dash_parser_content_protection_unit.js +2 -0
  117. package/test/dash/dash_parser_integration.js +73 -0
  118. package/test/dash/dash_parser_live_unit.js +2 -0
  119. package/test/dash/dash_parser_manifest_unit.js +42 -0
  120. package/test/dash/dash_parser_segment_base_unit.js +2 -0
  121. package/test/dash/dash_parser_segment_list_unit.js +2 -0
  122. package/test/dash/dash_parser_segment_template_unit.js +2 -0
  123. package/test/demo/demo_unit.js +0 -16
  124. package/test/hls/hls_live_unit.js +2 -0
  125. package/test/hls/hls_parser_unit.js +8 -6
  126. package/test/media/adaptation_set_criteria_unit.js +118 -0
  127. package/test/media/adaptation_set_unit.js +1 -0
  128. package/test/media/media_source_engine_unit.js +165 -1
  129. package/test/media/segment_index_unit.js +4 -4
  130. package/test/media/segment_prefetch_unit.js +1 -1
  131. package/test/media/streaming_engine_unit.js +17 -17
  132. package/test/mss/mss_parser_unit.js +2 -0
  133. package/test/offline/manifest_convert_unit.js +5 -0
  134. package/test/offline/storage_integration.js +1 -4
  135. package/test/player_unit.js +102 -131
  136. package/test/routing/walker_unit.js +1 -0
  137. package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
  138. package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
  139. package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
  140. package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
  141. package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
  142. package/test/test/assets/dash-aes-128/dash.mpd +18 -0
  143. package/test/test/assets/dash-aes-128/license +1 -0
  144. package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
  145. package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
  146. package/test/test/assets/dash-multi-codec/dash.mpd +32 -0
  147. package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
  148. package/test/test/assets/hls-ts-h265/0.ts +0 -0
  149. package/test/test/assets/hls-ts-h265/hevc.m3u8 +6 -0
  150. package/test/test/assets/hls-ts-h265/index.m3u8 +7 -0
  151. package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
  152. package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
  153. package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +9 -0
  154. package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +24 -0
  155. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
  156. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
  157. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
  158. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
  159. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
  160. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
  161. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
  162. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
  163. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
  164. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
  165. package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +14 -0
  166. package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +23 -0
  167. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
  168. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
  169. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
  170. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
  171. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
  172. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
  173. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
  174. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
  175. package/test/test/util/dash_parser_util.js +4 -0
  176. package/test/test/util/fake_ad_manager.js +20 -0
  177. package/test/test/util/fake_media_source_engine.js +8 -2
  178. package/test/test/util/manifest_generator.js +7 -3
  179. package/test/test/util/mss_parser_util.js +4 -0
  180. package/test/test/util/offline_utils.js +1 -0
  181. package/test/test/util/streaming_engine_util.js +7 -4
  182. package/test/text/ttml_text_parser_unit.js +52 -0
  183. package/test/text/vtt_text_parser_unit.js +103 -31
  184. package/test/transmuxer/transmuxer_integration.js +117 -0
  185. package/test/ui/ui_unit.js +3 -10
  186. package/test/util/stream_utils_unit.js +208 -74
  187. package/ui/controls.js +125 -0
  188. package/ui/externs/ui.js +8 -1
  189. package/ui/pip_button.js +22 -120
  190. package/ui/remote_button.js +201 -0
  191. package/ui/ui.js +5 -2
  192. package/demo/common/message_ids.js +0 -309
  193. package/demo/locales/en.json +0 -288
  194. package/demo/locales/source.json +0 -1146
  195. package/externs/mux.js +0 -69
  196. package/lib/lcevc/lcevc_dil.js +0 -152
  197. package/lib/transmuxer/muxjs_transmuxer.js +0 -242
  198. package/test/transmuxer/muxjs_transmuxer_integration.js +0 -177
@@ -0,0 +1,862 @@
1
+ /*! @license
2
+ * Shaka Player
3
+ * Copyright 2016 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ goog.provide('shaka.transmuxer.H265');
8
+
9
+ goog.require('shaka.util.ExpGolomb');
10
+ goog.require('shaka.util.Uint8ArrayUtils');
11
+
12
+
13
+ /**
14
+ * H.265 utils
15
+ */
16
+ shaka.transmuxer.H265 = class {
17
+ /**
18
+ * Read a sequence parameter set and return some interesting video
19
+ * properties. A sequence parameter set is the H265 metadata that
20
+ * describes the properties of upcoming video frames.
21
+ *
22
+ * @param {!Array.<shaka.extern.VideoNalu>} nalus
23
+ * @return {?{height: number, width: number, videoConfig: !Uint8Array}}
24
+ */
25
+ static parseInfo(nalus) {
26
+ const H265 = shaka.transmuxer.H265;
27
+ if (!nalus.length) {
28
+ return null;
29
+ }
30
+ const vpsNalu = nalus.find((nalu) => {
31
+ return nalu.type == H265.NALU_TYPE_VPS_;
32
+ });
33
+ const spsNalu = nalus.find((nalu) => {
34
+ return nalu.type == H265.NALU_TYPE_SPS_;
35
+ });
36
+ const ppsNalu = nalus.find((nalu) => {
37
+ return nalu.type == H265.NALU_TYPE_PPS_;
38
+ });
39
+ if (!vpsNalu || !spsNalu || !ppsNalu) {
40
+ return null;
41
+ }
42
+
43
+ const vpsConfiguration = H265.parseVPS_(vpsNalu.fullData);
44
+ const spsConfiguration = H265.parseSPS_(spsNalu.fullData);
45
+ const ppsConfiguration = H265.parsePPS_(ppsNalu.fullData);
46
+
47
+ /** @type {shaka.transmuxer.H265.DecoderConfigurationRecordType} */
48
+ const detail = {
49
+ numTemporalLayers: vpsConfiguration.numTemporalLayers,
50
+ temporalIdNested: vpsConfiguration.temporalIdNested,
51
+ generalProfileSpace: spsConfiguration.generalProfileSpace,
52
+ generalTierFlag: spsConfiguration.generalTierFlag,
53
+ generalLevelIdc: spsConfiguration.generalLevelIdc,
54
+ generalProfileIdc: spsConfiguration.generalProfileIdc,
55
+ generalProfileCompatibilityFlags1:
56
+ spsConfiguration.generalProfileCompatibilityFlags1,
57
+ generalProfileCompatibilityFlags2:
58
+ spsConfiguration.generalProfileCompatibilityFlags2,
59
+ generalProfileCompatibilityFlags3:
60
+ spsConfiguration.generalProfileCompatibilityFlags3,
61
+ generalProfileCompatibilityFlags4:
62
+ spsConfiguration.generalProfileCompatibilityFlags4,
63
+ generalConstraintIndicatorFlags1:
64
+ spsConfiguration.generalConstraintIndicatorFlags1,
65
+ generalConstraintIndicatorFlags2:
66
+ spsConfiguration.generalConstraintIndicatorFlags2,
67
+ generalConstraintIndicatorFlags3:
68
+ spsConfiguration.generalConstraintIndicatorFlags3,
69
+ generalConstraintIndicatorFlags4:
70
+ spsConfiguration.generalConstraintIndicatorFlags4,
71
+ generalConstraintIndicatorFlags5:
72
+ spsConfiguration.generalConstraintIndicatorFlags5,
73
+ generalConstraintIndicatorFlags6:
74
+ spsConfiguration.generalConstraintIndicatorFlags6,
75
+ constantFrameRate: spsConfiguration.constantFrameRate,
76
+ minSpatialSegmentationIdc: spsConfiguration.minSpatialSegmentationIdc,
77
+ chromaFormatIdc: spsConfiguration.chromaFormatIdc,
78
+ bitDepthLumaMinus8: spsConfiguration.bitDepthLumaMinus8,
79
+ bitDepthChromaMinus8: spsConfiguration.bitDepthChromaMinus8,
80
+ parallelismType: ppsConfiguration.parallelismType,
81
+ };
82
+
83
+ const videoConfig = H265.getVideoConfiguration_(
84
+ vpsNalu.fullData, spsNalu.fullData, ppsNalu.fullData, detail);
85
+
86
+ return {
87
+ height: spsConfiguration.height,
88
+ width: spsConfiguration.width,
89
+ videoConfig,
90
+ };
91
+ }
92
+
93
+ /**
94
+ * @param {!Uint8Array} data
95
+ * @return {shaka.transmuxer.H265.VPSConfiguration}
96
+ * @private
97
+ */
98
+ static parseVPS_(data) {
99
+ const gb = new shaka.util.ExpGolomb(data, /* convertEbsp2rbsp= */ true);
100
+
101
+ // remove NALu Header
102
+ gb.readUnsignedByte();
103
+ gb.readUnsignedByte();
104
+
105
+ // VPS
106
+ gb.readBits(4); // video_parameter_set_id
107
+ gb.readBits(2);
108
+ gb.readBits(6); // max_layers_minus1
109
+ const maxSubLayersMinus1 = gb.readBits(3);
110
+ const temporalIdNestingFlag = gb.readBoolean();
111
+
112
+ return {
113
+ numTemporalLayers: maxSubLayersMinus1 + 1,
114
+ temporalIdNested: temporalIdNestingFlag,
115
+ };
116
+ }
117
+
118
+ /**
119
+ * The code is based on mpegts.js
120
+ * https://github.com/xqq/mpegts.js/blob/master/src/demux/h265-parser.js#L65
121
+ *
122
+ * @param {!Uint8Array} data
123
+ * @return {shaka.transmuxer.H265.SPSConfiguration}
124
+ * @private
125
+ */
126
+ static parseSPS_(data) {
127
+ const gb = new shaka.util.ExpGolomb(data, /* convertEbsp2rbsp= */ true);
128
+
129
+ // remove NALu Header
130
+ gb.readUnsignedByte();
131
+ gb.readUnsignedByte();
132
+
133
+ let leftOffset = 0;
134
+ let rightOffset = 0;
135
+ let topOffset = 0;
136
+ let bottomOffset = 0;
137
+
138
+ // SPS
139
+ gb.readBits(4); // video_paramter_set_id
140
+ const maxSubLayersMinus1 = gb.readBits(3);
141
+ gb.readBoolean(); // temporal_id_nesting_flag
142
+
143
+ // profile_tier_level begin
144
+ const generalProfileSpace = gb.readBits(2);
145
+ const generalTierFlag = gb.readBits(1);
146
+ const generalProfileIdc = gb.readBits(5);
147
+ const generalProfileCompatibilityFlags1 = gb.readUnsignedByte();
148
+ const generalProfileCompatibilityFlags2 = gb.readUnsignedByte();
149
+ const generalProfileCompatibilityFlags3 = gb.readUnsignedByte();
150
+ const generalProfileCompatibilityFlags4 = gb.readUnsignedByte();
151
+ const generalConstraintIndicatorFlags1 = gb.readUnsignedByte();
152
+ const generalConstraintIndicatorFlags2 = gb.readUnsignedByte();
153
+ const generalConstraintIndicatorFlags3 = gb.readUnsignedByte();
154
+ const generalConstraintIndicatorFlags4 = gb.readUnsignedByte();
155
+ const generalConstraintIndicatorFlags5 = gb.readUnsignedByte();
156
+ const generalConstraintIndicatorFlags6 = gb.readUnsignedByte();
157
+ const generalLevelIdc = gb.readUnsignedByte();
158
+ const subLayerProfilePresentFlag = [];
159
+ const subLayerLevelPresentFlag = [];
160
+ for (let i = 0; i < maxSubLayersMinus1; i++) {
161
+ subLayerProfilePresentFlag.push(gb.readBoolean());
162
+ subLayerLevelPresentFlag.push(gb.readBoolean());
163
+ }
164
+ if (maxSubLayersMinus1 > 0) {
165
+ for (let i = maxSubLayersMinus1; i < 8; i++) {
166
+ gb.readBits(2);
167
+ }
168
+ }
169
+ for (let i = 0; i < maxSubLayersMinus1; i++) {
170
+ if (subLayerProfilePresentFlag[i]) {
171
+ gb.readBits(88);
172
+ }
173
+ if (subLayerLevelPresentFlag[i]) {
174
+ gb.readUnsignedByte();
175
+ }
176
+ }
177
+ // profile_tier_level end
178
+
179
+ gb.readUnsignedExpGolomb(); // seq_parameter_set_id
180
+ const chromaFormatIdc = gb.readUnsignedExpGolomb();
181
+ if (chromaFormatIdc == 3) {
182
+ gb.readBits(1); // separate_colour_plane_flag
183
+ }
184
+ const picWidthInLumaSamples = gb.readUnsignedExpGolomb();
185
+ const picHeightInLumaSamples = gb.readUnsignedExpGolomb();
186
+ const conformanceWindowFlag = gb.readBoolean();
187
+ if (conformanceWindowFlag) {
188
+ leftOffset += gb.readUnsignedExpGolomb();
189
+ rightOffset += gb.readUnsignedExpGolomb();
190
+ topOffset += gb.readUnsignedExpGolomb();
191
+ bottomOffset += gb.readUnsignedExpGolomb();
192
+ }
193
+ const bitDepthLumaMinus8 = gb.readUnsignedExpGolomb();
194
+ const bitDepthChromaMinus8 = gb.readUnsignedExpGolomb();
195
+ const log2MaxPicOrderCntLsbMinus4 = gb.readUnsignedExpGolomb();
196
+ const subLayerOrderingInfoPresentFlag = gb.readBoolean();
197
+ if (subLayerOrderingInfoPresentFlag) {
198
+ // Skip each layer
199
+ for (let i = 0; i <= maxSubLayersMinus1; i++) {
200
+ gb.readUnsignedExpGolomb(); // max_dec_pic_buffering_minus1[i]
201
+ gb.readUnsignedExpGolomb(); // max_num_reorder_pics[i]
202
+ gb.readUnsignedExpGolomb(); // max_latency_increase_plus1[i]
203
+ }
204
+ } else {
205
+ // Skip one layer
206
+ gb.readUnsignedExpGolomb(); // max_dec_pic_buffering_minus1[i]
207
+ gb.readUnsignedExpGolomb(); // max_num_reorder_pics[i]
208
+ gb.readUnsignedExpGolomb(); // max_latency_increase_plus1[i]
209
+ }
210
+ gb.readUnsignedExpGolomb(); // log2_min_luma_coding_block_size_minus3
211
+ gb.readUnsignedExpGolomb(); // log2_diff_max_min_luma_coding_block_size
212
+ gb.readUnsignedExpGolomb(); // log2_min_transform_block_size_minus2
213
+ gb.readUnsignedExpGolomb(); // log2_diff_max_min_transform_block_size
214
+ gb.readUnsignedExpGolomb(); // max_transform_hierarchy_depth_inter
215
+ gb.readUnsignedExpGolomb(); // max_transform_hierarchy_depth_intra
216
+ const scalingListEnabledFlag = gb.readBoolean();
217
+ if (scalingListEnabledFlag) {
218
+ const spsScalingListDataPresentFlag = gb.readBoolean();
219
+ if (spsScalingListDataPresentFlag) {
220
+ for (let sizeId = 0; sizeId < 4; sizeId++) {
221
+ for (
222
+ let matrixId = 0;
223
+ matrixId < (sizeId === 3 ? 2 : 6);
224
+ matrixId++
225
+ ) {
226
+ const scalingListPredModeFlag = gb.readBoolean();
227
+ if (!scalingListPredModeFlag) {
228
+ gb.readUnsignedExpGolomb(); // scaling_list_pred_matrix_id_delta
229
+ } else {
230
+ const coefNum = Math.min(64, 1 << (4 + (sizeId << 1)));
231
+ if (sizeId > 1) {
232
+ gb.readExpGolomb();
233
+ }
234
+ for (let i = 0; i < coefNum; i++) {
235
+ gb.readExpGolomb();
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ }
242
+ gb.readBoolean(); // amp_enabled_flag
243
+ gb.readBoolean(); // sample_adaptive_offset_enabled_flag
244
+ const pcmEnabledFlag = gb.readBoolean();
245
+ if (pcmEnabledFlag) {
246
+ gb.readUnsignedByte();
247
+ gb.readUnsignedExpGolomb();
248
+ gb.readUnsignedExpGolomb();
249
+ gb.readBoolean();
250
+ }
251
+ const numShortTermRefPicSets = gb.readUnsignedExpGolomb();
252
+ let numDeltaPocs = 0;
253
+ for (let i = 0; i < numShortTermRefPicSets; i++) {
254
+ let interRefPicSetPredictionFlag = false;
255
+ if (i !== 0) {
256
+ interRefPicSetPredictionFlag = gb.readBoolean();
257
+ }
258
+ if (interRefPicSetPredictionFlag) {
259
+ if (i === numShortTermRefPicSets) {
260
+ gb.readUnsignedExpGolomb();
261
+ }
262
+ gb.readBoolean();
263
+ gb.readUnsignedExpGolomb();
264
+ let nextNumDeltaPocs = 0;
265
+ for (let j = 0; j <= numDeltaPocs; j++) {
266
+ const usedByCurrPicFlag = gb.readBoolean();
267
+ let useDeltaFlag = false;
268
+ if (!usedByCurrPicFlag) {
269
+ useDeltaFlag = gb.readBoolean();
270
+ }
271
+ if (usedByCurrPicFlag || useDeltaFlag) {
272
+ nextNumDeltaPocs++;
273
+ }
274
+ }
275
+ numDeltaPocs = nextNumDeltaPocs;
276
+ } else {
277
+ const numNegativePics = gb.readUnsignedExpGolomb();
278
+ const numPositivePics = gb.readUnsignedExpGolomb();
279
+ numDeltaPocs = numNegativePics + numPositivePics;
280
+ for (let j = 0; j < numNegativePics; j++) {
281
+ gb.readUnsignedExpGolomb();
282
+ gb.readBoolean();
283
+ }
284
+ for (let j = 0; j < numPositivePics; j++) {
285
+ gb.readUnsignedExpGolomb();
286
+ gb.readBoolean();
287
+ }
288
+ }
289
+ }
290
+ const longTermRefPicsPresentFlag = gb.readBoolean();
291
+ if (longTermRefPicsPresentFlag) {
292
+ const numLongTermRefPicsSps = gb.readUnsignedExpGolomb();
293
+ for (let i = 0; i < numLongTermRefPicsSps; i++) {
294
+ for (let j = 0; j < log2MaxPicOrderCntLsbMinus4 + 4; j++) {
295
+ gb.readBits(1);
296
+ }
297
+ gb.readBits(1);
298
+ }
299
+ }
300
+ let defaultDisplayWindowFlag = false; // for calc offset
301
+ let minSpatialSegmentationIdc = 0; // for hvcC
302
+ gb.readBoolean(); // sps_temporal_mvp_enabled_flag
303
+ gb.readBoolean(); // strong_intra_smoothing_enabled_flag
304
+ const vuiParametersPresentFlag = gb.readBoolean();
305
+ if (vuiParametersPresentFlag) {
306
+ const aspectRatioInfoPresentFlag = gb.readBoolean();
307
+ if (aspectRatioInfoPresentFlag) {
308
+ const aspectRatioIdc = gb.readUnsignedByte();
309
+ if (aspectRatioIdc === 255) {
310
+ gb.readBits(16); // sar_width
311
+ gb.readBits(16); // sar_height
312
+ }
313
+ }
314
+ const overscanInfoPresentFlag = gb.readBoolean();
315
+ if (overscanInfoPresentFlag) {
316
+ gb.readBoolean();
317
+ }
318
+ const videoSignalTypePresentFlag = gb.readBoolean();
319
+ if (videoSignalTypePresentFlag) {
320
+ gb.readBits(3);
321
+ gb.readBoolean();
322
+ const colourDescriptionPresentFlag = gb.readBoolean();
323
+ if (colourDescriptionPresentFlag) {
324
+ gb.readUnsignedByte();
325
+ gb.readUnsignedByte();
326
+ gb.readUnsignedByte();
327
+ }
328
+ }
329
+ const chromaLocInfoPresentFlag = gb.readBoolean();
330
+ if (chromaLocInfoPresentFlag) {
331
+ gb.readUnsignedExpGolomb();
332
+ gb.readUnsignedExpGolomb();
333
+ }
334
+ gb.readBoolean(); // neutral_chroma_indication_flag
335
+ gb.readBoolean(); // field_seq_flag
336
+ gb.readBoolean(); // frame_field_info_present_flag
337
+ defaultDisplayWindowFlag = gb.readBoolean();
338
+ if (defaultDisplayWindowFlag) {
339
+ gb.readUnsignedExpGolomb();
340
+ gb.readUnsignedExpGolomb();
341
+ gb.readUnsignedExpGolomb();
342
+ gb.readUnsignedExpGolomb();
343
+ }
344
+ const vuiTimingInfoPresentFlag = gb.readBoolean();
345
+ if (vuiTimingInfoPresentFlag) {
346
+ gb.readBits(32); // fps_den
347
+ gb.readBits(32); // fps_num
348
+ const vuiPocProportionalToTimingFlag = gb.readBoolean();
349
+ if (vuiPocProportionalToTimingFlag) {
350
+ gb.readUnsignedExpGolomb();
351
+ }
352
+ const vuiHrdParametersPresentFlag = gb.readBoolean();
353
+ if (vuiHrdParametersPresentFlag) {
354
+ const commonInfPresentFlag = 1;
355
+ let nalHrdParametersPresentFlag = false;
356
+ let vclHrdParametersPresentFlag = false;
357
+ let subPicHrdParamsPresentFlag = false;
358
+ if (commonInfPresentFlag) {
359
+ nalHrdParametersPresentFlag = gb.readBoolean();
360
+ vclHrdParametersPresentFlag = gb.readBoolean();
361
+ if (nalHrdParametersPresentFlag || vclHrdParametersPresentFlag) {
362
+ subPicHrdParamsPresentFlag = gb.readBoolean();
363
+ if (subPicHrdParamsPresentFlag) {
364
+ gb.readUnsignedByte();
365
+ gb.readBits(5);
366
+ gb.readBoolean();
367
+ gb.readBits(5);
368
+ }
369
+ gb.readBits(4); // bit_rate_scale
370
+ gb.readBits(4); // cpb_size_scale
371
+ if (subPicHrdParamsPresentFlag) {
372
+ gb.readBits(4);
373
+ }
374
+ gb.readBits(5);
375
+ gb.readBits(5);
376
+ gb.readBits(5);
377
+ }
378
+ }
379
+ for (let i = 0; i <= maxSubLayersMinus1; i++) {
380
+ const fixedPicRateGeneralFlag = gb.readBoolean();
381
+ let fixedPicRateWithinCvsFlag = true;
382
+ let cpbCnt = 1;
383
+ if (!fixedPicRateGeneralFlag) {
384
+ fixedPicRateWithinCvsFlag = gb.readBoolean();
385
+ }
386
+ let lowDelayHrdFlag = false;
387
+ if (fixedPicRateWithinCvsFlag) {
388
+ gb.readUnsignedExpGolomb();
389
+ } else {
390
+ lowDelayHrdFlag = gb.readBoolean();
391
+ }
392
+ if (!lowDelayHrdFlag) {
393
+ cpbCnt = gb.readUnsignedExpGolomb() + 1;
394
+ }
395
+ if (nalHrdParametersPresentFlag) {
396
+ for (let j = 0; j < cpbCnt; j++) {
397
+ gb.readUnsignedExpGolomb();
398
+ gb.readUnsignedExpGolomb();
399
+ if (subPicHrdParamsPresentFlag) {
400
+ gb.readUnsignedExpGolomb();
401
+ gb.readUnsignedExpGolomb();
402
+ }
403
+ }
404
+ gb.readBoolean();
405
+ }
406
+ if (vclHrdParametersPresentFlag) {
407
+ for (let j = 0; j < cpbCnt; j++) {
408
+ gb.readUnsignedExpGolomb();
409
+ gb.readUnsignedExpGolomb();
410
+ if (subPicHrdParamsPresentFlag) {
411
+ gb.readUnsignedExpGolomb();
412
+ gb.readUnsignedExpGolomb();
413
+ }
414
+ }
415
+ gb.readBoolean();
416
+ }
417
+ }
418
+ }
419
+ }
420
+ const bitstreamRestrictionFlag = gb.readBoolean();
421
+ if (bitstreamRestrictionFlag) {
422
+ gb.readBoolean(); // tiles_fixed_structure_flag
423
+ gb.readBoolean(); // motion_vectors_over_pic_boundaries_flag
424
+ gb.readBoolean(); // restricted_ref_pic_lists_flag
425
+ minSpatialSegmentationIdc = gb.readUnsignedExpGolomb();
426
+ gb.readUnsignedExpGolomb(); // max_bytes_per_pic_denom
427
+ gb.readUnsignedExpGolomb(); // max_bits_per_min_cu_denom
428
+ gb.readUnsignedExpGolomb(); // log2_max_mv_length_horizontal
429
+ gb.readUnsignedExpGolomb(); // log2_max_mv_length_vertical
430
+ }
431
+ }
432
+
433
+ const subWc = chromaFormatIdc === 1 || chromaFormatIdc === 2 ? 2 : 1;
434
+ const subHc = chromaFormatIdc === 1 ? 2 : 1;
435
+ const codecWidth =
436
+ picWidthInLumaSamples - (leftOffset + rightOffset) * subWc;
437
+ const codecHeight =
438
+ picHeightInLumaSamples - (topOffset + bottomOffset) * subHc;
439
+
440
+ return {
441
+ generalLevelIdc,
442
+ generalProfileSpace,
443
+ generalTierFlag,
444
+ generalProfileIdc,
445
+ generalProfileCompatibilityFlags1,
446
+ generalProfileCompatibilityFlags2,
447
+ generalProfileCompatibilityFlags3,
448
+ generalProfileCompatibilityFlags4,
449
+ generalConstraintIndicatorFlags1,
450
+ generalConstraintIndicatorFlags2,
451
+ generalConstraintIndicatorFlags3,
452
+ generalConstraintIndicatorFlags4,
453
+ generalConstraintIndicatorFlags5,
454
+ generalConstraintIndicatorFlags6,
455
+ minSpatialSegmentationIdc,
456
+ constantFrameRate: 0, // FIXME!!!
457
+ chromaFormatIdc,
458
+ bitDepthLumaMinus8,
459
+ bitDepthChromaMinus8,
460
+ width: codecWidth,
461
+ height: codecHeight,
462
+ };
463
+ }
464
+
465
+ /**
466
+ * @param {!Uint8Array} data
467
+ * @return {shaka.transmuxer.H265.PPSConfiguration}
468
+ * @private
469
+ */
470
+ static parsePPS_(data) {
471
+ const gb = new shaka.util.ExpGolomb(data, /* convertEbsp2rbsp= */ true);
472
+
473
+ // remove NALu Header
474
+ gb.readUnsignedByte();
475
+ gb.readUnsignedByte();
476
+
477
+ // PPS
478
+ gb.readUnsignedExpGolomb(); // pic_parameter_set_id
479
+ gb.readUnsignedExpGolomb(); // seq_parameter_set_id
480
+ gb.readBoolean(); // dependent_slice_segments_enabled_flag
481
+ gb.readBoolean(); // output_flag_present_flag
482
+ gb.readBits(3); // num_extra_slice_header_bits
483
+ gb.readBoolean(); // sign_data_hiding_enabled_flag
484
+ gb.readBoolean(); // cabac_init_present_flag
485
+ gb.readUnsignedExpGolomb(); // num_ref_idx_l0_default_active_minus1
486
+ gb.readUnsignedExpGolomb(); // num_ref_idx_l1_default_active_minus1
487
+ gb.readExpGolomb(); // init_qp_minus26
488
+ gb.readBoolean(); // constrained_intra_pred_flag
489
+ gb.readBoolean(); // transform_skip_enabled_flag
490
+ const cuQpDeltaEnabledFlag = gb.readBoolean();
491
+ if (cuQpDeltaEnabledFlag) {
492
+ gb.readUnsignedExpGolomb(); // diff_cu_qp_delta_depth
493
+ }
494
+ gb.readExpGolomb(); // cb_qp_offset
495
+ gb.readExpGolomb(); // cr_qp_offset
496
+ gb.readBoolean(); // pps_slice_chroma_qp_offsets_present_flag
497
+ gb.readBoolean(); // weighted_pred_flag
498
+ gb.readBoolean(); // weighted_bipred_flag
499
+ gb.readBoolean(); // transquant_bypass_enabled_flag
500
+ const tilesEnabledFlag = gb.readBoolean();
501
+ const entropyCodingSyncEnabledFlag = gb.readBoolean();
502
+
503
+ // needs hvcC
504
+ let parallelismType = 1; // slice-based parallel decoding
505
+ if (entropyCodingSyncEnabledFlag && tilesEnabledFlag) {
506
+ parallelismType = 0; // mixed-type parallel decoding
507
+ } else if (entropyCodingSyncEnabledFlag) {
508
+ parallelismType = 3; // wavefront-based parallel decoding
509
+ } else if (tilesEnabledFlag) {
510
+ parallelismType = 2; // tile-based parallel decoding
511
+ }
512
+
513
+ return {
514
+ parallelismType,
515
+ };
516
+ }
517
+
518
+ /**
519
+ * @param {!Uint8Array} vps
520
+ * @param {!Uint8Array} sps
521
+ * @param {!Uint8Array} pps
522
+ * @param {shaka.transmuxer.H265.DecoderConfigurationRecordType} detail
523
+ * @return {!Uint8Array}
524
+ * @private
525
+ */
526
+ static getVideoConfiguration_(vps, sps, pps, detail) {
527
+ const H265 = shaka.transmuxer.H265;
528
+
529
+ const length = 23 + (3 + 2 + vps.byteLength) +
530
+ (3 + 2 + sps.byteLength) + (3 + 2 + pps.byteLength);
531
+ const data = new Uint8Array(length);
532
+
533
+ data[0] = 0x01; // configurationVersion
534
+ data[1] = ((detail.generalProfileSpace & 0x03) << 6) |
535
+ ((detail.generalTierFlag ? 1 : 0) << 5) |
536
+ ((detail.generalProfileIdc & 0x1F));
537
+ data[2] = detail.generalProfileCompatibilityFlags1;
538
+ data[3] = detail.generalProfileCompatibilityFlags2;
539
+ data[4] = detail.generalProfileCompatibilityFlags3;
540
+ data[5] = detail.generalProfileCompatibilityFlags4;
541
+ data[6] = detail.generalConstraintIndicatorFlags1;
542
+ data[7] = detail.generalConstraintIndicatorFlags2;
543
+ data[8] = detail.generalConstraintIndicatorFlags3;
544
+ data[9] = detail.generalConstraintIndicatorFlags4;
545
+ data[10] = detail.generalConstraintIndicatorFlags5;
546
+ data[11] = detail.generalConstraintIndicatorFlags6;
547
+ data[12] = detail.generalLevelIdc;
548
+ data[13] = 0xF0 |
549
+ ((detail.minSpatialSegmentationIdc & 0x0F00) >> 8);
550
+ data[14] = (detail.minSpatialSegmentationIdc & 0xFF);
551
+ data[15] = 0xFC | (detail.parallelismType & 0x03);
552
+ data[16] = 0xFC | (detail.chromaFormatIdc & 0x03);
553
+ data[17] = 0xF8 | (detail.bitDepthLumaMinus8 & 0x07);
554
+ data[18] = 0xF8 | (detail.bitDepthChromaMinus8 & 0x07);
555
+ data[19] = 0;
556
+ data[20] = 0;
557
+ data[21] = ((detail.constantFrameRate & 0x03) << 6) |
558
+ ((detail.numTemporalLayers & 0x07) << 3) |
559
+ ((detail.temporalIdNested ? 1 : 0) << 2) | 3;
560
+ data[22] = 3;
561
+ data[23 + 0 + 0] = 0x80 | H265.NALU_TYPE_VPS_;
562
+ data[23 + 0 + 1] = 0;
563
+ data[23 + 0 + 2] = 1;
564
+ data[23 + 0 + 3] = (vps.byteLength & 0xFF00) >> 8;
565
+ data[23 + 0 + 4] = (vps.byteLength & 0x00FF) >> 0;
566
+ data.set(vps, 23 + 0 + 5);
567
+ data[23 + (5 + vps.byteLength) + 0] =
568
+ 0x80 | H265.NALU_TYPE_SPS_;
569
+ data[23 + (5 + vps.byteLength) + 1] = 0;
570
+ data[23 + (5 + vps.byteLength) + 2] = 1;
571
+ data[23 + (5 + vps.byteLength) + 3] = (sps.byteLength & 0xFF00) >> 8;
572
+ data[23 + (5 + vps.byteLength) + 4] = (sps.byteLength & 0x00FF) >> 0;
573
+ data.set(sps, 23 + (5 + vps.byteLength) + 5);
574
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 0] =
575
+ 0x80 | H265.NALU_TYPE_PPS_;
576
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 1] = 0;
577
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 2] = 1;
578
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 3] =
579
+ (pps.byteLength & 0xFF00) >> 8;
580
+ data[23 + (5 + vps.byteLength + 5 + sps.byteLength) + 4] =
581
+ (pps.byteLength & 0x00FF) >> 0;
582
+ data.set(pps, 23 + (5 + vps.byteLength + 5 + sps.byteLength) + 5);
583
+ return data;
584
+ }
585
+
586
+ /**
587
+ * @param {!Array.<shaka.extern.VideoNalu>} nalus
588
+ * @return {?{data: !Uint8Array, isKeyframe: boolean}}
589
+ */
590
+ static parseFrame(nalus) {
591
+ const H265 = shaka.transmuxer.H265;
592
+ let isKeyframe = false;
593
+ let data = new Uint8Array([]);
594
+ let hvcSample = false;
595
+ for (const nalu of nalus) {
596
+ let push = false;
597
+ switch (nalu.type) {
598
+ case H265.NALU_TYPE_TRAIL_N_:
599
+ case H265.NALU_TYPE_TRAIL_R_: {
600
+ hvcSample = true;
601
+ push = true;
602
+ break;
603
+ }
604
+ case H265.NALU_TYPE_IDR_W_RADL_:
605
+ case H265.NALU_TYPE_IDR_N_LP_:
606
+ case H265.NALU_TYPE_CRA_NUT_:
607
+ hvcSample = true;
608
+ push = true;
609
+ isKeyframe = true;
610
+ break;
611
+ case H265.NALU_TYPE_VPS_:
612
+ push = true;
613
+ break;
614
+ case H265.NALU_TYPE_SPS_:
615
+ push = true;
616
+ break;
617
+ case H265.NALU_TYPE_PPS_:
618
+ push = true;
619
+ break;
620
+ case H265.NALU_TYPE_AUD_:
621
+ push = true;
622
+ hvcSample = true;
623
+ break;
624
+ case H265.NALU_TYPE_SEI_PREFIX_:
625
+ case H265.NALU_TYPE_SEI_SUFFIX_:
626
+ push = true;
627
+ break;
628
+ default:
629
+ push = false;
630
+ break;
631
+ }
632
+ if (hvcSample && push) {
633
+ const size = nalu.fullData.byteLength;
634
+ const naluLength = new Uint8Array(4);
635
+ naluLength[0] = (size >> 24) & 0xff;
636
+ naluLength[1] = (size >> 16) & 0xff;
637
+ naluLength[2] = (size >> 8) & 0xff;
638
+ naluLength[3] = size & 0xff;
639
+ data = shaka.util.Uint8ArrayUtils.concat(
640
+ data, naluLength, nalu.fullData);
641
+ }
642
+ }
643
+ if (!data.byteLength) {
644
+ return null;
645
+ }
646
+ return {
647
+ data,
648
+ isKeyframe,
649
+ };
650
+ }
651
+ };
652
+
653
+
654
+ /**
655
+ * NALU type for non-reference trailing picture for H.265.
656
+ * @const {number}
657
+ * @private
658
+ */
659
+ shaka.transmuxer.H265.NALU_TYPE_TRAIL_N_ = 0x01;
660
+
661
+
662
+ /**
663
+ * NALU type for reference trailing picture for H.265.
664
+ * @const {number}
665
+ * @private
666
+ */
667
+ shaka.transmuxer.H265.NALU_TYPE_TRAIL_R_ = 0x00;
668
+
669
+
670
+ /**
671
+ * NALU type for Instantaneous Decoder Refresh (IDR) for H.265.
672
+ * @const {number}
673
+ * @private
674
+ */
675
+ shaka.transmuxer.H265.NALU_TYPE_IDR_W_RADL_ = 0x13;
676
+
677
+
678
+ /**
679
+ * NALU type for Instantaneous Decoder Refresh (IDR) for H.265.
680
+ * @const {number}
681
+ * @private
682
+ */
683
+ shaka.transmuxer.H265.NALU_TYPE_IDR_N_LP_ = 0x14;
684
+
685
+ /**
686
+ * NALU type for Clean Random Access (CRA) for H.265.
687
+ * @const {number}
688
+ * @private
689
+ */
690
+ shaka.transmuxer.H265.NALU_TYPE_CRA_NUT_ = 0x15;
691
+
692
+
693
+ /**
694
+ * NALU type for Video Parameter Set (VPS) for H.265.
695
+ * @const {number}
696
+ * @private
697
+ */
698
+ shaka.transmuxer.H265.NALU_TYPE_VPS_ = 0x20;
699
+
700
+
701
+ /**
702
+ * NALU type for Sequence Parameter Set (SPS) for H.265.
703
+ * @const {number}
704
+ * @private
705
+ */
706
+ shaka.transmuxer.H265.NALU_TYPE_SPS_ = 0x21;
707
+
708
+
709
+ /**
710
+ * NALU type for Picture Parameter Set (PPS) for H.265.
711
+ * @const {number}
712
+ * @private
713
+ */
714
+ shaka.transmuxer.H265.NALU_TYPE_PPS_ = 0x22;
715
+
716
+
717
+ /**
718
+ * NALU type for Access Unit Delimiter (AUD) for H.265.
719
+ * @const {number}
720
+ * @private
721
+ */
722
+ shaka.transmuxer.H265.NALU_TYPE_AUD_ = 0x23;
723
+
724
+
725
+ /**
726
+ * NALU type for Supplemental Enhancement Information (SEI) for H.265.
727
+ * @const {number}
728
+ * @private
729
+ */
730
+ shaka.transmuxer.H265.NALU_TYPE_SEI_PREFIX_ = 0x27;
731
+
732
+
733
+ /**
734
+ * NALU type for Supplemental Enhancement Information (SEI) for H.265.
735
+ * @const {number}
736
+ * @private
737
+ */
738
+ shaka.transmuxer.H265.NALU_TYPE_SEI_SUFFIX_ = 0x28;
739
+
740
+
741
+ /**
742
+ * @typedef {{
743
+ * numTemporalLayers: number,
744
+ * temporalIdNested: boolean
745
+ * }}
746
+ *
747
+ * @property {number} numTemporalLayers
748
+ * @property {boolean} temporalIdNested
749
+ */
750
+ shaka.transmuxer.H265.VPSConfiguration;
751
+
752
+
753
+ /**
754
+ * @typedef {{
755
+ * generalProfileSpace: number,
756
+ * generalTierFlag: number,
757
+ * generalLevelIdc: number,
758
+ * generalProfileIdc: number,
759
+ * generalProfileCompatibilityFlags1: number,
760
+ * generalProfileCompatibilityFlags2: number,
761
+ * generalProfileCompatibilityFlags3: number,
762
+ * generalProfileCompatibilityFlags4: number,
763
+ * generalConstraintIndicatorFlags1: number,
764
+ * generalConstraintIndicatorFlags2: number,
765
+ * generalConstraintIndicatorFlags3: number,
766
+ * generalConstraintIndicatorFlags4: number,
767
+ * generalConstraintIndicatorFlags5: number,
768
+ * generalConstraintIndicatorFlags6: number,
769
+ * constantFrameRate: number,
770
+ * minSpatialSegmentationIdc: number,
771
+ * chromaFormatIdc: number,
772
+ * bitDepthLumaMinus8: number,
773
+ * bitDepthChromaMinus8: number,
774
+ * width: number,
775
+ * height: number
776
+ * }}
777
+ *
778
+ * @property {number} generalProfileSpace
779
+ * @property {number} generalTierFlag
780
+ * @property {number} generalLevelIdc
781
+ * @property {number} generalProfileIdc
782
+ * @property {number} generalProfileCompatibilityFlags1
783
+ * @property {number} generalProfileCompatibilityFlags2
784
+ * @property {number} generalProfileCompatibilityFlags3
785
+ * @property {number} generalProfileCompatibilityFlags4
786
+ * @property {number} generalConstraintIndicatorFlags1
787
+ * @property {number} generalConstraintIndicatorFlags2
788
+ * @property {number} generalConstraintIndicatorFlags3
789
+ * @property {number} generalConstraintIndicatorFlags4
790
+ * @property {number} generalConstraintIndicatorFlags5
791
+ * @property {number} generalConstraintIndicatorFlags6
792
+ * @property {number} constantFrameRate
793
+ * @property {number} minSpatialSegmentationIdc
794
+ * @property {number} chromaFormatIdc
795
+ * @property {number} bitDepthLumaMinus8
796
+ * @property {number} bitDepthChromaMinus8
797
+ * @property {number} width
798
+ * @property {number} height
799
+ */
800
+ shaka.transmuxer.H265.SPSConfiguration;
801
+
802
+
803
+ /**
804
+ * @typedef {{
805
+ * parallelismType: number
806
+ * }}
807
+ *
808
+ * @property {number} parallelismType
809
+ */
810
+ shaka.transmuxer.H265.PPSConfiguration;
811
+
812
+
813
+ /**
814
+ * @typedef {{
815
+ * numTemporalLayers: number,
816
+ * temporalIdNested: boolean,
817
+ * generalProfileSpace: number,
818
+ * generalTierFlag: number,
819
+ * generalLevelIdc: number,
820
+ * generalProfileIdc: number,
821
+ * generalProfileCompatibilityFlags1: number,
822
+ * generalProfileCompatibilityFlags2: number,
823
+ * generalProfileCompatibilityFlags3: number,
824
+ * generalProfileCompatibilityFlags4: number,
825
+ * generalConstraintIndicatorFlags1: number,
826
+ * generalConstraintIndicatorFlags2: number,
827
+ * generalConstraintIndicatorFlags3: number,
828
+ * generalConstraintIndicatorFlags4: number,
829
+ * generalConstraintIndicatorFlags5: number,
830
+ * generalConstraintIndicatorFlags6: number,
831
+ * constantFrameRate: number,
832
+ * minSpatialSegmentationIdc: number,
833
+ * chromaFormatIdc: number,
834
+ * bitDepthLumaMinus8: number,
835
+ * bitDepthChromaMinus8: number,
836
+ * parallelismType: number
837
+ * }}
838
+ *
839
+ * @property {number} numTemporalLayers
840
+ * @property {boolean} temporalIdNested
841
+ * @property {number} generalProfileSpace
842
+ * @property {number} generalTierFlag
843
+ * @property {number} generalLevelIdc
844
+ * @property {number} generalProfileIdc
845
+ * @property {number} generalProfileCompatibilityFlags1
846
+ * @property {number} generalProfileCompatibilityFlags2
847
+ * @property {number} generalProfileCompatibilityFlags3
848
+ * @property {number} generalProfileCompatibilityFlags4
849
+ * @property {number} generalConstraintIndicatorFlags1
850
+ * @property {number} generalConstraintIndicatorFlags2
851
+ * @property {number} generalConstraintIndicatorFlags3
852
+ * @property {number} generalConstraintIndicatorFlags4
853
+ * @property {number} generalConstraintIndicatorFlags5
854
+ * @property {number} generalConstraintIndicatorFlags6
855
+ * @property {number} constantFrameRate
856
+ * @property {number} minSpatialSegmentationIdc
857
+ * @property {number} chromaFormatIdc
858
+ * @property {number} bitDepthLumaMinus8
859
+ * @property {number} bitDepthChromaMinus8
860
+ * @property {number} parallelismType
861
+ */
862
+ shaka.transmuxer.H265.DecoderConfigurationRecordType;