forked from mirrors/gecko-dev
		
	 1b0ed5f17c
			
		
	
	
		1b0ed5f17c
		
	
	
	
	
		
			
			Added test coverage for sendKeyFrameRequest/generateKeyFrame. Also, some simplifications and code-reuse in existing tests. Differential Revision: https://phabricator.services.mozilla.com/D179732
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| onrtctransform = (event) => {
 | |
|     const transformer = event.transformer;
 | |
| 
 | |
|     transformer.reader = transformer.readable.getReader();
 | |
|     transformer.writer = transformer.writable.getWriter();
 | |
| 
 | |
|     async function waitForDetachAndPostMetadata(frame) {
 | |
|         while (true) {
 | |
|             if (frame.data.byteLength == 0) {
 | |
|                 // frame.data has been detached! Verify metadata is still there.
 | |
|                 self.postMessage({
 | |
|                   name: `${transformer.options.name} after write`,
 | |
|                   timestamp: frame.timestamp, type: frame.type,
 | |
|                   metadata: frame.getMetadata()
 | |
|                 });
 | |
|                 return;
 | |
|             }
 | |
|             await new Promise(r => setTimeout(r, 100));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     let isFirstFrame = true;
 | |
|     function process(transformer)
 | |
|     {
 | |
|         transformer.reader.read().then(chunk => {
 | |
|             if (chunk.done)
 | |
|                 return;
 | |
| 
 | |
|             if (isFirstFrame) {
 | |
|                 isFirstFrame = false;
 | |
|                 self.postMessage({
 | |
|                   name: transformer.options.name,
 | |
|                   timestamp: chunk.value.timestamp,
 | |
|                   type: chunk.value.type,
 | |
|                   metadata: chunk.value.getMetadata()
 | |
|                 });
 | |
|                 waitForDetachAndPostMetadata(chunk.value);
 | |
|             }
 | |
|             transformer.writer.write(chunk.value);
 | |
|             process(transformer);
 | |
|         });
 | |
|     }
 | |
|     process(transformer);
 | |
| };
 | |
| self.postMessage("registered");
 |