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

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

promise_test(async t => {
  let outputs = 0;
  const chunks = [
    {
      offset: 0,
      size: 4045
    },
    {
      offset: 4045,
      size: 926
    },
    {
      offset: 4971,
      size: 241
    },
    {
      offset: 5212,
      size: 97
    },
    {
      offset: 5309,
      size: 98
    },
    {
      offset: 5407,
      size: 624
    },
    {
      offset: 6031,
      size: 185
    },
    {
      offset: 6216,
      size: 94
    },
    {
      offset: 6310,
      size: 109
    },
    {
      offset: 6419,
      size: 281
    }
  ];

  let all_chunks_buffer = await (await fetch('annexb.h264')).arrayBuffer();
  let decoder = new VideoDecoder({
    error: () => t.unreached_func("Unexpected error"),
    output: (frame) => { outputs++; },
  });

  const config = {
    codec: "avc1.42001E",
    codedWidth: 320,
    codedHeight: 240
    /* no description means Annex B */
  };
  decoder.configure(config);
  let counter = 0;
  for (let chunk of chunks) {
    let buffer = new Uint8Array(all_chunks_buffer, chunk.offset, chunk.size);
    let encoded_chunk = new EncodedVideoChunk({
      type: (counter == 0) ? 'key' : 'delta',
      timestamp: counter * 1_00_000,
      data: buffer
    });
    counter++;
    decoder.decode(encoded_chunk);
  }

  await decoder.flush();
  decoder.close();
  assert_equals(outputs, chunks.length);
}, "Decode AnnexB");