| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
BUG=16011
TEST=audio_renderer_base_unittest.cc and buffer_queue_unittest.cc
Review URL: http://codereview.chromium.org/155695
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22237 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
Review URL: http://codereview.chromium.org/160288
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21891 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
BUG=17107
TEST=none
Review URL: http://codereview.chromium.org/155713
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21044 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
BUG=16011
TEST=DataBuffer unittest
Review URL: http://codereview.chromium.org/149573
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20821 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
between mac and linux.
TEST=none
BUG=16736
Review URL: http://codereview.chromium.org/149632
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20720 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
| |
Review URL: http://codereview.chromium.org/149624
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20678 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
timestamp of our next byte.
BUG=16011
TEST=src/media/base/buffer_queue_unittest.cc
Review URL: http://codereview.chromium.org/149494
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20520 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
The most important part was refactoring PipelineImpl tests in preparation for message loop injection. The old mocks just did not work *at all* with my message loop injection patch.
BUG=16008
TEST=media_unittests should pass and not flake out
Review URL: http://codereview.chromium.org/149423
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20412 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20335 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
| |
non-copyable const references.
TEST=media_unittests should pass
BUG=16008
Review URL: http://codereview.chromium.org/155316
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20328 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
MockFilterHost.
Also deleted the old MockPipeline and MockFilterHost code as it has been completely deprecated.
BUG=16008
TEST=FFmpegDemuxerTest and FFmpegVideoDecoderTest
Review URL: http://codereview.chromium.org/149366
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20242 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
| |
Updated FileDataSource tests to use the new MockFilterHost as a proof of concept, also because my pipeline refactoring completely broke the test.
BUG=16008
TEST=FileDataSourceTest.* should pass
Review URL: http://codereview.chromium.org/149350
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20219 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
algorithms. May be useful in other contexts.
BUG=16011
TEST=src/media/base/buffer_queue_unittest.cc
Review URL: http://codereview.chromium.org/155193
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20211 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
|
| |
Next up is actually refactoring tests to use these and not the old_mocks version. The biggest user is the PipelineImpl tests, which I'm currently refactoring anyway hence sending this out for review.
BUG=16008
TEST=FFmpegVideoDecoderTest should still pass
Review URL: http://codereview.chromium.org/149356
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20201 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
| |
Calls avcodec_free and avcodec_thread_free appropriately.
Review URL: http://codereview.chromium.org/151192
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20039 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
|
| |
longer applicable to this module.
Removed openmp support, which is no longer necessary for high performance.
Review URL: http://codereview.chromium.org/150143
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19971 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
TEST=FFmpegDemuxer tests should continue to run
BUG=none
Review URL: http://codereview.chromium.org/147046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19078 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
| |
The decoder needs a concept of state to know when it should just stop attempting to decode. This is because ffmpeg will sometimes gives spurious frames back, which plays badly with the time presentation timestamp calculation logic.
Review URL: http://codereview.chromium.org/132013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18990 0039d316-1c4b-4281-b951-d872f2087c98
|
|
|
|
|
|
|
|
|
| |
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/145022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18984 0039d316-1c4b-4281-b951-d872f2087c98
|