Reland "webcodecs: Stop closing frames in Audio|VideoEncoder.encode()"

This reverts commit 823fd0ac1934da06c89a62d46f2fb3850d30f049.

Reason for revert: MSAN failure was caused by another change

Original change's description:
> Revert "webcodecs: Stop closing frames in Audio|VideoEncoder.encode()"
>
> This reverts commit 477ea10ee350777a599a4541b6e436ec42563597.
>
> Reason for revert:
>
> It looks like this CL is responsible for breaking the step
> "blink_web_tests" on the builder "WebKit Linux MSAN".
>
> First failing build:
> https://ci.chromium.org/ui/p/chromium/builders/ci/WebKit%20Linux%20MSAN/9927
>
> Original change's description:
> > webcodecs: Stop closing frames in Audio|VideoEncoder.encode()
> >
> > Change-Id: I0281c1bdd836a94f968bf8fdf4fe8d09392845c7
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2803617
> > Reviewed-by: Thomas Guilbert <tguilbert@chromium.org>
> > Reviewed-by: Chrome Cunningham <chcunningham@chromium.org>
> > Commit-Queue: Eugene Zemtsov <eugene@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#869112}
>
> Change-Id: Iacb9e31ff575129a7b320954a5d65dfaf6274b19
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2805814
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Owners-Override: Fabian Sommer <fabiansommer@chromium.org>
> Auto-Submit: Fabian Sommer <fabiansommer@chromium.org>
> Commit-Queue: Fabian Sommer <fabiansommer@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#869156}

Change-Id: Ide12d8cef50e29f35bd52367546475935970b722
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2804432
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Eugene Zemtsov <eugene@chromium.org>
Cr-Commit-Position: refs/heads/master@{#869258}
diff --git a/webcodecs/audio-encoder.any.js b/webcodecs/audio-encoder.any.js
index 0f1fe2e..34210d4 100644
--- a/webcodecs/audio-encoder.any.js
+++ b/webcodecs/audio-encoder.any.js
@@ -72,6 +72,7 @@
     let frame = make_audio_frame(timestamp_us, config.numberOfChannels,
       config.sampleRate, frame_length);
     encoder.encode(frame);
+    frame.close();
     timestamp_us += frame_duration_s * 1_000_000;
   }
   await encoder.flush();
@@ -102,6 +103,7 @@
   encoder.configure(config);
   for (let frame of good_frames) {
     encoder.encode(frame);
+    frame.close();
   }
   await encoder.flush();
 
@@ -206,7 +208,7 @@
   for (let i = 0; i < frame_count; i++) {
     let frame = make_audio_frame(timestamp_us, config.numberOfChannels,
       config.sampleRate, frame_length);
-    input_frames.push(clone_frame(frame));
+    input_frames.push(frame);
     encoder.encode(frame);
     timestamp_us += frame_duration_s * 1_000_000;
   }
@@ -274,7 +276,7 @@
 
   let long_frame = make_audio_frame(0, encoder_config.numberOfChannels,
     encoder_config.sampleRate, encoder_config.sampleRate);
-  encoder.encode(clone_frame(long_frame));
+  encoder.encode(long_frame);
   await encoder.flush();
 
   // Long frame produced more than one output, and we've got decoder_config
@@ -295,7 +297,7 @@
   output_count = 0;
   encoder_config.bitrate = 256000;
   encoder.configure(encoder_config);
-  encoder.encode(clone_frame(long_frame));
+  encoder.encode(long_frame);
   await encoder.flush();
 
   // After reconfiguring encoder should produce decoder config again
diff --git a/webcodecs/video-encoder.any.js b/webcodecs/video-encoder.any.js
index b45d25d..14c5ab6 100644
--- a/webcodecs/video-encoder.any.js
+++ b/webcodecs/video-encoder.any.js
@@ -88,8 +88,8 @@
   let frame1 = await createVideoFrame(640, 480, 0);
   let frame2 = await createVideoFrame(640, 480, 33333);
 
-  encoder.encode(frame1.clone());
-  encoder.encode(frame2.clone());
+  encoder.encode(frame1);
+  encoder.encode(frame2);
 
   // Could be 0, 1, or 2. We can't guarantee this check runs before the UA has
   // processed the encodes.
@@ -148,6 +148,7 @@
     let frame = new VideoFrame(bitmap, { timestamp: timestamp });
     timestamp += timestamp_step;
     encoder.encode(frame);
+    frame.close();
   }
 
   await t.step_wait(() => reset_completed,
@@ -167,6 +168,7 @@
     let frame = await createVideoFrame(800, 600, timestamp + 1);
     timestamp += timestamp_step;
     encoder.encode(frame);
+    frame.close();
   }
   await encoder.flush();
 
@@ -194,10 +196,10 @@
   let frame1 = await createVideoFrame(640, 480, 0);
   let frame2 = await createVideoFrame(640, 480, 33333);
 
-  encoder.encode(frame1.clone());
+  encoder.encode(frame1);
   encoder.configure(config);
 
-  encoder.encode(frame2.clone());
+  encoder.encode(frame2);
 
   await encoder.flush();
 
@@ -224,14 +226,14 @@
   let frame3 = await createVideoFrame(640, 480, 66666);
   let frame4 = await createVideoFrame(640, 480, 100000);
 
-  encoder.encode(frame3.clone());
+  encoder.encode(frame3);
 
   // Verify that a failed call to configure does not change the encoder's state.
   let badConfig = { ...defaultConfig };
   badConfig.codec = 'bogus';
   assert_throws_js(TypeError, () => encoder.configure(badConfig));
 
-  encoder.encode(frame4.clone());
+  encoder.encode(frame4);
 
   await encoder.flush();
 
@@ -240,30 +242,6 @@
 }, 'Test successful encode() after re-configure().');
 
 promise_test(async t => {
-  let output_chunks = [];
-  let codecInit = getDefaultCodecInit(t);
-  codecInit.output = chunk => output_chunks.push(chunk);
-
-  let encoder = new VideoEncoder(codecInit);
-
-  let timestamp = 33333;
-  let frame = await createVideoFrame(640, 480, timestamp);
-
-  encoder.configure(defaultConfig);
-  assert_equals(encoder.state, "configured");
-
-  encoder.encode(frame);
-
-  // |frame| is not longer valid since it has been closed.
-  assert_not_equals(frame.timestamp, timestamp);
-  assert_throws_dom("InvalidStateError", () => frame.clone());
-
-  encoder.close();
-
-  return endAfterEventLoopTurn();
-}, 'Test encoder consumes (closes) frames.');
-
-promise_test(async t => {
   let encoder = new VideoEncoder(getDefaultCodecInit(t));
 
   let frame = await createVideoFrame(640, 480, 0);
@@ -288,6 +266,6 @@
   encoder.configure(defaultConfig);
 
   assert_throws_dom("OperationError", () => {
-    encoder.encode(frame)
+    encoder.encode(frame);
   });
 }, 'Verify encoding closed frames throws.');