diff --git a/index.bs b/index.bs index bb43e96..40743db 100644 --- a/index.bs +++ b/index.bs @@ -186,10 +186,11 @@ The processorPull algorithm is given a |processor| as input. It is de The maybeReadFrame algorithm is given a |processor| as input. It is defined by the following steps: 1. If |processor|.`[[queue]]` is [=queue/empty=], abort these steps. -2. If |processor|.`[[numPendingReads]]` equals zero, abort these steps. -3. [=queue/Dequeue=] a frame from |processor|.`[[queue]]` and [=ReadableStream/Enqueue=] it in |processor|.{{MediaStreamTrackProcessor/readable}}. -4. Decrement |processor|.`[[numPendingReads]]` by 1. -5. Go to step 1. +1. If |processor|.`[[numPendingReads]]` equals zero, abort these steps. +1. Let |frame| be the result of [=queue/dequeueing=] a frame media data from |processor|.`[[queue]]`. +1. [=ReadableStream/Enqueue=] |frame| in |processor|.{{MediaStreamTrackProcessor/readable}}. +1. Decrement |processor|.`[[numPendingReads]]` by 1. +1. Go to step 1. The processorCancel algorithm is given a |processor| as input. It is defined by running the following steps: @@ -214,8 +215,10 @@ with |processor| as parameter. The handleNewFrame algorithm is given a |processor| as input. It is defined by running the following steps: -1. If |processor|.`[[queue]]` has |processor|.`[[maxBufferSize]]` elements, [=queue/dequeue=] an item from |processor|.`[[queue]]`. -2. [=queue/Enqueue=] the new frame in |processor|.`[[queue]]`. +1. If |processor|.`[[queue]]` has |processor|.`[[maxBufferSize]]` elements, run the following steps: + 1. Let |droppedFrame| be the result of [=queue/dequeueing=] |processor|.`[[queue]]`. + 1. Run the [=Close VideoFrame=] algorithm with |droppedFrame|. +2. [=queue/Enqueue=] the new frame media data in |processor|.`[[queue]]`. 3. [=Queue a task=] to run the [=maybeReadFrame=] algorithm with |processor| as parameter. At any time, the UA MAY [=list/remove=] any frame from |processor|.`[[queue]]`. @@ -301,7 +304,9 @@ is accessed for the first time, it MUST be initialized with the following steps: The writeFrame algorithm is given a |generator| and a |frame| as input. It is defined by running the following steps: 1. If |frame| is not a {{VideoFrame}} object, return [=a promise rejected with=] a {{TypeError}}. 1. If the value of |frame|’s {{platform object/[[Detached]]}} internal slot is true, return [=a promise rejected with=] a {{TypeError}}. -1. If |generator|.`[[isMuted]]` is false, send the media data backing |frame| to all live tracks sourced from |generator|. +1. If |generator|.`[[isMuted]]` is false, for each live track sourced from |generator|, named |track|, run the following steps: + 1. Let |clone| be the result of running the [=Clone videoFrame=] algorithm with |frame|. + 1. Send |clone| to |track|. 1. Run the [=Close VideoFrame=] algorithm with |frame|. 1. Return [=a promise resolved with=] undefined.