Mercurial > code > home > repos > light9
annotate web/light9-vidref-replay.js @ 2450:a4052905ca7d default tip
notes about how rdfdb syncs, or should sync
author | drewp@bigasterisk.com |
---|---|
date | Mon, 03 Jun 2024 23:01:54 -0700 |
parents | 4556eebe5d73 |
children |
rev | line source |
---|---|
1951 | 1 import { LitElement, TemplateResult, html, css } from '/node_modules/lit-element/lit-element.js'; |
2 import debug from '/lib/debug/debug-build-es6.js'; | |
3 import _ from '/lib/underscore/underscore-min-es6.js'; | |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
4 import { rounding } from '/node_modules/significant-rounding/index.js'; |
1951 | 5 |
6 const log = debug('replay'); | |
7 | |
8 class Light9VidrefReplay extends LitElement { | |
9 | |
10 static get properties() { | |
11 return { | |
12 uri: { type: String }, | |
13 videoUrl: { type: String }, | |
14 songToVideo: { type: Object }, | |
15 videoTime: { type: Number }, | |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
16 outVideoCurrentTime: { type: Number }, |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
17 timeErr: { type: Number }, |
1994
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
18 playRate: { type: Number }, |
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
19 size: { type: String, attribute: true } |
1951 | 20 }; |
21 } | |
2023 | 22 |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
23 estimateRate() { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
24 const n = this.songToVideo.length; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
25 const x0 = Math.round(n * .3); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
26 const x1 = Math.round(n * .6); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
27 const pt0 = this.songToVideo[x0]; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
28 const pt1 = this.songToVideo[x1]; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
29 return (pt1[1] - pt0[1]) / (pt1[0] - pt0[0]); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
30 } |
2023 | 31 |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
32 setVideoTimeFromSongTime(songTime, isPlaying) { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
33 if (!this.songToVideo || !this.outVideo || this.outVideo.readyState < 1) { |
1951 | 34 return; |
35 } | |
36 const i = _.sortedIndex(this.songToVideo, [songTime], | |
37 (row) => { return row[0]; }); | |
2017
d7ea6d473bf6
don't let <video> play and get corrected when we're out of bounds, which made a bad flicker
drewp@bigasterisk.com
parents:
2001
diff
changeset
|
38 if (i == 0 || i > this.songToVideo.length - 1) { |
d7ea6d473bf6
don't let <video> play and get corrected when we're out of bounds, which made a bad flicker
drewp@bigasterisk.com
parents:
2001
diff
changeset
|
39 isPlaying = false; |
d7ea6d473bf6
don't let <video> play and get corrected when we're out of bounds, which made a bad flicker
drewp@bigasterisk.com
parents:
2001
diff
changeset
|
40 } |
d7ea6d473bf6
don't let <video> play and get corrected when we're out of bounds, which made a bad flicker
drewp@bigasterisk.com
parents:
2001
diff
changeset
|
41 |
1951 | 42 this.videoTime = this.songToVideo[Math.max(0, i - 1)][1]; |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
43 |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
44 this.outVideoCurrentTime = this.outVideo.currentTime; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
45 |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
46 if (isPlaying) { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
47 if (this.outVideo.paused) { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
48 this.outVideo.play(); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
49 this.setRate(this.estimateRate()); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
50 } |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
51 const err = this.outVideo.currentTime - this.videoTime; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
52 this.timeErr = err; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
53 |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
54 if (Math.abs(err) > window.thresh) { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
55 this.outVideo.currentTime = this.videoTime; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
56 const p = window.p; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
57 if (err > 0) { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
58 this.setRate(this.playRate - err * p); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
59 } else { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
60 this.setRate(this.playRate - err * p); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
61 } |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
62 } |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
63 } else { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
64 this.outVideo.pause(); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
65 this.outVideoCurrentTime = this.outVideo.currentTime = this.videoTime; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
66 this.timeErr = 0; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
67 } |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
68 } |
2023 | 69 |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
70 setRate(r) { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
71 this.playRate = Math.max(.1, Math.min(4, r)); |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
72 this.outVideo.playbackRate = this.playRate; |
1951 | 73 } |
74 | |
75 firstUpdated() { | |
76 this.outVideo = this.shadowRoot.querySelector('#replay'); | |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
77 this.playRate = this.outVideo.playbackRate = 1.0; |
1951 | 78 } |
79 | |
80 onDelete() { | |
81 const u = new URL(window.location.href); | |
82 u.pathname = '/vidref/clips' | |
83 u.searchParams.set('uri', this.uri); | |
84 fetch(u.toString(), {method: 'DELETE'}).then((resp) => { | |
85 let event = new CustomEvent('clips-changed', {detail: {}}); | |
86 this.dispatchEvent(event); | |
87 }); | |
88 } | |
89 | |
90 static get styles() { | |
91 return css` | |
92 :host { | |
93 border: 2px solid #46a79f; | |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
94 display: flex; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
95 flex-direction: column; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
96 } |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
97 div { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
98 padding: 5px; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
99 } |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
100 .num { |
1951 | 101 display: inline-block; |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
102 width: 4em; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
103 color: #29ffa0; |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
104 } |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
105 a { |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
106 color: rgb(97, 97, 255); |
1951 | 107 } |
2021 | 108 video { |
2023 | 109 width: 100%; |
1994
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
110 } |
1951 | 111 `; |
112 } | |
113 | |
114 render() { | |
1994
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
115 let details = ''; |
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
116 if (this.size != 'small') { |
2023 | 117 details = html` |
118 <div> | |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
119 take is <a href="${this.uri}">${this.uri}</a> |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
120 (${Object.keys(this.songToVideo).length} frames) |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
121 <button @click="${this.onDelete}">Delete</button> |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
122 </div> |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
123 <!-- here, put a little canvas showing what coverage we have with the |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
124 actual/goal time cursors --> |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
125 <div> |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
126 video time should be <span class="num">${this.videoTime} </span> |
2022
f5fbc6ec5f87
try to reduce flicker on vidref player details
drewp@bigasterisk.com
parents:
2021
diff
changeset
|
127 actual = <span class="num">${rounding(this.outVideoCurrentTime, 3, 3, true)}</span>, |
f5fbc6ec5f87
try to reduce flicker on vidref player details
drewp@bigasterisk.com
parents:
2021
diff
changeset
|
128 err = <span class="num">${rounding(this.timeErr, 3, 4, true)}</span> |
f5fbc6ec5f87
try to reduce flicker on vidref player details
drewp@bigasterisk.com
parents:
2021
diff
changeset
|
129 rate = <span class="num">${rounding(this.playRate, 3, 3, true)}</span> |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
130 </div> |
2023 | 131 `; |
1994
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
132 } |
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
133 return html` |
2023 | 134 <video id="replay" class="size-${this.size}" src="${this.videoUrl}"></video> |
135 ${details} | |
136 `; | |
1951 | 137 |
138 } | |
139 } | |
140 customElements.define('light9-vidref-replay', Light9VidrefReplay); | |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
141 window.thresh=.3 |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
142 window.p=.3 |