When the test times out, the `RemoteDataDecoder` returns the first available output sample when available after `Drain()` and receives all remaining 7 remaining output samples, except an empty EOS frame, before MediaFormatReader calls `Drain()` again. `RemoteDataDecoder` [does not](https://searchfox.org/firefox-main/rev/727f98387cec6b42f169f567748c167202b3dc03/dom/media/platforms/android/RemoteDataDecoder.cpp#939-941) return the available samples on the second `Drain()` call. https://treeherder.mozilla.org/jobs?repo=try&selectedTaskRun=V8AfWHJfRwWRr4SfLQJviQ.0&revision=7f6e9f1f29cb33c480ee3dfb8fd64f0aa4d804a8 ``` [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::SetState: 2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=1, state=2 :.h264.decoder] setting dataspace on output surface to #103 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1750000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=1, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1791666 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::NotifyNewOutput: Received new Video sample time:1750000 duration:41666 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1833333 [MediaSupervisor #1]: D/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::NotifyNewOutput: Done processing new Video samples [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::ScheduleUpdate: SchedulingUpdate(Video) [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: Processing update for Video [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::UpdateReceivedNewData: !decoder.mReceivedNewData [MediaSupervisor #1]: D/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::ReturnOutput: Resolved data promise for Video [1750000, 1791666] [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1875000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1916666 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1958333 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaSupervisor #1]: D/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::DrainDecoder: Requesting Video decoder to drain [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=2000000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=2041666 [MediaDecoderStateMachine #1]: D/MediaDecoder MediaDecoderStateMachine[7fe776264c00] state=SEEKING_ACCURATE DropVideoUpToSeekTarget() frame [1666667, 1708333] [MediaDecoderStateMachine #1]: D/MediaDecoder MediaDecoderStateMachine[7fe776264c00] state=SEEKING_ACCURATE DropVideoUpToSeekTarget() pop video frame [1666667, 1708333] target=1900000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::RequestVideoData: RequestVideoData(0), requestNextKeyFrame=0 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::ScheduleUpdate: SchedulingUpdate(Video) [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: Processing update for Video [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::UpdateReceivedNewData: !decoder.mReceivedNewData [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: Update(Video) ni=0 no=1 in:8 out:1 qs=7 decoding:0 flushing:0 desc:android decoder (remote) pending:0 waiting:0 eos:1 ds:2 sid:4294967295 waitcdm:0 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: No need for additional input (pending:0) ``` Holding the output buffers [has been observed](https://bugzilla.mozilla.org/show_bug.cgi?id=1336358#c4) to prevent the decoder from advancing to notify end of stream. The same problem would occur though even if EOS were received before the second `Drain()` call. There is a similar issue with errors, which are [not reported](https://hg-edge.mozilla.org/mozilla-central/diff/b2171e3e8b6971c434a1c1424fac1484fe322351/dom/media/platforms/android/RemoteDataDecoder.cpp#l1.841) if there is no promise pending at the time they are discovered.
Bug 1986372 Comment 0 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
When the test times out, the `RemoteDataDecoder` returns the first available output sample when available after `Drain()` and receives all remaining 7 remaining output samples, except an empty EOS frame, before MediaFormatReader calls `Drain()` again. `RemoteDataDecoder` [does not](https://searchfox.org/firefox-main/rev/727f98387cec6b42f169f567748c167202b3dc03/dom/media/platforms/android/RemoteDataDecoder.cpp#939-941) return the available samples on the second `Drain()` call. https://treeherder.mozilla.org/jobs?repo=try&selectedTaskRun=C1xq2sfuTYCAcaYwD9Ljaw.0&revision=7f6e9f1f29cb33c480ee3dfb8fd64f0aa4d804a8 ``` [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::SetState: 2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=1, state=2 :.h264.decoder] setting dataspace on output surface to #103 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1750000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=1, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1791666 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::NotifyNewOutput: Received new Video sample time:1750000 duration:41666 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1833333 [MediaSupervisor #1]: D/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::NotifyNewOutput: Done processing new Video samples [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::ScheduleUpdate: SchedulingUpdate(Video) [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: Processing update for Video [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::UpdateReceivedNewData: !decoder.mReceivedNewData [MediaSupervisor #1]: D/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::ReturnOutput: Resolved data promise for Video [1750000, 1791666] [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1875000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1916666 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=1958333 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaSupervisor #1]: D/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::DrainDecoder: Requesting Video decoder to drain [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=2000000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ProcessOutput: flags=0 size=3110400 presentationTimeUs=2041666 [MediaDecoderStateMachine #1]: D/MediaDecoder MediaDecoderStateMachine[7fe776264c00] state=SEEKING_ACCURATE DropVideoUpToSeekTarget() frame [1666667, 1708333] [MediaDecoderStateMachine #1]: D/MediaDecoder MediaDecoderStateMachine[7fe776264c00] state=SEEKING_ACCURATE DropVideoUpToSeekTarget() pop video frame [1666667, 1708333] target=1900000 [MediaPDecoder #1]: D/AndroidDecoderModule RemoteDataDecoder(7fe772d14200)::ReturnDecodedData: have decode promise=0, have drain promise=0, state=2 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::RequestVideoData: RequestVideoData(0), requestNextKeyFrame=0 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::ScheduleUpdate: SchedulingUpdate(Video) [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: Processing update for Video [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::UpdateReceivedNewData: !decoder.mReceivedNewData [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: Update(Video) ni=0 no=1 in:8 out:1 qs=7 decoding:0 flushing:0 desc:android decoder (remote) pending:0 waiting:0 eos:1 ds:2 sid:4294967295 waitcdm:0 [MediaSupervisor #1]: V/MediaFormatReader MediaFormatReader[7fe775bd0e00] ::Update: No need for additional input (pending:0) ``` Holding the output buffers [has been observed](https://bugzilla.mozilla.org/show_bug.cgi?id=1336358#c4) to prevent the decoder from advancing to notify end of stream. The same problem would occur though even if EOS were received before the second `Drain()` call. There is a similar issue with errors, which are [not reported](https://hg-edge.mozilla.org/mozilla-central/diff/b2171e3e8b6971c434a1c1424fac1484fe322351/dom/media/platforms/android/RemoteDataDecoder.cpp#l1.841) if there is no promise pending at the time they are discovered.