@@ -111,25 +111,40 @@ export class CanvasSink extends Sink {
111
111
// Note: drawImage can also be used instead of transferFromImageBitmap, but it caused
112
112
// very large memory use in Chrome (goes up to ~2-3GB, then drops again).
113
113
// Do do not call el.getContext twice, safari returns null for second call
114
- let ctx = window . createImageBitmap ? el . getContext ( 'bitmaprenderer' ) : null
114
+ let ctx :
115
+ | ImageBitmapRenderingContext
116
+ | CanvasRenderingContext2D
117
+ | null = null
118
+ if ( window . createImageBitmap !== undefined ) {
119
+ ctx = el . getContext ( 'bitmaprenderer' )
120
+ }
121
+ if ( ctx === null ) {
122
+ ctx = el . getContext ( '2d' )
123
+ }
124
+
125
+ // Set up the drawing callback to be used by the scheduler,
126
+ // it receives a blob of a JPEG image.
115
127
let drawImageBlob : BlobMessageHandler
116
- if ( ctx !== null ) {
128
+ if ( ctx === null ) {
129
+ drawImageBlob = ( ) => { }
130
+ } else if ( 'transferFromImageBitmap' in ctx ) {
131
+ const ctxBitmaprenderer = ctx
117
132
drawImageBlob = ( { blob } ) => {
118
133
info . renderedFrames ++
119
134
window
120
135
. createImageBitmap ( blob )
121
136
. then ( imageBitmap => {
122
- ; ( ctx as any ) . transferFromImageBitmap ( imageBitmap )
137
+ ctxBitmaprenderer . transferFromImageBitmap ( imageBitmap )
123
138
} )
124
139
. catch ( ( ) => {
125
140
/** ignore */
126
141
} )
127
142
}
128
143
} else {
129
- ctx = el . getContext ( '2d' )
144
+ const ctx2d = ctx
130
145
const img = new Image ( )
131
146
img . onload = ( ) => {
132
- ; ( ctx as CanvasRenderingContext2D ) . drawImage ( img , 0 , 0 )
147
+ ctx2d . drawImage ( img , 0 , 0 )
133
148
}
134
149
drawImageBlob = ( { blob } ) => {
135
150
info . renderedFrames ++
0 commit comments