diff --git a/dist/bundles/mediabunny.cjs b/dist/bundles/mediabunny.cjs index 1a91660f1f0d24296002c852b44ddfe22ca47143..3e27051639e6d9a44bc6fc616d6719b38ef83ddc 100644 --- a/dist/bundles/mediabunny.cjs +++ b/dist/bundles/mediabunny.cjs @@ -2191,10 +2191,11 @@ var Mediabunny = (() => { const picWidthInMbsMinus1 = readExpGolomb(bitstream); const picHeightInMapUnitsMinus1 = readExpGolomb(bitstream); const codedWidth = 16 * (picWidthInMbsMinus1 + 1); - const codedHeight = 16 * (picHeightInMapUnitsMinus1 + 1); + // Patched (4k-video-upscaler, formats design §1): H.264 §7.4.2.1.1 FrameHeightInMbs = (2 − frame_mbs_only_flag) × PicHeightInMapUnits. + const frameMbsOnlyFlag = bitstream.readBits(1); + const codedHeight = 16 * (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1); let displayWidth = codedWidth; let displayHeight = codedHeight; - const frameMbsOnlyFlag = bitstream.readBits(1); if (!frameMbsOnlyFlag) { bitstream.skipBits(1); } diff --git a/dist/bundles/mediabunny.mjs b/dist/bundles/mediabunny.mjs index 12b1c71b5d0e954c06ba36709c05eb4a7a31be61..14b0a7e7871c5fcd2dca13222d11ed1c2bd958a4 100644 --- a/dist/bundles/mediabunny.mjs +++ b/dist/bundles/mediabunny.mjs @@ -2034,10 +2034,11 @@ var parseAvcSps = (sps) => { const picWidthInMbsMinus1 = readExpGolomb(bitstream); const picHeightInMapUnitsMinus1 = readExpGolomb(bitstream); const codedWidth = 16 * (picWidthInMbsMinus1 + 1); - const codedHeight = 16 * (picHeightInMapUnitsMinus1 + 1); + // Patched (4k-video-upscaler, formats design §1): H.264 §7.4.2.1.1 FrameHeightInMbs = (2 − frame_mbs_only_flag) × PicHeightInMapUnits. + const frameMbsOnlyFlag = bitstream.readBits(1); + const codedHeight = 16 * (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1); let displayWidth = codedWidth; let displayHeight = codedHeight; - const frameMbsOnlyFlag = bitstream.readBits(1); if (!frameMbsOnlyFlag) { bitstream.skipBits(1); } diff --git a/dist/bundles/mediabunny.node.cjs b/dist/bundles/mediabunny.node.cjs index 47a99909074645a807acbe24f50959efff7a1cc7..728d3bae62a9f468227f5e85a81a7198dbabb9ef 100644 --- a/dist/bundles/mediabunny.node.cjs +++ b/dist/bundles/mediabunny.node.cjs @@ -2188,10 +2188,11 @@ var Mediabunny = (() => { const picWidthInMbsMinus1 = readExpGolomb(bitstream); const picHeightInMapUnitsMinus1 = readExpGolomb(bitstream); const codedWidth = 16 * (picWidthInMbsMinus1 + 1); - const codedHeight = 16 * (picHeightInMapUnitsMinus1 + 1); + // Patched (4k-video-upscaler, formats design §1): H.264 §7.4.2.1.1 FrameHeightInMbs = (2 − frame_mbs_only_flag) × PicHeightInMapUnits. + const frameMbsOnlyFlag = bitstream.readBits(1); + const codedHeight = 16 * (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1); let displayWidth = codedWidth; let displayHeight = codedHeight; - const frameMbsOnlyFlag = bitstream.readBits(1); if (!frameMbsOnlyFlag) { bitstream.skipBits(1); } diff --git a/dist/modules/src/codec-data.js b/dist/modules/src/codec-data.js index 88f9e0013df04b1d82679f2ec86818803aa93186..aeb90ac8ca13a27566efab0fe5f05a471f631648 100644 --- a/dist/modules/src/codec-data.js +++ b/dist/modules/src/codec-data.js @@ -479,10 +479,11 @@ export const parseAvcSps = (sps) => { const picWidthInMbsMinus1 = readExpGolomb(bitstream); const picHeightInMapUnitsMinus1 = readExpGolomb(bitstream); const codedWidth = 16 * (picWidthInMbsMinus1 + 1); - const codedHeight = 16 * (picHeightInMapUnitsMinus1 + 1); + // Patched (4k-video-upscaler, formats design §1): H.264 §7.4.2.1.1 FrameHeightInMbs = (2 − frame_mbs_only_flag) × PicHeightInMapUnits. + const frameMbsOnlyFlag = bitstream.readBits(1); + const codedHeight = 16 * (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1); let displayWidth = codedWidth; let displayHeight = codedHeight; - const frameMbsOnlyFlag = bitstream.readBits(1); if (!frameMbsOnlyFlag) { bitstream.skipBits(1); // mb_adaptive_frame_field_flag } diff --git a/src/codec-data.ts b/src/codec-data.ts index 25eab4ef23f5da245849f7f4a79c782ae30a4f9f..6a383deb2e5924f6112243a4df73dc62e0e9c87b 100644 --- a/src/codec-data.ts +++ b/src/codec-data.ts @@ -637,11 +637,11 @@ export const parseAvcSps = (sps: Uint8Array): AvcSpsInfo | null => { const picWidthInMbsMinus1 = readExpGolomb(bitstream); const picHeightInMapUnitsMinus1 = readExpGolomb(bitstream); const codedWidth = 16 * (picWidthInMbsMinus1 + 1); - const codedHeight = 16 * (picHeightInMapUnitsMinus1 + 1); + // Patched (4k-video-upscaler, formats design §1): H.264 §7.4.2.1.1 FrameHeightInMbs = (2 − frame_mbs_only_flag) × PicHeightInMapUnits. + const frameMbsOnlyFlag = bitstream.readBits(1); + const codedHeight = 16 * (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1); let displayWidth = codedWidth; let displayHeight = codedHeight; - - const frameMbsOnlyFlag = bitstream.readBits(1); if (!frameMbsOnlyFlag) { bitstream.skipBits(1); // mb_adaptive_frame_field_flag }