Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Side by Side Diff: Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp

Issue 8333009: Merge 97451 - Clear WebMediaPlayerClientImpl back pointer on destruction (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/874/
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "WebMediaPlayerClientImpl.h" 6 #include "WebMediaPlayerClientImpl.h"
7 7
8 #if ENABLE(VIDEO) 8 #if ENABLE(VIDEO)
9 9
10 #include "Frame.h" 10 #include "Frame.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 93
94 WebMediaPlayer* WebMediaPlayerClientImpl::mediaPlayer() const 94 WebMediaPlayer* WebMediaPlayerClientImpl::mediaPlayer() const
95 { 95 {
96 return m_webMediaPlayer.get(); 96 return m_webMediaPlayer.get();
97 } 97 }
98 98
99 // WebMediaPlayerClient -------------------------------------------------------- 99 // WebMediaPlayerClient --------------------------------------------------------
100 100
101 WebMediaPlayerClientImpl::~WebMediaPlayerClientImpl() 101 WebMediaPlayerClientImpl::~WebMediaPlayerClientImpl()
102 { 102 {
103 // VideoLayerChromium may outlive this object so make sure all frames are 103 // VideoLayerChromium may outlive this object so clear the back pointer.
104 // released.
105 #if USE(ACCELERATED_COMPOSITING) 104 #if USE(ACCELERATED_COMPOSITING)
106 if (m_videoLayer.get()) 105 if (m_videoLayer.get())
107 m_videoLayer->releaseCurrentFrame(); 106 m_videoLayer->releaseProvider();
108 #endif 107 #endif
109 } 108 }
110 109
111 void WebMediaPlayerClientImpl::networkStateChanged() 110 void WebMediaPlayerClientImpl::networkStateChanged()
112 { 111 {
113 ASSERT(m_mediaPlayer); 112 ASSERT(m_mediaPlayer);
114 m_mediaPlayer->networkStateChanged(); 113 m_mediaPlayer->networkStateChanged();
115 } 114 }
116 115
117 void WebMediaPlayerClientImpl::readyStateChanged() 116 void WebMediaPlayerClientImpl::readyStateChanged()
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 return KURL(); 212 return KURL();
214 #endif 213 #endif
215 } 214 }
216 215
217 // MediaPlayerPrivateInterface ------------------------------------------------- 216 // MediaPlayerPrivateInterface -------------------------------------------------
218 217
219 void WebMediaPlayerClientImpl::load(const String& url) 218 void WebMediaPlayerClientImpl::load(const String& url)
220 { 219 {
221 m_url = url; 220 m_url = url;
222 221
223 // Video frame object is owned by WebMediaPlayer. Before destroying
224 // WebMediaPlayer all frames need to be released.
225 #if USE(ACCELERATED_COMPOSITING)
226 if (m_videoLayer.get())
227 m_videoLayer->releaseCurrentFrame();
228 #endif
229
230 if (m_preload == MediaPlayer::None) { 222 if (m_preload == MediaPlayer::None) {
231 m_webMediaPlayer.clear(); 223 m_webMediaPlayer.clear();
232 m_delayingLoad = true; 224 m_delayingLoad = true;
233 } else 225 } else
234 loadInternal(); 226 loadInternal();
235 } 227 }
236 228
237 void WebMediaPlayerClientImpl::loadInternal() 229 void WebMediaPlayerClientImpl::loadInternal()
238 { 230 {
239 Frame* frame = static_cast<HTMLMediaElement*>(m_mediaPlayer->mediaPlayerClie nt())->document()->frame(); 231 Frame* frame = static_cast<HTMLMediaElement*>(m_mediaPlayer->mediaPlayerClie nt())->document()->frame();
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 return m_supportsAcceleratedCompositing; 562 return m_supportsAcceleratedCompositing;
571 } 563 }
572 564
573 bool WebMediaPlayerClientImpl::acceleratedRenderingInUse() 565 bool WebMediaPlayerClientImpl::acceleratedRenderingInUse()
574 { 566 {
575 return m_videoLayer.get() && m_videoLayer->layerTreeHost(); 567 return m_videoLayer.get() && m_videoLayer->layerTreeHost();
576 } 568 }
577 569
578 VideoFrameChromium* WebMediaPlayerClientImpl::getCurrentFrame() 570 VideoFrameChromium* WebMediaPlayerClientImpl::getCurrentFrame()
579 { 571 {
580 VideoFrameChromium* videoFrame = 0; 572 ASSERT(!m_currentVideoFrame);
581 if (m_webMediaPlayer.get()) { 573 if (m_webMediaPlayer && !m_currentVideoFrame) {
582 WebVideoFrame* webkitVideoFrame = m_webMediaPlayer->getCurrentFrame(); 574 WebVideoFrame* webkitVideoFrame = m_webMediaPlayer->getCurrentFrame();
583 if (webkitVideoFrame) 575 if (webkitVideoFrame)
584 videoFrame = new VideoFrameChromiumImpl(webkitVideoFrame); 576 m_currentVideoFrame = adoptPtr(new VideoFrameChromiumImpl(webkitVide oFrame));
585 } 577 }
586 return videoFrame; 578 return m_currentVideoFrame.get();
587 } 579 }
588 580
589 void WebMediaPlayerClientImpl::putCurrentFrame(VideoFrameChromium* videoFrame) 581 void WebMediaPlayerClientImpl::putCurrentFrame(VideoFrameChromium* videoFrame)
590 { 582 {
591 if (videoFrame) { 583 if (videoFrame && videoFrame == m_currentVideoFrame) {
592 if (m_webMediaPlayer.get()) { 584 if (m_webMediaPlayer.get()) {
593 m_webMediaPlayer->putCurrentFrame( 585 m_webMediaPlayer->putCurrentFrame(
594 VideoFrameChromiumImpl::toWebVideoFrame(videoFrame)); 586 VideoFrameChromiumImpl::toWebVideoFrame(videoFrame));
595 } 587 }
596 delete videoFrame; 588 ASSERT(videoFrame == m_currentVideoFrame);
589 m_currentVideoFrame.clear();
597 } 590 }
598 } 591 }
599 #endif 592 #endif
600 593
601 PassOwnPtr<MediaPlayerPrivateInterface> WebMediaPlayerClientImpl::create(MediaPl ayer* player) 594 PassOwnPtr<MediaPlayerPrivateInterface> WebMediaPlayerClientImpl::create(MediaPl ayer* player)
602 { 595 {
603 OwnPtr<WebMediaPlayerClientImpl> client = adoptPtr(new WebMediaPlayerClientI mpl()); 596 OwnPtr<WebMediaPlayerClientImpl> client = adoptPtr(new WebMediaPlayerClientI mpl());
604 client->m_mediaPlayer = player; 597 client->m_mediaPlayer = player;
605 598
606 #if USE(ACCELERATED_COMPOSITING) 599 #if USE(ACCELERATED_COMPOSITING)
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 WebVector<float*> webAudioData(n); 673 WebVector<float*> webAudioData(n);
681 for (size_t i = 0; i < n; ++i) 674 for (size_t i = 0; i < n; ++i)
682 webAudioData[i] = bus->channel(i)->data(); 675 webAudioData[i] = bus->channel(i)->data();
683 676
684 m_webAudioSourceProvider->provideInput(webAudioData, framesToProcess); 677 m_webAudioSourceProvider->provideInput(webAudioData, framesToProcess);
685 } 678 }
686 679
687 } // namespace WebKit 680 } // namespace WebKit
688 681
689 #endif // ENABLE(VIDEO) 682 #endif // ENABLE(VIDEO)
OLDNEW
« no previous file with comments | « Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698