decord/source/modules/thumbhash/ThumbhashUtils.tsx
2026-07-24 07:16:23 +00:00

308 lines
9 KiB
TypeScript

// Module ID: 15272
// Function ID: 116440
// Name: thumbHashToRGBA
// Dependencies: [14133, 2]
// Exports: createThumbhashImageFromPlaceholder
// Module 15272 (thumbHashToRGBA)
function thumbHashToRGBA(arg0) {
let obj = arg1;
const _require = arg0;
if (arg1 === undefined) {
obj = {};
}
let num = obj.detail;
if (num === undefined) {
num = 1;
}
let num2 = obj.pop;
if (num2 === undefined) {
num2 = 1;
}
let num7;
let c2;
function decodeChannel(maxResult, maxResult1, arg2) {
const items = [];
for (let num = 0; num < maxResult1; num = num + 1) {
let num2 = 1;
if (num) {
num2 = 0;
}
if (num2 * maxResult1 < maxResult * (maxResult1 - num)) {
do {
let tmp = table;
let tmp2 = num7;
let tmp3 = c2;
let tmp4 = c2;
let tmp5 = +c2;
c2 = tmp5 + 1;
let arr = items.push(((table[num7 + (c2 >> 1)] >> ((1 & tmp5) << 2) & 15) / 7.5 - 1) * arg2);
num2 = num2 + 1;
result = num2 * maxResult1;
result1 = maxResult * (maxResult1 - num);
} while (result < result1);
}
}
return items;
}
let tmp3 = (arg0[0] | arg0[1] << 8 | arg0[2] << 16) >> 23;
if ((arg0[3] | arg0[4] << 8) >> 15) {
let num3 = 7;
if (tmp3) {
num3 = 5;
}
let tmp5 = num3;
} else {
tmp5 = 7 & tmp2;
}
const maxResult = max(3, tmp5);
if ((arg0[3] | arg0[4] << 8) >> 15) {
let num4 = 7 & tmp2;
} else {
num4 = 7;
if (tmp3) {
num4 = 5;
}
}
const maxResult1 = max(3, num4);
let num5 = 1;
if (tmp3) {
num5 = (15 & arg0[5]) / 15;
}
num7 = 5;
if (tmp3) {
num7 = 6;
}
c2 = 0;
const decodeChannelResult = decodeChannel(maxResult, maxResult1, ((arg0[0] | arg0[1] << 8 | arg0[2] << 16) >> 18 & 31) / 31 / 2);
const tmp8 = arg0[5] >> 4;
const decodeChannelResult1 = decodeChannel(3, 3, ((arg0[3] | arg0[4] << 8) >> 3 & 63) / 63 * num2);
if (tmp3) {
let decodeChannelResult3 = decodeChannel(5, 5, tmp8 / 15);
} else {
decodeChannelResult3 = [];
}
const decodeChannelResult2 = decodeChannel(3, 3, ((arg0[3] | arg0[4] << 8) >> 9 & 63) / 63 * num2);
let result = _require(num7[0]).thumbHashToApproximateAspectRatio(arg0);
let num8 = 32;
if (result <= 1) {
num8 = 32 * result;
}
const w = round(num8);
let num9 = 32;
if (result > 1) {
num9 = 32 / result;
}
const h = round(num9);
const rgba = new Uint8Array(w * h * 4);
let items = [];
const items1 = [];
let result1 = (63 & tmp) / 63;
let num10 = 0;
let num11 = 0;
if (0 < h) {
do {
let sum11 = num11;
let tmp26 = tmp19;
let tmp27 = tmp20;
let tmp28 = tmp21;
let tmp29 = tmp22;
let tmp30 = tmp23;
let tmp31 = tmp24;
let num12 = 0;
if (0 < w) {
do {
let num13 = 3;
if (tmp3) {
num13 = 5;
}
let maxResult2 = max(maxResult, num13);
let num14 = 0;
let num15 = 0;
if (0 < maxResult2) {
do {
items[num14] = cos(PI / w * (num12 + 0.5) * num14);
num14 = num14 + 1;
num15 = num14;
} while (num14 < maxResult2);
}
let num16 = 3;
if (tmp3) {
num16 = 5;
}
let maxResult3 = max(maxResult1, num16);
let num17 = 0;
let num18 = 0;
if (0 < maxResult3) {
do {
items1[num17] = cos(PI / h * (num10 + 0.5) * num17);
num17 = num17 + 1;
num18 = num17;
} while (num17 < maxResult3);
}
let tmp34 = result1;
let num19 = 0;
let num20 = 0;
let tmp35 = result1;
let num21 = 0;
let num22 = 0;
if (0 < maxResult1) {
do {
let num23 = 1;
if (num19) {
num23 = 0;
}
let result2 = 2 * items1[num19];
let tmp37 = num23;
let tmp38 = tmp34;
let sum2 = num20;
let tmp40 = tmp34;
let tmp41 = num20;
let tmp42 = num23;
if (num23 * maxResult1 < maxResult * (maxResult1 - num19)) {
do {
let tmp43 = tmp37 > num || num19 > num;
let sum = tmp38;
if (!tmp43) {
sum = tmp38 + decodeChannelResult[sum2] * items[tmp37] * result2;
}
sum1 = tmp37 + 1;
sum2 = sum2 + 1;
tmp38 = sum;
tmp37 = sum1;
tmp40 = sum;
tmp41 = sum2;
tmp42 = sum1;
} while (sum1 * maxResult1 < maxResult * (maxResult1 - num19));
}
num19 = num19 + 1;
tmp34 = tmp40;
num20 = tmp41;
tmp26 = tmp42;
tmp35 = tmp40;
num22 = tmp41;
tmp27 = result2;
num21 = num19;
} while (num19 < maxResult1);
}
let tmp46 = tmp26;
let tmp47 = tmp27;
let tmp48 = tmp17;
let tmp49 = tmp18;
let num24 = 0;
let num25 = 0;
do {
let num26 = 1;
if (num24) {
num26 = 0;
}
let result3 = 2 * items1[num24];
let sum5 = num26;
let sum3 = tmp48;
let sum4 = tmp49;
let sum6 = num25;
let tmp55 = tmp48;
let tmp56 = tmp49;
let tmp57 = num25;
let tmp58 = num26;
if (num26 < 3 - num24) {
do {
let result4 = items[sum5] * result3;
sum3 = sum3 + decodeChannelResult1[sum6] * result4;
sum4 = sum4 + decodeChannelResult2[sum6] * result4;
sum5 = sum5 + 1;
sum6 = sum6 + 1;
tmp55 = sum3;
tmp56 = sum4;
tmp57 = sum6;
tmp58 = sum5;
diff = 3 - num24;
} while (sum5 < diff);
}
sum7 = num24 + 1;
tmp48 = tmp55;
tmp49 = tmp56;
num24 = sum7;
num25 = tmp57;
} while (sum7 < 3);
let tmp62 = num5;
let num27 = 0;
let num28 = 0;
let tmp63 = num5;
if (tmp3) {
do {
let num29 = 1;
if (num27) {
num29 = 0;
}
let result5 = 2 * items1[num27];
let sum9 = num29;
let sum8 = tmp62;
let sum10 = num28;
let tmp68 = tmp62;
let tmp69 = num28;
let tmp70 = num29;
if (num29 < 5 - num27) {
do {
sum8 = sum8 + decodeChannelResult3[sum10] * items[sum9] * result5;
sum9 = sum9 + 1;
sum10 = sum10 + 1;
tmp68 = sum8;
tmp69 = sum10;
tmp70 = sum9;
diff1 = 5 - num27;
} while (sum9 < diff1);
}
num27 = num27 + 1;
tmp62 = tmp68;
num28 = tmp69;
tmp30 = tmp70;
tmp63 = tmp68;
tmp29 = tmp69;
tmp31 = result5;
tmp28 = num27;
} while (num27 < 5);
}
let diff2 = tmp35 - 0.6666666666666666 * tmp55;
let result6 = (3 * tmp35 - diff2 + tmp56) / 2;
rgba[sum11] = max(0, 255 * min(1, result6));
rgba[sum11 + 1] = max(0, 255 * min(1, result6 - tmp56));
rgba[sum11 + 2] = max(0, 255 * min(1, diff2));
rgba[sum11 + 3] = max(0, 255 * min(1, tmp63));
num12 = num12 + 1;
sum11 = sum11 + 4;
let tmp74 = tmp63;
num11 = sum11;
let tmp75 = tmp35;
let tmp76 = tmp55;
let tmp77 = tmp56;
let tmp78 = num15;
let tmp79 = maxResult2;
let tmp80 = num18;
let tmp81 = maxResult3;
let tmp82 = num21;
let tmp83 = num22;
tmp19 = tmp26;
tmp20 = tmp27;
let tmp84 = sum7;
let tmp85 = tmp57;
let tmp86 = tmp58;
let tmp87 = result3;
tmp21 = tmp28;
tmp22 = tmp29;
tmp23 = tmp30;
tmp24 = tmp31;
} while (num12 < w);
}
num10 = num10 + 1;
} while (num10 < h);
}
return { w, h, rgba };
}
let result = require("set").fileFinishedImporting("modules/thumbhash/ThumbhashUtils.tsx");
export const createThumbhashImageFromPlaceholder = function createThumbhashImageFromPlaceholder(placeholder) {
const tmp = thumbHashToRGBA(Uint8Array.from(atob(placeholder), (str) => str.charCodeAt(0)), { detail: 1, pop: 1.1 });
return require(14133) /* thumbHashToRGBA */.rgbaToDataURL(tmp.w, tmp.h, tmp.rgba);
};
export { thumbHashToRGBA };