haikuwebkit/LayoutTests/fast/mediastream/play-newly-added-audio-trac...

41 lines
1.3 KiB
HTML
Raw Permalink Normal View History

MediaPlayerPrivateMediaStreamAVFObjC should start play a newly added audio track if it is playing https://bugs.webkit.org/show_bug.cgi?id=210740 Reviewed by Eric Carlson. Source/WebCore: Before the patch, MediaPlayerPrivateMediaStreamAVFObjC was not calling play on the audio renderer when the audio renderer was added after the MediaPlayerPrivateMediaStreamAVFObjC was asked to play. This patch makes it so that, on configuration of an audio track, it will be asked to play if its MediaPlayerPrivateMediaStreamAVFObjC is playing. Add internals API to be able to write a test. Test: fast/mediastream/play-newly-added-audio-track.html * html/track/AudioTrack.h: * html/track/AudioTrack.idl: * platform/graphics/AudioTrackPrivate.h: (WebCore::AudioTrackPrivate::isBackedByMediaStreamTrack const): * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::play): * platform/mediastream/AudioTrackPrivateMediaStream.h: (isType): * testing/Internals.cpp: (WebCore::Internals::isMockRealtimeMediaSourceCenterEnabled): (WebCore::Internals::shouldAudioTrackPlay): * testing/Internals.h: * testing/Internals.idl: LayoutTests: * fast/mediastream/play-newly-added-audio-track-expected.txt: Added. * fast/mediastream/play-newly-added-audio-track.html: Added. Canonical link: https://commits.webkit.org/223637@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260380 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-20 18:16:57 +00:00
<!DOCTYPE html>
<html>
<head>
<video id="video" autoplay controls></video>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
promise_test(async () => {
let stream = await navigator.mediaDevices.getUserMedia({ video : true });
video.srcObject = stream;
await video.play();
[GStreamer][MediaStream] fast/mediastream/play-newly-added-audio-track.html is failing since added in r260380 https://bugs.webkit.org/show_bug.cgi?id=210840 Reviewed by Xabier Rodriguez-Calvar. Source/WebCore: The test was failing mainly because our mediastreamsrc GStreamer element wasn't creating the corresponding AudioTrackPrivateMediaStream object. The media player should propagate its volume/mute/is-playing states to the source element. And also until now our mediastreamsrc element was handling at most one audio track and at most one audio track, but it turns out multiple audio tracks can be added actually. So I refactored the element internals accordingly. The InternalSource is now directly observing the corresponding RealtimeMediaSource, which simplified some code. Observing is also now suspended/resumed depending on the element state. We don't implement a GStreamer AudioMediaStreamTrackRenderer class yet, because actual rendering is still performed from the WebProcess, so early returns were added in AudioTrackPrivateMediaStream to handle this case. * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::updateTracks): (WebCore::MediaPlayerPrivateGStreamer::configureMediaStreamAudioTracks): (WebCore::MediaPlayerPrivateGStreamer::setVolume): (WebCore::MediaPlayerPrivateGStreamer::setMuted): (WebCore::MediaPlayerPrivateGStreamer::updateStates): (WebCore::MediaPlayerPrivateGStreamer::didEnd): * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::createRenderer): (WebCore::AudioTrackPrivateMediaStream::setLogger): (WebCore::AudioTrackPrivateMediaStream::clear): (WebCore::AudioTrackPrivateMediaStream::setVolume): (WebCore::AudioTrackPrivateMediaStream::setAudioOutputDevice): (WebCore::AudioTrackPrivateMediaStream::volume const): (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStream::startRenderer): (WebCore::AudioTrackPrivateMediaStream::stopRenderer): (WebCore::AudioTrackPrivateMediaStream::createNewRenderer): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (mediaStreamTrackPrivateGetTags): (WebKitMediaStreamObserver::didRemoveTrack): (webkitMediaStreamSrcConstructed): (webkitMediaStreamSrcDispose): (webkitMediaStreamSrcChangeState): (webkitMediaStreamSrcPostStreamCollection): (webkitMediaStreamSrcAddPad): (ProbeData::ProbeData): (webkitMediaStreamSrcPadProbeCb): (webkitMediaStreamSrcAddTrack): (webkitMediaStreamSrcSetStream): (webkitMediaStreamSrcTrackEnded): (InternalSource::trackEnded): (webkitMediaStreamSrcConfigureAudioTracks): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h: LayoutTests: Remove flakyness from test and unflag it on GTK. * fast/mediastream/play-newly-added-audio-track.html: addTrack might have asynchronous effects, so it's better to rely on the trackadded event when testing its result. * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/236679@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@276197 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-04-17 11:23:09 +00:00
video.srcObject.ontrackadded = () => {
if (window.internals)
assert_true(internals.shouldAudioTrackPlay(video.audioTracks[0]));
};
MediaPlayerPrivateMediaStreamAVFObjC should start play a newly added audio track if it is playing https://bugs.webkit.org/show_bug.cgi?id=210740 Reviewed by Eric Carlson. Source/WebCore: Before the patch, MediaPlayerPrivateMediaStreamAVFObjC was not calling play on the audio renderer when the audio renderer was added after the MediaPlayerPrivateMediaStreamAVFObjC was asked to play. This patch makes it so that, on configuration of an audio track, it will be asked to play if its MediaPlayerPrivateMediaStreamAVFObjC is playing. Add internals API to be able to write a test. Test: fast/mediastream/play-newly-added-audio-track.html * html/track/AudioTrack.h: * html/track/AudioTrack.idl: * platform/graphics/AudioTrackPrivate.h: (WebCore::AudioTrackPrivate::isBackedByMediaStreamTrack const): * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::play): * platform/mediastream/AudioTrackPrivateMediaStream.h: (isType): * testing/Internals.cpp: (WebCore::Internals::isMockRealtimeMediaSourceCenterEnabled): (WebCore::Internals::shouldAudioTrackPlay): * testing/Internals.h: * testing/Internals.idl: LayoutTests: * fast/mediastream/play-newly-added-audio-track-expected.txt: Added. * fast/mediastream/play-newly-added-audio-track.html: Added. Canonical link: https://commits.webkit.org/223637@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260380 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-20 18:16:57 +00:00
let stream2 = await navigator.mediaDevices.getUserMedia({ audio : true });
video.srcObject.addTrack(stream2.getAudioTracks()[0]);
[GStreamer][MediaStream] fast/mediastream/play-newly-added-audio-track.html is failing since added in r260380 https://bugs.webkit.org/show_bug.cgi?id=210840 Reviewed by Xabier Rodriguez-Calvar. Source/WebCore: The test was failing mainly because our mediastreamsrc GStreamer element wasn't creating the corresponding AudioTrackPrivateMediaStream object. The media player should propagate its volume/mute/is-playing states to the source element. And also until now our mediastreamsrc element was handling at most one audio track and at most one audio track, but it turns out multiple audio tracks can be added actually. So I refactored the element internals accordingly. The InternalSource is now directly observing the corresponding RealtimeMediaSource, which simplified some code. Observing is also now suspended/resumed depending on the element state. We don't implement a GStreamer AudioMediaStreamTrackRenderer class yet, because actual rendering is still performed from the WebProcess, so early returns were added in AudioTrackPrivateMediaStream to handle this case. * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::updateTracks): (WebCore::MediaPlayerPrivateGStreamer::configureMediaStreamAudioTracks): (WebCore::MediaPlayerPrivateGStreamer::setVolume): (WebCore::MediaPlayerPrivateGStreamer::setMuted): (WebCore::MediaPlayerPrivateGStreamer::updateStates): (WebCore::MediaPlayerPrivateGStreamer::didEnd): * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::createRenderer): (WebCore::AudioTrackPrivateMediaStream::setLogger): (WebCore::AudioTrackPrivateMediaStream::clear): (WebCore::AudioTrackPrivateMediaStream::setVolume): (WebCore::AudioTrackPrivateMediaStream::setAudioOutputDevice): (WebCore::AudioTrackPrivateMediaStream::volume const): (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStream::startRenderer): (WebCore::AudioTrackPrivateMediaStream::stopRenderer): (WebCore::AudioTrackPrivateMediaStream::createNewRenderer): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (mediaStreamTrackPrivateGetTags): (WebKitMediaStreamObserver::didRemoveTrack): (webkitMediaStreamSrcConstructed): (webkitMediaStreamSrcDispose): (webkitMediaStreamSrcChangeState): (webkitMediaStreamSrcPostStreamCollection): (webkitMediaStreamSrcAddPad): (ProbeData::ProbeData): (webkitMediaStreamSrcPadProbeCb): (webkitMediaStreamSrcAddTrack): (webkitMediaStreamSrcSetStream): (webkitMediaStreamSrcTrackEnded): (InternalSource::trackEnded): (webkitMediaStreamSrcConfigureAudioTracks): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h: LayoutTests: Remove flakyness from test and unflag it on GTK. * fast/mediastream/play-newly-added-audio-track.html: addTrack might have asynchronous effects, so it's better to rely on the trackadded event when testing its result. * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/236679@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@276197 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-04-17 11:23:09 +00:00
await new Promise(resolve => setTimeout(resolve, 50));
MediaPlayerPrivateMediaStreamAVFObjC should start play a newly added audio track if it is playing https://bugs.webkit.org/show_bug.cgi?id=210740 Reviewed by Eric Carlson. Source/WebCore: Before the patch, MediaPlayerPrivateMediaStreamAVFObjC was not calling play on the audio renderer when the audio renderer was added after the MediaPlayerPrivateMediaStreamAVFObjC was asked to play. This patch makes it so that, on configuration of an audio track, it will be asked to play if its MediaPlayerPrivateMediaStreamAVFObjC is playing. Add internals API to be able to write a test. Test: fast/mediastream/play-newly-added-audio-track.html * html/track/AudioTrack.h: * html/track/AudioTrack.idl: * platform/graphics/AudioTrackPrivate.h: (WebCore::AudioTrackPrivate::isBackedByMediaStreamTrack const): * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::play): * platform/mediastream/AudioTrackPrivateMediaStream.h: (isType): * testing/Internals.cpp: (WebCore::Internals::isMockRealtimeMediaSourceCenterEnabled): (WebCore::Internals::shouldAudioTrackPlay): * testing/Internals.h: * testing/Internals.idl: LayoutTests: * fast/mediastream/play-newly-added-audio-track-expected.txt: Added. * fast/mediastream/play-newly-added-audio-track.html: Added. Canonical link: https://commits.webkit.org/223637@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260380 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-20 18:16:57 +00:00
}, "Add an audio track while playing video");
promise_test(async () => {
let stream = await navigator.mediaDevices.getUserMedia({ audio : true });
video.srcObject = stream.clone();
await video.play();
[GStreamer][MediaStream] fast/mediastream/play-newly-added-audio-track.html is failing since added in r260380 https://bugs.webkit.org/show_bug.cgi?id=210840 Reviewed by Xabier Rodriguez-Calvar. Source/WebCore: The test was failing mainly because our mediastreamsrc GStreamer element wasn't creating the corresponding AudioTrackPrivateMediaStream object. The media player should propagate its volume/mute/is-playing states to the source element. And also until now our mediastreamsrc element was handling at most one audio track and at most one audio track, but it turns out multiple audio tracks can be added actually. So I refactored the element internals accordingly. The InternalSource is now directly observing the corresponding RealtimeMediaSource, which simplified some code. Observing is also now suspended/resumed depending on the element state. We don't implement a GStreamer AudioMediaStreamTrackRenderer class yet, because actual rendering is still performed from the WebProcess, so early returns were added in AudioTrackPrivateMediaStream to handle this case. * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::updateTracks): (WebCore::MediaPlayerPrivateGStreamer::configureMediaStreamAudioTracks): (WebCore::MediaPlayerPrivateGStreamer::setVolume): (WebCore::MediaPlayerPrivateGStreamer::setMuted): (WebCore::MediaPlayerPrivateGStreamer::updateStates): (WebCore::MediaPlayerPrivateGStreamer::didEnd): * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::createRenderer): (WebCore::AudioTrackPrivateMediaStream::setLogger): (WebCore::AudioTrackPrivateMediaStream::clear): (WebCore::AudioTrackPrivateMediaStream::setVolume): (WebCore::AudioTrackPrivateMediaStream::setAudioOutputDevice): (WebCore::AudioTrackPrivateMediaStream::volume const): (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStream::startRenderer): (WebCore::AudioTrackPrivateMediaStream::stopRenderer): (WebCore::AudioTrackPrivateMediaStream::createNewRenderer): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (mediaStreamTrackPrivateGetTags): (WebKitMediaStreamObserver::didRemoveTrack): (webkitMediaStreamSrcConstructed): (webkitMediaStreamSrcDispose): (webkitMediaStreamSrcChangeState): (webkitMediaStreamSrcPostStreamCollection): (webkitMediaStreamSrcAddPad): (ProbeData::ProbeData): (webkitMediaStreamSrcPadProbeCb): (webkitMediaStreamSrcAddTrack): (webkitMediaStreamSrcSetStream): (webkitMediaStreamSrcTrackEnded): (InternalSource::trackEnded): (webkitMediaStreamSrcConfigureAudioTracks): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h: LayoutTests: Remove flakyness from test and unflag it on GTK. * fast/mediastream/play-newly-added-audio-track.html: addTrack might have asynchronous effects, so it's better to rely on the trackadded event when testing its result. * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/236679@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@276197 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-04-17 11:23:09 +00:00
video.srcObject.ontrackadded = () => {
if (window.internals)
assert_true(internals.shouldAudioTrackPlay(video.audioTracks[1]));
};
MediaPlayerPrivateMediaStreamAVFObjC should start play a newly added audio track if it is playing https://bugs.webkit.org/show_bug.cgi?id=210740 Reviewed by Eric Carlson. Source/WebCore: Before the patch, MediaPlayerPrivateMediaStreamAVFObjC was not calling play on the audio renderer when the audio renderer was added after the MediaPlayerPrivateMediaStreamAVFObjC was asked to play. This patch makes it so that, on configuration of an audio track, it will be asked to play if its MediaPlayerPrivateMediaStreamAVFObjC is playing. Add internals API to be able to write a test. Test: fast/mediastream/play-newly-added-audio-track.html * html/track/AudioTrack.h: * html/track/AudioTrack.idl: * platform/graphics/AudioTrackPrivate.h: (WebCore::AudioTrackPrivate::isBackedByMediaStreamTrack const): * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::play): * platform/mediastream/AudioTrackPrivateMediaStream.h: (isType): * testing/Internals.cpp: (WebCore::Internals::isMockRealtimeMediaSourceCenterEnabled): (WebCore::Internals::shouldAudioTrackPlay): * testing/Internals.h: * testing/Internals.idl: LayoutTests: * fast/mediastream/play-newly-added-audio-track-expected.txt: Added. * fast/mediastream/play-newly-added-audio-track.html: Added. Canonical link: https://commits.webkit.org/223637@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260380 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-20 18:16:57 +00:00
video.srcObject.addTrack(stream.getAudioTracks()[0]);
await new Promise(resolve => setTimeout(resolve, 50));
}, "Add an audio track while playing audio");
</script>
</head>
</html>