chromium/third_party/blink/web_tests/wpt_internal/webcodecs/video_decoder_acceleration_preference.https.any.js

// META: global=window,dedicatedworker
// META: script=/wpt_internal/webcodecs/encoder_utils.js

const defaultWidth = 640;
const defaultHeight = 360;

function cycleAccelerationPreferences(codec, expected_success, desc) {
  promise_test(async t => {
    var config_success;

    let decoderInit = {
      error: e => {
        config_success = false;
      },
      output: t.unreached_func('Unexpected output')
    };

    for (const [key, value] of Object.entries(expected_success)) {
      var iteration_name = "acceleration=" + key;

      let decoder = new VideoDecoder(decoderInit);

      config_success = true;
      let decoderConfig = {
        codec: codec,
        hardwareAcceleration: key,
        codedWidth: defaultWidth,
        codedHeight: defaultHeight,
      };

      var support = await VideoDecoder.isConfigSupported(decoderConfig);

      assert_equals(support.supported, value, iteration_name);
      assert_object_equals(support.config, decoderConfig, iteration_name);

      decoder.configure(decoderConfig);

      try {
        // A failed configure will cause flush to throw an exception.
        await decoder.flush();
        assert_true(value, iteration_name);
      } catch {
        assert_false(value, iteration_name);

        // The error callback may not have run yet.
        await t.step_wait(_ => config_success === false);
      }

      if (decoder.state != 'closed')
        decoder.close();
    }
  }, desc);
}

cycleAccelerationPreferences(
    'vp8', {
      'prefer-hardware': false,
      'prefer-software': true,
      'no-preference': true,
    },
    'Test VP8 configurations with all acceleration preferences');

/* Uncomment this for manual testing, before we have GPU tests for that */
/* Note: these values might vary per platform */
// cycleAccelerationPreferences(
//     'avc1.42001E', {
//       'prefer-hardware': true,
//       'prefer-software': true,
//       'no-preference': true,
//     },
//     'Test H264 configurations with all acceleration preferences');