1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41

content / test / data / gpu / webcodecs / terminate-worker-worker.js [blame]

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';

self.onmessage = async function(e) {
  const frame = e.data;
  const encoder_config = {
    codec: 'vp8',
    hardwareAcceleration: 'prefer-software',
    width: frame.visibleRect.width,
    height: frame.visibleRect.height,
    bitrate: 5000000,
    framerate: 24,
    latencyMode: 'realtime'
  };
  let resolve_callback = null;
  const encoder_init = {
    output(chunk, metadata) {
      resolve_callback(chunk);
    },
    error(e) {}
  };
  const encoder = new VideoEncoder(encoder_init);
  encoder.configure(encoder_config);
  encoder.encode(frame);
  await new Promise((resolve) => {
    resolve_callback = resolve;
  });

  postMessage(null, []);

  for (let i = 1; i < 100; i++) {
    const new_frame =
        new VideoFrame(frame, {timestamp: frame.timestamp + 1000 * i});
    encoder.encode(new_frame);
    await new Promise((resolve) => {
      resolve_callback = resolve;
    });
  }
}