mirror of
https://github.com/yume-chan/ya-webadb.git
synced 2025-10-03 09:49:24 +02:00
fix(webcodec): fix a h265 header parsing issue
This commit is contained in:
parent
e7827b011a
commit
85d082f9e7
1 changed files with 26 additions and 17 deletions
|
@ -14,6 +14,9 @@
|
||||||
// cspell: ignore texmc
|
// cspell: ignore texmc
|
||||||
// cspell: ignore rbsp
|
// cspell: ignore rbsp
|
||||||
// cspell: ignore cprms
|
// cspell: ignore cprms
|
||||||
|
// cspell: ignore nalu
|
||||||
|
// cspell: ignore sodb
|
||||||
|
// cspell: ignore luma
|
||||||
|
|
||||||
import { NaluSodbBitReader, annexBSplitNalu } from "./nalu.js";
|
import { NaluSodbBitReader, annexBSplitNalu } from "./nalu.js";
|
||||||
|
|
||||||
|
@ -275,9 +278,9 @@ export function h265ParseSequenceParameterSet(nalu: Uint8Array) {
|
||||||
const log2_max_pic_order_cnt_lsb_minus4 =
|
const log2_max_pic_order_cnt_lsb_minus4 =
|
||||||
reader.decodeExponentialGolombNumber();
|
reader.decodeExponentialGolombNumber();
|
||||||
|
|
||||||
let sps_max_dec_pic_buffering_minus1: number[] | undefined;
|
const sps_max_dec_pic_buffering_minus1: number[] = [];
|
||||||
let sps_max_num_reorder_pics: number[] | undefined;
|
const sps_max_num_reorder_pics: number[] = [];
|
||||||
let sps_max_latency_increase_plus1: number[] | undefined;
|
const sps_max_latency_increase_plus1: number[] = [];
|
||||||
const sps_sub_layer_ordering_info_present_flag = !!reader.next();
|
const sps_sub_layer_ordering_info_present_flag = !!reader.next();
|
||||||
for (
|
for (
|
||||||
let i = sps_sub_layer_ordering_info_present_flag
|
let i = sps_sub_layer_ordering_info_present_flag
|
||||||
|
@ -286,17 +289,11 @@ export function h265ParseSequenceParameterSet(nalu: Uint8Array) {
|
||||||
i <= sps_max_sub_layers_minus1;
|
i <= sps_max_sub_layers_minus1;
|
||||||
i += 1
|
i += 1
|
||||||
) {
|
) {
|
||||||
sps_max_dec_pic_buffering_minus1 = [];
|
sps_max_dec_pic_buffering_minus1[i] =
|
||||||
sps_max_num_reorder_pics = [];
|
reader.decodeExponentialGolombNumber();
|
||||||
sps_max_latency_increase_plus1 = [];
|
sps_max_num_reorder_pics[i] = reader.decodeExponentialGolombNumber();
|
||||||
for (let i = 0; i <= sps_max_sub_layers_minus1; i += 1) {
|
sps_max_latency_increase_plus1[i] =
|
||||||
sps_max_dec_pic_buffering_minus1[i] =
|
reader.decodeExponentialGolombNumber();
|
||||||
reader.decodeExponentialGolombNumber();
|
|
||||||
sps_max_num_reorder_pics[i] =
|
|
||||||
reader.decodeExponentialGolombNumber();
|
|
||||||
sps_max_latency_increase_plus1[i] =
|
|
||||||
reader.decodeExponentialGolombNumber();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const log2_min_luma_coding_block_size_minus3 =
|
const log2_min_luma_coding_block_size_minus3 =
|
||||||
|
@ -370,7 +367,10 @@ export function h265ParseSequenceParameterSet(nalu: Uint8Array) {
|
||||||
const vui_parameters_present_flag = !!reader.next();
|
const vui_parameters_present_flag = !!reader.next();
|
||||||
let vuiParameters: H265VuiParameters | undefined;
|
let vuiParameters: H265VuiParameters | undefined;
|
||||||
if (vui_parameters_present_flag) {
|
if (vui_parameters_present_flag) {
|
||||||
vuiParameters = h265ParseVuiParameters(reader);
|
vuiParameters = h265ParseVuiParameters(
|
||||||
|
reader,
|
||||||
|
sps_max_sub_layers_minus1,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const sps_extension_present_flag = !!reader.next();
|
const sps_extension_present_flag = !!reader.next();
|
||||||
|
@ -897,7 +897,10 @@ export function h265ParseShortTermReferencePictureSet(
|
||||||
/**
|
/**
|
||||||
* E.2.1 VUI parameters syntax
|
* E.2.1 VUI parameters syntax
|
||||||
*/
|
*/
|
||||||
export function h265ParseVuiParameters(reader: NaluSodbBitReader) {
|
export function h265ParseVuiParameters(
|
||||||
|
reader: NaluSodbBitReader,
|
||||||
|
sps_max_sub_layers_minus1: number,
|
||||||
|
) {
|
||||||
const aspect_ratio_info_present_flag = !!reader.next();
|
const aspect_ratio_info_present_flag = !!reader.next();
|
||||||
let aspect_ratio_idc: number | undefined;
|
let aspect_ratio_idc: number | undefined;
|
||||||
let sar_width: number | undefined;
|
let sar_width: number | undefined;
|
||||||
|
@ -966,6 +969,7 @@ export function h265ParseVuiParameters(reader: NaluSodbBitReader) {
|
||||||
let vui_poc_proportional_to_timing_flag: boolean | undefined;
|
let vui_poc_proportional_to_timing_flag: boolean | undefined;
|
||||||
let vui_num_ticks_poc_diff_one_minus1: number | undefined;
|
let vui_num_ticks_poc_diff_one_minus1: number | undefined;
|
||||||
let vui_hrd_parameters_present_flag: boolean | undefined;
|
let vui_hrd_parameters_present_flag: boolean | undefined;
|
||||||
|
let vui_hrd_parameters: H265HrdParameters | undefined;
|
||||||
if (vui_timing_info_present_flag) {
|
if (vui_timing_info_present_flag) {
|
||||||
vui_num_units_in_tick = reader.read(32);
|
vui_num_units_in_tick = reader.read(32);
|
||||||
vui_time_scale = reader.read(32);
|
vui_time_scale = reader.read(32);
|
||||||
|
@ -976,7 +980,11 @@ export function h265ParseVuiParameters(reader: NaluSodbBitReader) {
|
||||||
}
|
}
|
||||||
vui_hrd_parameters_present_flag = !!reader.next();
|
vui_hrd_parameters_present_flag = !!reader.next();
|
||||||
if (vui_hrd_parameters_present_flag) {
|
if (vui_hrd_parameters_present_flag) {
|
||||||
throw new Error("Not implemented");
|
vui_hrd_parameters = h265ParseHrdParameters(
|
||||||
|
reader,
|
||||||
|
true,
|
||||||
|
sps_max_sub_layers_minus1,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1037,6 +1045,7 @@ export function h265ParseVuiParameters(reader: NaluSodbBitReader) {
|
||||||
vui_poc_proportional_to_timing_flag,
|
vui_poc_proportional_to_timing_flag,
|
||||||
vui_num_ticks_poc_diff_one_minus1,
|
vui_num_ticks_poc_diff_one_minus1,
|
||||||
vui_hrd_parameters_present_flag,
|
vui_hrd_parameters_present_flag,
|
||||||
|
vui_hrd_parameters,
|
||||||
|
|
||||||
bitstream_restriction_flag,
|
bitstream_restriction_flag,
|
||||||
tiles_fixed_structure_flag,
|
tiles_fixed_structure_flag,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue