260 lines
9.7 KiB
JavaScript
260 lines
9.7 KiB
JavaScript
// Module ID: 4755
|
|
// Function ID: 41302
|
|
// Name: parseBox
|
|
// Dependencies: [4756, 4749, 4746]
|
|
|
|
// Module 4755 (parseBox)
|
|
const require = arg1;
|
|
const module = arg2;
|
|
const dependencyMap = arg6;
|
|
function parseBox(getUint32, sum) {
|
|
let contentOffset;
|
|
let length;
|
|
({ length, contentOffset } = (function getBoxLength(getUint32, sum) {
|
|
const uint32 = getUint32.getUint32(sum);
|
|
if (0 === uint32) {
|
|
let obj = { length: getUint32.byteLength - sum, contentOffset: sum + 4 + 4 };
|
|
return obj;
|
|
} else {
|
|
if (1 === uint32) {
|
|
if (0 === getUint32.getUint32(sum + 8)) {
|
|
obj = { length: getUint32.getUint32(sum + 12), contentOffset: sum + 4 + 4 + 8 };
|
|
return obj;
|
|
}
|
|
}
|
|
obj = { length: uint32, contentOffset: sum + 4 + 4 };
|
|
return obj;
|
|
}
|
|
})(getUint32, sum));
|
|
if (length >= 8) {
|
|
let uint32 = getUint32.getUint32(sum + 4);
|
|
if (1718909296 === uint32) {
|
|
let obj = { type: "ftyp", majorBrand: require(4746) /* getStringFromDataView */.getStringFromDataView(getUint32, contentOffset, 4), length };
|
|
return obj;
|
|
} else if (1768977008 === uint32) {
|
|
obj = { type: "iprp", subBoxes: parseSubBoxes(getUint32, contentOffset, length - (contentOffset - sum)), length };
|
|
return obj;
|
|
} else if (1768973167 === uint32) {
|
|
const obj1 = { type: "ipco", properties: parseSubBoxes(getUint32, contentOffset, length - (contentOffset - sum)), length };
|
|
return obj1;
|
|
} else if (1668246642 === uint32) {
|
|
let obj2 = { type: "colr", icc: parseIcc(getUint32, contentOffset), length };
|
|
return obj2;
|
|
} else {
|
|
const uint8 = getUint32.getUint8(contentOffset);
|
|
if (1835365473 === uint32) {
|
|
let obj3 = { type: "meta" };
|
|
sum = contentOffset + 1 + 3;
|
|
obj3.subBoxes = parseSubBoxes(getUint32, sum, length - (sum - sum));
|
|
obj3.length = length;
|
|
let parseItemLocationBoxResult = obj3;
|
|
} else if (1768714083 === uint32) {
|
|
const obj7 = require(4756) /* getItems */;
|
|
parseItemLocationBoxResult = obj7.parseItemLocationBox(getUint32, uint8, contentOffset + 1, length);
|
|
} else if (1768517222 === uint32) {
|
|
parseItemLocationBoxResult = (function parseItemInformationBox(getUint32, sum, uint8, arg3, length) {
|
|
let obj = { entryCount: arg3 + 3 };
|
|
obj = {};
|
|
let num = 4;
|
|
if (0 === uint8) {
|
|
num = 2;
|
|
}
|
|
obj.entryCount = num;
|
|
obj.itemInfos = obj.entryCount + obj.entryCount;
|
|
const offsets = { offsets: obj }.offsets;
|
|
obj = { type: "iinf", itemInfos: outer1_9(getUint32, offsets.itemInfos, length - (offsets.itemInfos - sum)), length };
|
|
return obj;
|
|
})(getUint32, sum, uint8, contentOffset + 1, length);
|
|
} else if (1768842853 === uint32) {
|
|
const sum1 = contentOffset + 1 + 3;
|
|
let obj4 = { type: "infe", length };
|
|
let sum4 = sum1;
|
|
if (!tmp3) {
|
|
obj4.itemId = getUint32.getUint16(sum1);
|
|
const sum2 = sum1 + 2;
|
|
obj4.itemProtectionIndex = getUint32.getUint16(sum2);
|
|
const sum3 = sum2 + 2;
|
|
obj2 = require(4746) /* getStringFromDataView */;
|
|
obj4.itemName = obj2.getNullTerminatedStringFromDataView(getUint32, sum3);
|
|
sum4 = sum3 + (obj4.itemName.length + 1);
|
|
}
|
|
parseItemLocationBoxResult = obj4;
|
|
if (uint8 >= 2) {
|
|
if (2 === uint8) {
|
|
obj4.itemId = getUint32.getUint16(sum4);
|
|
let sum5 = sum4 + 2;
|
|
} else {
|
|
sum5 = sum4;
|
|
if (3 === uint8) {
|
|
obj4.itemId = getUint32.getUint32(sum4);
|
|
sum5 = sum4 + 4;
|
|
}
|
|
}
|
|
obj4.itemProtectionIndex = getUint32.getUint16(sum5);
|
|
const sum6 = sum5 + 2;
|
|
obj4.itemType = getUint32.getUint32(sum6);
|
|
const sum7 = sum6 + 4;
|
|
obj3 = require(4746) /* getStringFromDataView */;
|
|
obj4.itemName = obj3.getNullTerminatedStringFromDataView(getUint32, sum7);
|
|
const sum8 = sum7 + (obj4.itemName.length + 1);
|
|
if (obj4.itemType === c4) {
|
|
obj4 = require(4746) /* getStringFromDataView */;
|
|
obj4.contentType = obj4.getNullTerminatedStringFromDataView(getUint32, sum8);
|
|
const sum9 = sum8 + (obj4.contentType.length + 1);
|
|
parseItemLocationBoxResult = obj4;
|
|
if (sum + length > sum9) {
|
|
obj4.contentEncoding = require(4746) /* getStringFromDataView */.getNullTerminatedStringFromDataView(getUint32, sum9);
|
|
const sum10 = obj4.contentEncoding.length + 1;
|
|
parseItemLocationBoxResult = obj4;
|
|
const obj6 = require(4746) /* getStringFromDataView */;
|
|
}
|
|
} else {
|
|
parseItemLocationBoxResult = obj4;
|
|
if (obj4.itemType === c5) {
|
|
obj4.itemUri = require(4746) /* getStringFromDataView */.getNullTerminatedStringFromDataView(getUint32, sum8);
|
|
const sum11 = obj4.itemUri.length + 1;
|
|
parseItemLocationBoxResult = obj4;
|
|
const obj14 = require(4746) /* getStringFromDataView */;
|
|
}
|
|
}
|
|
}
|
|
tmp3 = 0 !== uint8 && 1 !== uint8;
|
|
} else {
|
|
parseItemLocationBoxResult = { type: undefined, length };
|
|
}
|
|
return parseItemLocationBoxResult;
|
|
}
|
|
}
|
|
const tmp = (function getBoxLength(getUint32, sum) {
|
|
const uint32 = getUint32.getUint32(sum);
|
|
if (0 === uint32) {
|
|
let obj = { length: getUint32.byteLength - sum, contentOffset: sum + 4 + 4 };
|
|
return obj;
|
|
} else {
|
|
if (1 === uint32) {
|
|
if (0 === getUint32.getUint32(sum + 8)) {
|
|
obj = { length: getUint32.getUint32(sum + 12), contentOffset: sum + 4 + 4 + 8 };
|
|
return obj;
|
|
}
|
|
}
|
|
obj = { length: uint32, contentOffset: sum + 4 + 4 };
|
|
return obj;
|
|
}
|
|
})(getUint32, sum);
|
|
}
|
|
function findIlocItem(subBoxes) {
|
|
let closure_0 = arg1;
|
|
subBoxes = subBoxes.subBoxes;
|
|
const items = subBoxes.find((type) => "iloc" === type.type).items;
|
|
return items.find((itemId) => itemId.itemId === closure_0);
|
|
}
|
|
function parseIcc(getUint32, contentOffset) {
|
|
let obj = require(4746) /* getStringFromDataView */;
|
|
const stringFromDataView = obj.getStringFromDataView(getUint32, contentOffset, 4);
|
|
obj = { offset: contentOffset + 4, length: getUint32.getUint32(contentOffset + 4), chunkNumber: 1, chunksTotal: 1 };
|
|
return obj;
|
|
}
|
|
function parseSubBoxes(getUint32, contentOffset, arg2) {
|
|
const items = [c3, c4];
|
|
const items1 = [];
|
|
let sum = contentOffset;
|
|
if (contentOffset < contentOffset + arg2) {
|
|
const arr3 = parseBox(getUint32, sum);
|
|
while (undefined !== arr3) {
|
|
let tmp4 = undefined === arr3.type;
|
|
if (!tmp4) {
|
|
let tmp5 = undefined !== arr3.itemType && -1 === items.indexOf(arr3.itemType);
|
|
tmp4 = tmp5;
|
|
}
|
|
if (!tmp4) {
|
|
let arr = items1.push(arr3);
|
|
}
|
|
sum = sum + arr3.length;
|
|
if (sum >= contentOffset + arg2) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return items1;
|
|
}
|
|
let c3 = 1165519206;
|
|
let c4 = 1835625829;
|
|
let c5 = 1970432288;
|
|
arg5.ITEM_INFO_TYPE_EXIF = 1165519206;
|
|
arg5.ITEM_INFO_TYPE_MIME = 1835625829;
|
|
arg5.parseBox = parseBox;
|
|
arg5.findOffsets = function findOffsets(byteLength) {
|
|
if (!module(4749).USE_EXIF) {
|
|
if (!module(4749).USE_XMP) {
|
|
if (!module(4749).USE_ICC) {
|
|
return {};
|
|
}
|
|
}
|
|
}
|
|
let obj = {};
|
|
let num = 0;
|
|
let tmp5;
|
|
if (8 <= byteLength.byteLength) {
|
|
const arr = parseBox(byteLength, num);
|
|
while (undefined !== arr) {
|
|
tmp5 = arr;
|
|
if ("meta" === arr.type) {
|
|
break;
|
|
} else {
|
|
num = num + arr.length;
|
|
if (num + 4 + 4 > byteLength.byteLength) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (tmp5) {
|
|
if (module(4749).USE_EXIF) {
|
|
obj.tiffHeaderOffset = (function findExifOffset(getUint32, subBoxes) {
|
|
const tmp = outer1_7(subBoxes, (function findIinfExifItemId(subBoxes) {
|
|
subBoxes = subBoxes.subBoxes;
|
|
const itemInfos = subBoxes.find((type) => "iinf" === type.type).itemInfos;
|
|
return itemInfos.find((itemType) => itemType.itemType === outer3_3);
|
|
})(subBoxes).itemId);
|
|
const sum = tmp.baseOffset + tmp.extents[0].extentOffset;
|
|
const sum1 = sum + 4;
|
|
return sum1 + getUint32.getUint32(sum);
|
|
})(byteLength, tmp5);
|
|
}
|
|
if (module(4749).USE_XMP) {
|
|
obj.xmpChunks = (function findXmpChunks(subBoxes) {
|
|
const itemId = (function findIinfXmpItemId(subBoxes) {
|
|
subBoxes = subBoxes.subBoxes;
|
|
const itemInfos = subBoxes.find((type) => "iinf" === type.type).itemInfos;
|
|
return itemInfos.find((itemType) => {
|
|
let tmp = itemType.itemType === outer3_4;
|
|
if (tmp) {
|
|
tmp = "application/rdf+xml" === itemType.contentType;
|
|
}
|
|
return tmp;
|
|
});
|
|
})(subBoxes).itemId;
|
|
const first = outer1_7(subBoxes, itemId).extents[0];
|
|
let tmp = outer1_7(subBoxes, itemId);
|
|
const items = [{ dataOffset: outer1_7(subBoxes, itemId).baseOffset + first.extentOffset, length: first.extentLength }];
|
|
return items;
|
|
})(tmp5);
|
|
}
|
|
if (module(4749).USE_ICC) {
|
|
obj.iccChunks = (function findIccChunks(subBoxes) {
|
|
subBoxes = subBoxes.subBoxes;
|
|
const subBoxes1 = subBoxes.find((type) => "iprp" === type.type).subBoxes;
|
|
const properties = subBoxes1.find((type) => "ipco" === type.type).properties;
|
|
const icc = properties.find((type) => "colr" === type.type).icc;
|
|
if (icc) {
|
|
const items = [tmp];
|
|
return items;
|
|
}
|
|
})(tmp5);
|
|
}
|
|
obj.hasAppMarkers = undefined !== obj.tiffHeaderOffset || undefined !== obj.xmpChunks || undefined !== obj.iccChunks;
|
|
} else {
|
|
obj = { hasAppMarkers: false };
|
|
}
|
|
return obj;
|
|
};
|