aboutsummaryrefslogtreecommitdiff
path: root/webAO/utils/calculateWebpLength.js
diff options
context:
space:
mode:
authorcaleb.mabry.15@cnu.edu <caleb.mabry.15@cnu.edu>2022-03-08 23:07:09 -0500
committercaleb.mabry.15@cnu.edu <caleb.mabry.15@cnu.edu>2022-03-08 23:07:09 -0500
commit6f4874fa20d4fa156dd762d5dacefd8a2e656bf0 (patch)
treeb2258517e17d4b1971789959fa3868c5c58d2e59 /webAO/utils/calculateWebpLength.js
parent63a282481d033640a87f97b74f31136410c93717 (diff)
Lots of changes
Diffstat (limited to 'webAO/utils/calculateWebpLength.js')
-rw-r--r--webAO/utils/calculateWebpLength.js22
1 files changed, 22 insertions, 0 deletions
diff --git a/webAO/utils/calculateWebpLength.js b/webAO/utils/calculateWebpLength.js
new file mode 100644
index 0000000..38da7c1
--- /dev/null
+++ b/webAO/utils/calculateWebpLength.js
@@ -0,0 +1,22 @@
+const calculateWebpLength = (webpFile) => {
+ let d = new Uint8Array(webpFile);
+ // https://developers.google.com/speed/webp/docs/riff_container#animation
+ let duration = 0;
+ for (var i = 0; i < d.length; i++) {
+ // Find ANMF header (41 4E 4D 46)
+ if (d[i] === 0x41
+ && d[i + 1] === 0x4E
+ && d[i + 2] === 0x4D
+ && d[i + 3] === 0x46) {
+ // Swap 5th and 6th bytes to get the delay per frame
+ let delay = (d[i + 21] << 8) | (d[i + 20] & 0xFF);
+
+ // Should be aware browsers have a minimum frame delay
+ // e.g. 6ms for IE, 2ms modern browsers (50fps)
+ duration += delay < 2 ? 10 : delay;
+ }
+ }
+ return duration;
+}
+
+export default calculateWebpLength \ No newline at end of file