From edb0bac3a5ec4a4c8091d504902bf30a37cc2f65 Mon Sep 17 00:00:00 2001 From: Muffin Date: Mon, 5 Aug 2024 19:54:22 -0500 Subject: [PATCH 1/3] Lily/Video: fix probable crash in getFrame before loaded --- extensions/Lily/Video.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/extensions/Lily/Video.js b/extensions/Lily/Video.js index c68eea793..8c9046f98 100644 --- a/extensions/Lily/Video.js +++ b/extensions/Lily/Video.js @@ -492,9 +492,14 @@ return ""; } - canvas.width = videoSkin.videoElement.videoWidth; - canvas.height = videoSkin.videoElement.videoHeight; - ctx.drawImage(videoSkin.videoElement, 0, 0); + const videoElement = videoSkin.videoElement; + if (videoElement.videoWidth === 0 || videoElement.videoHeight === 0) { + return ""; + } + + canvas.width = videoElement.videoWidth; + canvas.height = videoElement.videoHeight; + ctx.drawImage(videoElement, 0, 0); return canvas.toDataURL(); } From 6ec5c7e2d9860d23db5619c81bdea5e6faa6cdb9 Mon Sep 17 00:00:00 2001 From: Muffin Date: Mon, 5 Aug 2024 21:20:07 -0500 Subject: [PATCH 2/3] playback rate --- extensions/Lily/Video.js | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/extensions/Lily/Video.js b/extensions/Lily/Video.js index 8c9046f98..9525610b0 100644 --- a/extensions/Lily/Video.js +++ b/extensions/Lily/Video.js @@ -307,6 +307,21 @@ }, }, }, + { + opcode: "setPlaybackRate", + blockType: Scratch.BlockType.COMMAND, + text: Scratch.translate("set playback rate of video [NAME] to [RATE]"), + arguments: { + NAME: { + type: Scratch.ArgumentType.STRING, + defaultValue: "my video", + }, + RATE: { + type: Scratch.ArgumentType.NUMBER, + defaultValue: "2", + }, + }, + } ], menus: { targets: { @@ -349,6 +364,10 @@ text: Scratch.translate("height"), value: "height", }, + { + text: Scratch.translate("playback rate"), + value: "playback rate", + }, ], }, }, @@ -475,6 +494,8 @@ return videoSkin.size[0]; case "height": return videoSkin.size[1]; + case "playback rate": + return videoSkin.videoElement.playbackRate; default: return 0; } @@ -533,13 +554,28 @@ setVolume(args) { const videoName = Cast.toString(args.NAME); - const value = Cast.toNumber(args.VALUE); const videoSkin = this.videos[videoName]; if (!videoSkin) return; + const value = Cast.toNumber(args.VALUE); videoSkin.videoElement.volume = Math.min(1, Math.max(0, value / 100)); } + setPlaybackRate(args) { + const videoName = Cast.toString(args.NAME); + const videoSkin = this.videos[videoName]; + if (!videoSkin) return; + + try { + const value = Cast.toNumber(args.RATE); + // Supposedly negative values will work in Safari but people probably shouldn't rely + // on that since others don't. + videoSkin.videoElement.playbackRate = Math.max(0, value); + } catch (e) { + console.warn(e); + } + } + /** @returns {VM.Target|undefined} */ _getTargetFromMenu(targetName, util) { if (targetName === "_myself_") return util.target; From de5f128c46903b12010a46a5db4ad475d0cb64d9 Mon Sep 17 00:00:00 2001 From: Muffin Date: Mon, 5 Aug 2024 21:22:02 -0500 Subject: [PATCH 3/3] npm run format --- extensions/Lily/Video.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extensions/Lily/Video.js b/extensions/Lily/Video.js index 9525610b0..8050f2134 100644 --- a/extensions/Lily/Video.js +++ b/extensions/Lily/Video.js @@ -310,7 +310,9 @@ { opcode: "setPlaybackRate", blockType: Scratch.BlockType.COMMAND, - text: Scratch.translate("set playback rate of video [NAME] to [RATE]"), + text: Scratch.translate( + "set playback rate of video [NAME] to [RATE]" + ), arguments: { NAME: { type: Scratch.ArgumentType.STRING, @@ -321,7 +323,7 @@ defaultValue: "2", }, }, - } + }, ], menus: { targets: {