tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

videoFrame-createImageBitmap.https.any.js (2280B)


      1 // META: global=window,dedicatedworker
      2 // META: script=/webcodecs/utils.js
      3 
      4 function testCreateImageBitmapFromVideoFrameVP9Decoder() {
      5  // Prefers hardware decoders by setting video size as large as 720p.
      6  const width = 1280;
      7  const height = 720;
      8 
      9  let canvas = new OffscreenCanvas(width, height);
     10  let ctx = canvas.getContext('2d');
     11  ctx.fillStyle = 'rgb(50, 100, 150)';
     12  ctx.fillRect(0, 0, width, height);
     13 
     14  return createImageBitmap(canvas).then((fromImageBitmap) => {
     15    let videoFrame = new VideoFrame(fromImageBitmap, {
     16      timestamp: 0
     17    });
     18    return new Promise((resolve, reject) => {
     19      let processVideoFrame = (frame) => {
     20        createImageBitmap(frame).then((toImageBitmap) => {
     21          let myCanvas = new OffscreenCanvas(width, height);
     22          let myCtx = myCanvas.getContext('2d');
     23          myCtx.drawImage(toImageBitmap, 0, 0);
     24          let tolerance = 10;
     25          try {
     26            testCanvas(myCtx, width, height, kSRGBPixel, null,
     27              (actual, expected) => {
     28                assert_approx_equals(actual, expected, tolerance);
     29              }
     30            );
     31          } catch (error) {
     32            reject(error);
     33          }
     34          resolve('Done.');
     35        });
     36      };
     37 
     38      const decoderInit = {
     39        output: processVideoFrame,
     40        error: (e) => {
     41          reject(e);
     42        }
     43      };
     44 
     45      const encodedVideoConfig = {
     46        codec: "vp09.00.10.08",
     47      };
     48 
     49      let decoder = new VideoDecoder(decoderInit);
     50      decoder.configure(encodedVideoConfig);
     51 
     52      let processVideoChunk = (chunk) => {
     53        decoder.decode(chunk);
     54        decoder.flush();
     55      };
     56 
     57      const encoderInit = {
     58        output: processVideoChunk,
     59        error: (e) => {
     60          reject(e);
     61        }
     62      };
     63 
     64      const videoEncoderConfig = {
     65        codec: "vp09.00.10.08",
     66        width: width,
     67        height: height,
     68        bitrate: 10e6,
     69        framerate: 30
     70      };
     71 
     72      let encoder = new VideoEncoder(encoderInit);
     73      encoder.configure(videoEncoderConfig);
     74      encoder.encode(videoFrame, {
     75        keyFrame: true
     76      });
     77      encoder.flush();
     78    });
     79  });
     80 }
     81 
     82 promise_test(() => {
     83  return testCreateImageBitmapFromVideoFrameVP9Decoder();
     84 }, 'Create ImageBitmap for a VideoFrame from VP9 decoder.');