Changeset 204118 in webkit
- Timestamp:
- Aug 4, 2016 2:26:16 AM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r204117 r204118 1 2016-08-04 Alejandro G. Castro <alex@igalia.com> 2 3 WebRTC: OWR: Add support for the muted state in the mediaplayer 4 https://bugs.webkit.org/show_bug.cgi?id=160502 5 6 Modified the load, play and stop methods to handle the new 7 situation where the mediaSource could be empty, until the remote 8 side sends the information to create the receiver. 9 10 Reviewed by Philippe Normand. 11 12 No new tests, we need to upstream the owr endpoint to check this 13 situation. 14 15 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp: 16 (WebCore::MediaPlayerPrivateGStreamerOwr::play): Check the muted 17 state of the tracks if required, we do it using the new 18 maybeHandleChangeMutedState function. 19 (WebCore::MediaPlayerPrivateGStreamerOwr::load): Add always the 20 observer of the track to check when it is unmuted, and we delay 21 enabling/setting the source until the play or the unmute. 22 (WebCore::MediaPlayerPrivateGStreamerOwr::internalLoad): Removed, 23 we now do all in the load method. 24 (WebCore::MediaPlayerPrivateGStreamerOwr::stop): Remove the 25 mediasource when disabling. Removed the m_stopped state, it was 26 there because the internalLoad was called multiple times. 27 (WebCore::MediaPlayerPrivateGStreamerOwr::trackMutedChanged): 28 Check the muted state and handle it, we use the new method 29 maybeHandleChangeMutedState. 30 (WebCore::MediaPlayerPrivateGStreamerOwr::maybeHandleChangeMutedState): 31 Check if the track is muted or not, in case it is muted disable 32 the the renderer and remove its mediasource. If it is not muted 33 enable the renderer and set the mediasource. 34 (WebCore::MediaPlayerPrivateGStreamerOwr::createVideoSink): Move 35 the workaround for the renderer to this method when it is created. 36 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h: 37 Removed internalLoad method and the m_stopped attribute used to 38 call internalLoad multiple times. 39 1 40 2016-08-04 Youenn Fablet <youenn@apple.com> 2 41 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp
r203058 r204118 72 72 73 73 m_paused = false; 74 internalLoad(); 74 75 GST_DEBUG("Connecting to live stream, descriptor: %p", m_streamPrivate.get()); 76 77 for (auto track : m_streamPrivate->tracks()) { 78 if (!track->enabled()) { 79 GST_DEBUG("Track %s disabled", track->label().ascii().data()); 80 continue; 81 } 82 83 maybeHandleChangeMutedState(*track); 84 } 75 85 } 76 86 … … 133 143 return; 134 144 135 if ( !m_videoSink)145 if (streamPrivate.hasVideo() && !m_videoSink) 136 146 createVideoSink(); 137 147 138 if ( !m_audioSink)148 if (streamPrivate.hasAudio() && !m_audioSink) 139 149 createGSTAudioSinkBin(); 140 150 … … 152 162 m_player->readyStateChanged(); 153 163 154 if (!internalLoad())155 return;156 157 // If the stream contains video, wait for first video frame before setting158 // HaveEnoughData.159 if (!hasVideo())160 m_readyState = MediaPlayer::HaveEnoughData;161 162 m_player->readyStateChanged();163 }164 165 void MediaPlayerPrivateGStreamerOwr::loadingFailed(MediaPlayer::NetworkState error)166 {167 if (m_networkState != error) {168 m_networkState = error;169 m_player->networkStateChanged();170 }171 if (m_readyState != MediaPlayer::HaveNothing) {172 m_readyState = MediaPlayer::HaveNothing;173 m_player->readyStateChanged();174 }175 }176 177 bool MediaPlayerPrivateGStreamerOwr::didLoadingProgress() const178 {179 // FIXME: Implement loading progress support.180 return true;181 }182 183 bool MediaPlayerPrivateGStreamerOwr::internalLoad()184 {185 if (!m_stopped)186 return false;187 188 m_stopped = false;189 if (!m_streamPrivate || !m_streamPrivate->active()) {190 loadingFailed(MediaPlayer::NetworkError);191 return false;192 }193 194 GST_DEBUG("Connecting to live stream, descriptor: %p", m_streamPrivate.get());195 196 164 for (auto track : m_streamPrivate->tracks()) { 197 165 if (!track->enabled()) { … … 200 168 } 201 169 202 OwrMediaSource* mediaSource = OWR_MEDIA_SOURCE(reinterpret_cast<RealtimeMediaSourceOwr*>(&track->source())->mediaSource());170 track->addObserver(*this); 203 171 204 172 switch (track->type()) { 205 173 case RealtimeMediaSource::Audio: 206 if (m_audioTrack && (m_audioTrack.get() == track))207 g_object_set(m_audioRenderer.get(), "disabled", FALSE, nullptr);208 209 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_audioRenderer.get()), mediaSource);210 174 m_audioTrack = track; 211 track->addObserver(*this);212 175 break; 213 176 case RealtimeMediaSource::Video: 214 if (m_videoTrack && (m_videoTrack.get() == track))215 g_object_set(m_videoRenderer.get(), "disabled", FALSE, nullptr);216 217 // FIXME: Remove hardcoded video dimensions when the rendering performance:218 // https://webkit.org/b/153826.219 g_object_set(m_videoRenderer.get(), "width", 640, "height", 480, nullptr);220 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_videoRenderer.get()), mediaSource);221 177 m_videoTrack = track; 222 track->addObserver(*this);223 178 break; 224 179 case RealtimeMediaSource::None: … … 229 184 m_readyState = MediaPlayer::HaveEnoughData; 230 185 m_player->readyStateChanged(); 186 } 187 188 void MediaPlayerPrivateGStreamerOwr::loadingFailed(MediaPlayer::NetworkState error) 189 { 190 if (m_networkState != error) { 191 m_networkState = error; 192 m_player->networkStateChanged(); 193 } 194 if (m_readyState != MediaPlayer::HaveNothing) { 195 m_readyState = MediaPlayer::HaveNothing; 196 m_player->readyStateChanged(); 197 } 198 } 199 200 bool MediaPlayerPrivateGStreamerOwr::didLoadingProgress() const 201 { 202 // FIXME: Implement loading progress support. 231 203 return true; 232 204 } … … 234 206 void MediaPlayerPrivateGStreamerOwr::stop() 235 207 { 236 if (m_stopped)237 return;238 239 m_stopped = true;240 208 if (m_audioTrack) { 241 209 GST_DEBUG("Stop: disconnecting audio"); 242 210 g_object_set(m_audioRenderer.get(), "disabled", TRUE, nullptr); 211 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_audioRenderer.get()), nullptr); 243 212 } 244 213 if (m_videoTrack) { 245 214 GST_DEBUG("Stop: disconnecting video"); 246 215 g_object_set(m_videoRenderer.get(), "disabled", TRUE, nullptr); 216 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_videoRenderer.get()), nullptr); 247 217 } 248 218 } … … 313 283 } 314 284 315 void MediaPlayerPrivateGStreamerOwr::trackMutedChanged(MediaStreamTrackPrivate& )285 void MediaPlayerPrivateGStreamerOwr::trackMutedChanged(MediaStreamTrackPrivate& track) 316 286 { 317 287 GST_DEBUG("Track muted state changed"); 288 289 maybeHandleChangeMutedState(track); 290 } 291 292 void MediaPlayerPrivateGStreamerOwr::maybeHandleChangeMutedState(MediaStreamTrackPrivate& track) 293 { 294 auto realTimeMediaSource = reinterpret_cast<RealtimeMediaSourceOwr*>(&track.source()); 295 auto mediaSource = OWR_MEDIA_SOURCE(realTimeMediaSource->mediaSource()); 296 297 switch (track.type()) { 298 case RealtimeMediaSource::Audio: 299 if (!realTimeMediaSource->muted()) { 300 g_object_set(m_audioRenderer.get(), "disabled", false, nullptr); 301 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_audioRenderer.get()), mediaSource); 302 } else { 303 g_object_set(m_audioRenderer.get(), "disabled", true, nullptr); 304 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_audioRenderer.get()), nullptr); 305 } 306 break; 307 case RealtimeMediaSource::Video: 308 if (!realTimeMediaSource->muted()) { 309 g_object_set(m_videoRenderer.get(), "disabled", false, nullptr); 310 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_videoRenderer.get()), mediaSource); 311 } else { 312 g_object_set(m_videoRenderer.get(), "disabled", true, nullptr); 313 owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_videoRenderer.get()), nullptr); 314 } 315 break; 316 case RealtimeMediaSource::None: 317 GST_WARNING("Trying to change mute state of a track with None type"); 318 } 318 319 } 319 320 … … 332 333 GstElement* sink = MediaPlayerPrivateGStreamerBase::createVideoSink(); 333 334 m_videoRenderer = adoptGRef(owr_gst_video_renderer_new(sink)); 335 336 // FIXME: Remove hardcoded video dimensions when the rendering performance: 337 // https://webkit.org/b/153826. 338 g_object_set(m_videoRenderer.get(), "width", 640, "height", 480, nullptr); 339 334 340 return sink; 335 341 } -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h
r202851 r204118 95 95 void createGSTAudioSinkBin(); 96 96 void loadingFailed(MediaPlayer::NetworkState error); 97 bool internalLoad();98 97 void stop(); 98 void maybeHandleChangeMutedState(MediaStreamTrackPrivate&); 99 99 100 100 bool m_paused { true }; 101 bool m_stopped { true };102 101 RefPtr<MediaStreamTrackPrivate> m_videoTrack; 103 102 RefPtr<MediaStreamTrackPrivate> m_audioTrack;
Note: See TracChangeset
for help on using the changeset viewer.