Mercurial > code > home > repos > light9
annotate web/light9-vidref-replay.js @ 2405:69ca2b2fc133
overcomplicated attempt at persisting the pane layout in the rdf graph
this was hard because we have to somehow wait for the graph to load before config'ing the panes
author | drewp@bigasterisk.com |
---|---|
date | Fri, 17 May 2024 16:58:26 -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 |