summaryrefslogtreecommitdiffstats
path: root/media/base/pipeline_impl.cc
Commit message (Collapse)AuthorAgeFilesLines
* Added checks to GetBufferedTime() to cap at the media's durationvrk@google.com2010-06-141-8/+13
| | | | | | | | | | | | No longer tries to estimate buffered time when media is fully loaded. Also caps estimation at the duration of the media. BUG=none TEST=media_unittests Review URL: http://codereview.chromium.org/2782004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49714 0039d316-1c4b-4281-b951-d872f2087c98
* Change MediaFilter::Stop() to accept a callback so that Stop() is ↵boliu@google.com2010-06-021-102/+113
| | | | | | | | | | | asynchronous. So far PipelineImpl handles asynchronous MediaFilter::Stop(). The actual change to make MediaFilter::Stop() asynchronous will be in another check in. BUG=16059 TEST=Unit tests still runs Review URL: http://codereview.chromium.org/2101015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48769 0039d316-1c4b-4281-b951-d872f2087c98
* Reporting a more accurate buffered time for the video taghclam@chromium.org2010-05-251-10/+29
| | | | | | | | | | | | | Instead of showing that the entire file is buffered when the video first loads, this uses current time, current bytes, and buffered bytes to estimate buffered time. Reviewed: http://codereview.chromium.org/2085012/ Submitted for: vrk@chromium.org BUG=42285 TEST=NONE Review URL: http://codereview.chromium.org/2192001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48199 0039d316-1c4b-4281-b951-d872f2087c98
* Refactoring in media::PipelineImpl and media::MediaFilter.scherkus@chromium.org2010-05-171-15/+10
| | | | | | | | | | | | | | | | A hack in media::PipelineImpl::BroadcastMessageTask() was previously required to remove the mime_type of the disabled renderer. Since the only use of media::PipelineImpl::BroadcastMessage() is to disable the audio renderer, refactor BroadcastMessage() to DisableAudioRenderer() and refactor media::MediaFilter::OnReceivedMessage() to OnAudioRendererDisabled(). Patch by boliu@google.com: http://codereview.chromium.org/2042014/show BUG=19384 TEST=media_unittests Review URL: http://codereview.chromium.org/2069006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47472 0039d316-1c4b-4281-b951-d872f2087c98
* Issues with video loopinghclam@chromium.org2010-04-201-2/+7
| | | | | | | | | | | | | | | | | Some video streams are badly muxed and have video packets with timestamps greater than the duration. This causes the logic in the video renderer to sleep forever and never read the end-of-stream packet and thus the stream is never ended. This change adjusted the condition on when we should sleep and handle timestamp greater than duration as a special case. TEST=video loops BUG=41579 Review URL: http://codereview.chromium.org/1652011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45124 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 42727 - ffmpeg roll chromium binariesfbarchard@chromium.org2010-03-261-2/+1
| | | | | | | | | | | bug=none test=none TBR=fbarchard@chromium.org Review URL: http://codereview.chromium.org/1401002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42728 0039d316-1c4b-4281-b951-d872f2087c98
* ffmpeg roll chromium binariesfbarchard@chromium.org2010-03-261-1/+2
| | | | | | | | bug=none test=none git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42727 0039d316-1c4b-4281-b951-d872f2087c98
* Pulled out Callback code into base/callback.h. This is the first step ↵akalin@chromium.org2010-02-191-0/+1
| | | | | | | | | | | | | towards redoing the Callback interfaces. Added and removed includes as needed. BUG=35223 TEST=trybots Review URL: http://codereview.chromium.org/646061 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39419 0039d316-1c4b-4281-b951-d872f2087c98
* Report stalled event correctly for <video>hclam@chromium.org2009-10-161-0/+28
| | | | | | | | | | | | | | | | | | | | | BUG=20127 BUG=13568 TEST=Opens a web page, stalled event should be fire only if network is actuall stalled. What this patch does: 1. Report Loading / Idle according to whether we are actively receiving data in the BuffereResourceLoader. This is done by signaling the network events to BufferedDataSource and then to the media playback pipeline. 2. Report byteLoaded() as the last byte position buffered. This will enable an actual ticking progress for the progress event. With this value actually ticking, stalled event is suppressed. Review URL: http://codereview.chromium.org/269002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29235 0039d316-1c4b-4281-b951-d872f2087c98
* Correct network state and ready state reporting.ajwong@chromium.org2009-08-211-0/+12
| | | | | | | | | | | | | For network state, make it return "loading" for everything that's not a file source since our cache does not yet reliably support caching the full media w/o need for a network. For ready state, correctly handle seeks to drop from HaveEnoughData down to HaveMetaData until the seek completes. Also implement the seeking() function. BUG=18975 TEST=none Review URL: http://codereview.chromium.org/165432 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24036 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting r24002 due to test_shell_tests rednessajwong@chromium.org2009-08-211-12/+0
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24004 0039d316-1c4b-4281-b951-d872f2087c98
* Correct network state and ready state reporting.ajwong@chromium.org2009-08-211-0/+12
| | | | | | | | | | | | | For network state, make it return "loading" for everything that's not a file source since our cache does not yet reliably support caching the full media w/o need for a network. For ready state, correctly handle seeks to drop from HaveEnoughData down to HaveMetaData until the seek completes. Also implement the seeking() function. BUG=18975 TEST=none Review URL: http://codereview.chromium.org/165432 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24002 0039d316-1c4b-4281-b951-d872f2087c98
* Suppress slider thumb jumping around during seekinghclam@chromium.org2009-08-211-7/+40
| | | | | | | | | | | | | BUG=19396 TEST=Open a video, seek to any position, the thumb should stops a bit and then goes forward from there. Preventing the slider thumb from jumping around after seek by freezing the clock until we get a valid time update from the audio renderer. Review URL: http://codereview.chromium.org/173072 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23937 0039d316-1c4b-4281-b951-d872f2087c98
* Framework to display disabled mute button when audio fails.kylep@chromium.org2009-08-141-0/+5
| | | | | | | | BUG=18970 TEST=play a video with no audio hardware, verify that UI changes Review URL: http://codereview.chromium.org/169010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23491 0039d316-1c4b-4281-b951-d872f2087c98
* Implemented end-of-stream callback for media::PipelineImpl.scherkus@chromium.org2009-08-121-4/+50
| | | | | | | | | | | | | | | A new method HasEnded() was added to renderer interfaces. Renderers return true when they have both received and rendered an end-of-stream buffer. For audio this translates to sending the very last buffer to the hardware. For video this translates to displaying a black frame after the very last frame has been displayed. Renderers can notify the pipeline that the value of HasEnded() has changed to true via FilterHost::NotifyEnded(). Instead of tracking which renderers have called NotifyEnded(), the pipeline uses the notification to poll every renderer. The ended callback will only be executed once every renderer returns true for HasEnded(). This has a nice benefit of being able to ignore extra NotifyEnded() calls if we already determine the pipeline has ended. With the changes to WebMediaPlayerImpl, we should now properly support both the ended event and looping. BUG=16768,17970,18433,18846 TEST=media_unittests, media layout tests, ended event, timeupdate should stop firing, looping should work, seeking after video ends Review URL: http://codereview.chromium.org/164403 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23255 0039d316-1c4b-4281-b951-d872f2087c98
* Free demuxed audio packets if audio device failshclam@chromium.org2009-08-061-0/+20
| | | | | | | | | | | | | | | | BUG=17481 TEST=media_unittests Introduced a mesage broadcasting mechanism to notify filters of events from another filter. In particular this is used to notify all filters that the audio device has failed and special actions should be taken to handle it. In this case, demuxer should disable the audio stream and should free the demuxed audio packets instead of caching them. This will fix the memory leak that happens if audio device fails during playback. Review URL: http://codereview.chromium.org/159845 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22630 0039d316-1c4b-4281-b951-d872f2087c98
* Missing buffered attribute for <video>/<audio>hclam@google.com2009-07-301-1/+16
| | | | | | | | | | | | | | | | | | | | | | | | | BUG=16056 TEST=LayoutTests/media/video-buffered.html The current implementation of the buffered attribute for <video> and <audio> is broken. There are several problems around this attribute: 1. We don't have any caching on disk, so we only keep a recent range of bytes close to current playback position. 2. WebKit reports buffered as one range (0, max_time_buffered). But we only cache a short partial range which doesn't start with 0. The correct implementation is a list of ranges buffered. But this has to go into WebKit first. 3. We don't have an accurate mapping between byte offset < - > timestamp. So the current implementation is to lie about what we have buffered. We always say we have buffered everything before the current download position. And we only report one range. The calculation of time is also based on scaling the duration with current buffered bytes. Review URL: http://codereview.chromium.org/160300 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22087 0039d316-1c4b-4281-b951-d872f2087c98
* Pipeline will execute a callback whenever an run-time error has happened.kylep@chromium.org2009-07-301-0/+10
| | | | | | | | BUG=16738 TEST=pipeline_impl_unittest.cc Review URL: http://codereview.chromium.org/160298 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22075 0039d316-1c4b-4281-b951-d872f2087c98
* BufferedDataSource to support server without range request supporthclam@chromium.org2009-07-291-0/+12
| | | | | | | | | | | | | | | This patch will enable BufferedDataSource to support servers with no range request support. It will start a probe request of 1 byte size besides the regular request. If the server does not support range request, we will turn on the is_streamed flag of FFmpeg and will not do any seeking. BUG=17628 TEST=test_shell_tests --gtest_filter=BufferedDataSource.* Review URL: http://codereview.chromium.org/160076 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21999 0039d316-1c4b-4281-b951-d872f2087c98
* Nice and easy fix for the media clock interpolating past the duration.scherkus@chromium.org2009-07-291-1/+5
| | | | | | | | | | | I considered adding duration to Clock itself, but that felt like it would pollute Clock's simple purposes of keeping track of time. Furthermore, by keeping duration checking in PipelineImpl we can handle future scenarios such as streaming media where clock really should run forever. BUG=16508 TEST=currentTime should never exceed duration Review URL: http://codereview.chromium.org/159573 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21937 0039d316-1c4b-4281-b951-d872f2087c98
* Cancel a task if stopped/errored so we don't hit an over-protective DCHECK.scherkus@chromium.org2009-07-281-0/+5
| | | | | | | | | TEST=media bear tests should start passing again BUG=none Review URL: http://codereview.chromium.org/160295 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21907 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Pipeline will execute a callback whenever an run-time error has ↵scherkus@chromium.org2009-07-281-10/+0
| | | | | | | | | | happened." TBR=kylep Review URL: http://codereview.chromium.org/160287 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21885 0039d316-1c4b-4281-b951-d872f2087c98
* Implemented a proper clock for audio/video synchronization.scherkus@chromium.org2009-07-281-8/+15
| | | | | | | | | | | More or less a change to pull out time management from PipelineImpl into a new class ClockImpl. Biggest difference is ClockImpl will use the system clock + linear interpolation to provide a more "precise" representation of the current playback position. BUG=16508 TEST=a/v sync should remain the same, currentTime should report more precise values Review URL: http://codereview.chromium.org/159517 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21882 0039d316-1c4b-4281-b951-d872f2087c98
* Pipeline will execute a callback whenever an run-time error has happened.kylep@chromium.org2009-07-281-0/+10
| | | | | | | | BUG=16738 TEST=pipeline_impl_unittest.cc Review URL: http://codereview.chromium.org/159373 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21877 0039d316-1c4b-4281-b951-d872f2087c98
* Implemented proper pause-then-seek behaviour for the media pipeline.scherkus@chromium.org2009-07-251-35/+119
| | | | | | | | | | | | | | | | | | | | | | MediaFilter now has asynchronous Play() and Pause() methods that are implemented by default. Since we are a completely pull-based system, it turns out only AudioRendererBase and VideoRendererBase need to override them to halt reading from decoders. When a seek is received by the pipeline, it goes through the following state transitions: 1) Playing -> Pausing -> Paused (notify filters to stop reading) 2) Paused -> Seeking (notify filters to flush buffers and preroll) 3) Seeking -> Playing (preroll completed, resume playback) The key to this system is that there must be no pending reads in *any* filter when we start transitioning into the seeking state. That means the audio/video renderers do not complete their pausing->paused transition until they have completed all pending reads. To reiterate, since we're pulled based if the renderers are not reading any data, then *nothing* is happening in the pipeline. We get a lot of nice benefits from this assertion, namely no callbacks are ever "lost", they are always replied to until we are fully paused. Furthermore, we can guarantee that the first buffer received after a Seek() will be guaranteed to be discontinuous. This change also properly handles end-of-stream, seeking from an end-of-stream state, and displaying frames while paused. In summary, I was able to call Seek() in a while(true) loop without crashing or going out of sync. BUG=16014,16021,17456 TEST=seeking should be way more robust Review URL: http://codereview.chromium.org/160005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21611 0039d316-1c4b-4281-b951-d872f2087c98
* Merged PipelineInternal into PipelineImpl, eliminating a ton of ↵scherkus@chromium.org2009-07-231-154/+108
| | | | | | | | | | | | | | | | | thread-UNsafeness and confusion. Long story short: there's no reason to split an implementation of class between two classes. The data was being held in one class, with the other class accessing it privately without acquiring the lock. Really, really painful to debug as well. Now we have a unified implementation of Pipeline that takes care of client API requests as well as filter interaction. Since Pipeline is properly reference counted and there are two less objects to worry about, the crash reported in 3.0.195.1 should also be resolved. BUG=17107,17548 TEST=pipeline tests, media player and chrome ui tests Review URL: http://codereview.chromium.org/159246 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21464 0039d316-1c4b-4281-b951-d872f2087c98
* Changes to provide asynchronous read in data source:hclam@chromium.org2009-07-221-1/+5
| | | | | | | | | | | | | 1. FFmpegGlue now taks a FFmpegProtocol instead of DataSource as input 2. FFmpegDemuxr implements FFmpegProtocol and does the blocking read and submit asynchronous read request to DataSource (with unit tests) 3. Changed SimpleDataSource to work with asynchronous read (with unit tests) 4. Reimplemented BufferedDataSource to work with asynchronous read (with unit tests) 5. Moved BufferedDataSource from chrome/renderer/media to webkit/glue/media (for faster build/debug and better coverage in automated testing) TEST=BufferedDataSourceTest.*, SimpleDataSourceTest.*, FFmpegDemuxerTest.* Review URL: http://codereview.chromium.org/149567 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21326 0039d316-1c4b-4281-b951-d872f2087c98
* Merged FilterHostImpl into PipelineInternal as it was no longer needed and ↵scherkus@chromium.org2009-07-221-47/+71
| | | | | | | | | | | | | | | added complexity. PipelineInternal now directly implements FilterHost and uses an std::map to safely cast from MediaFilter to specialized filter subclasses. PipelineImpl also provides the same set of functions as FilterHost to allow PiplineInternal to acquire the lock and safely update data. BUG=17107 TEST=media_unittests should still pass Review URL: http://codereview.chromium.org/155739 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21287 0039d316-1c4b-4281-b951-d872f2087c98
* Renamed FilterHost::Error() and Pipeline::GetTime() to more appropriate names.scherkus@chromium.org2009-07-171-5/+5
| | | | | | | | | BUG=17107 TEST=none Review URL: http://codereview.chromium.org/155711 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21013 0039d316-1c4b-4281-b951-d872f2087c98
* Adding callback support to media filter Initialize() and Seek().scherkus@chromium.org2009-07-161-15/+19
| | | | | | | | | | | | | Also includes unit tests for AudioRendererBase and VideoRendererBase. I had to rollback my first attempt at this change. Original review: http://codereview.chromium.org/155469 BUG=16014,16031 TEST=media_unittests, layout tests Review URL: http://codereview.chromium.org/155608 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20836 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Splitting media filter's Initialize() into Create() + callback and ↵scherkus@chromium.org2009-07-151-19/+15
| | | | | | | | | Seek() + callback." Review URL: http://codereview.chromium.org/149682 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20745 0039d316-1c4b-4281-b951-d872f2087c98
* Splitting media filter's Initialize() into Create() + callback and Seek() + ↵scherkus@chromium.org2009-07-151-15/+19
| | | | | | | | | | | callback. BUG=16014,16031 TEST=media_unittests, layout tests Review URL: http://codereview.chromium.org/155469 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20744 0039d316-1c4b-4281-b951-d872f2087c98
* Removed the bool parameter from PipelineCallback and cleaned up ↵scherkus@chromium.org2009-07-151-7/+4
| | | | | | | | | | | | | WebMediaPlayerImpl::Proxy. This forces clients to check Pipeline::GetError() instead of using a simple true/false check for success. Also the bool parameter wasn't being used for Seek() and Stop() callbacks, further hinting at its removal. BUG=16009 TEST=media_unittests pass, layout tests pass Review URL: http://codereview.chromium.org/149584 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20738 0039d316-1c4b-4281-b951-d872f2087c98
* Set Volume to full at start.fbarchard@chromium.org2009-07-141-2/+2
| | | | | | Review URL: http://codereview.chromium.org/149624 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20678 0039d316-1c4b-4281-b951-d872f2087c98
* Small changes to comments and add host() + message_loop() implementation ↵ajwong@chromium.org2009-07-131-1/+9
| | | | | | | | | | into MediaFilter. Remove host() and message_loop() overrides in DecoderBase. Review URL: http://codereview.chromium.org/150193 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20533 0039d316-1c4b-4281-b951-d872f2087c98
* More media::PipelineImpl cleanup, this time focusing on not taking down the ↵scherkus@chromium.org2009-07-111-42/+52
| | | | | | | | | | | | | | | | render process. Specifically, if the pipeline hasn't started we should fail gracefully and not DCHECK. Volume and playback rate are now allowed to be set if the pipeline isn't running, and filters will now receive a call to SetVolume() and SetPlaybackRate() with the initial values when the pipeline has fully initialized. Added tests and expectations for all of this and ran valgrind to verify that we were indeed leaking memory (now fixed). BUG=16009, 13902 TEST=media_unittests, layout tests Review URL: http://codereview.chromium.org/149500 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20455 0039d316-1c4b-4281-b951-d872f2087c98
* Unreverting "Implemented injected message loops for PipelineImpl"scherkus@chromium.org2009-07-111-227/+248
| | | | | | | | | | Guess it was a flaky layout test. TBR=hclam Review URL: http://codereview.chromium.org/155400 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20444 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Implemented injected message loops for PipelineImpl."scherkus@chromium.org2009-07-101-248/+227
| | | | | | | | | | | | I cannot repro the layout test failures, seeing if this helps. TBR=hclam BUG=none TEST=none Review URL: http://codereview.chromium.org/155396 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20439 0039d316-1c4b-4281-b951-d872f2087c98
* Implemented injected message loops for PipelineImpl.scherkus@chromium.org2009-07-101-227/+248
| | | | | | | | | | | For now both the player and WebMediaPlayerImpl create a thread and inject its message loop into the pipeline. The end result is more-or-less the same as what we have today, but we could end up moving the pipeline onto the render thread. BUG=16008 TEST=layout tests, media_unittests should pass Review URL: http://codereview.chromium.org/155338 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20417 0039d316-1c4b-4281-b951-d872f2087c98
* Made MediaFilter::host_ and MediaFilter::message_loop_ private.scherkus@chromium.org2009-07-091-2/+2
| | | | | | | | | | | More cleanup relating to pipeline cleanup. BUG=16008 TEST=no real code chage, nothing should change Review URL: http://codereview.chromium.org/155230 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20338 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Made MediaFilter::host_ and MediaFilter::message_loop_ private."scherkus@chromium.org2009-07-091-2/+2
| | | | | | | | | | TEST=none BUG=none TBR=evmar Review URL: http://codereview.chromium.org/155333 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20336 0039d316-1c4b-4281-b951-d872f2087c98
* Made MediaFilter::host_ and MediaFilter::message_loop_ private.scherkus@chromium.org2009-07-091-2/+2
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20335 0039d316-1c4b-4281-b951-d872f2087c98
* Big media::Pipeline cleanup.scherkus@chromium.org2009-07-091-166/+127
| | | | | | | | | | | Before I can even start refactoring, I need to remove a lot of accumulated cruft and fix some style stuff. PipelineStatus has been merged into Pipeline and I got rid of GetInterpolatedTime() as well as the ability to schedule callbacks when time has updated. We haven't found a need for these features and they introduced a good amount of code complexity. TEST=media_unittests should still pass BUG=16008 Review URL: http://codereview.chromium.org/149215 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20218 0039d316-1c4b-4281-b951-d872f2087c98
* Asynchronous initialization of media::PipelineThreadhclam@chromium.org2009-07-011-182/+210
| | | | | | | | | The initialization of media::PipelineThread needs to done asynchronously or a lot of dead lock will happen. Review URL: http://codereview.chromium.org/149123 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19787 0039d316-1c4b-4281-b951-d872f2087c98
* Switching decoders to use the injected message loop.scherkus@chromium.org2009-06-291-1/+7
| | | | | | | | | TEST=test should continue to pass, movies stay in sync BUG=none Review URL: http://codereview.chromium.org/146068 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19555 0039d316-1c4b-4281-b951-d872f2087c98
* Refactor media pipeline and filters to use injected message loops.scherkus@chromium.org2009-06-251-5/+110
| | | | | | | | | | | Message loops are provided via MediaFilter::SetMessageLoop(). For now FFmpegDemuxer is the only filter taking advantage of injected message loops, and its unit tests have been updated as well. TEST=FFmpegDemuxer tests should continue to run BUG=none Review URL: http://codereview.chromium.org/145014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19209 0039d316-1c4b-4281-b951-d872f2087c98
* Better seeking for <video> and <audio>hclam@chromium.org2009-05-291-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There two problems surrouding the seek feature for <video> and <audio>: 1. After each seek, the time goes back and forth until stable, so user has to "fight" the time bar for seeking. 2. When playing an audio file, sounds plays a litte bit and then the play position rewinded and plays again. The cause of above problems: 1. There are demuxed packets and decoded buffers inside decoders and renderers. When seek is requested only demuxer flush its buffers, decoders and renderers still plays a little bit of the old buffer, thus updating the time incorrectly. 2. When playing a media file, WebKit does: 1. load() 2. pause() 3. seek(0.0f) 4. play() Since load() does prerolling internally, there were some decoded buffers in the renderers, and when seek(0.0f) is fired the play position reset to time 0 and decode starts from there again, the internal buffer queue in the renderer would then look like: | 0.0s | | 0.1s | | 0.2s | | 0.0s | | 0.1s | ... Thus playback at the beginning goes back and forth. To solve the seek problems, here's what is done in this CL: 1. All decoders and renderers should receive the seek signal. 2. When seek signal is received, discard all buffers and schedule read again. With this CL, we can now scrub an <audio> tag with the timebar. The downside of this fix is that we don't have prerolling (notice that due to how WebKit starts playing back we didn't preroll anyway...), this should be fixed in another CL. Review URL: http://codereview.chromium.org/113891 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17242 0039d316-1c4b-4281-b951-d872f2087c98
* Implemented Pipeline seek callbacks and a big refactor of PipelineImplTest.scherkus@chromium.org2009-05-121-29/+52
| | | | | | | | Now that I'm wiser writing tests, I'm trying to get rid of InitializationHelper and rely on simplier test fixtures classes. I also introduced MockFilterFactory which is capable of creating all the mock filters and is able to return instantiated instances of filters to permit testing for expectations (refer to PipelineImplTest.Seek for an example). Review URL: http://codereview.chromium.org/115094 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15829 0039d316-1c4b-4281-b951-d872f2087c98
* DCHECK now allows SetPlaybackRate(0.0f) if the pipeline is stopped.ralphl@chromium.org2009-04-211-1/+2
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14111 0039d316-1c4b-4281-b951-d872f2087c98
* Fixed a lot threading issues during tear down of <video>hclam@chromium.org2009-03-271-4/+4
| | | | | | | | | | | | | | | | | Fixed a lot of dead locks during tead down of <video> due to DataSourceImpl. Most of the issues come from that during a tab close RenderThread is destroyed and new tasks posted on it will not executed, but DataSourceImpl is waiting for those tasks to finish to complete stopping. Another dead lock comes from that when RenderThread is destroyed the owner loop of it (a IO Message Loop) is being destroyed too and DataSourceImpl shouldn't post tasks to that message loop when stopping. Review URL: http://codereview.chromium.org/42675 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12720 0039d316-1c4b-4281-b951-d872f2087c98