summaryrefslogtreecommitdiffstats
path: root/media/base/pipeline.h
Commit message (Collapse)AuthorAgeFilesLines
* Pulled out Callback code into base/callback.h. This is the first step ↵akalin@chromium.org2010-02-191-1/+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
* Correct network state and ready state reporting.ajwong@chromium.org2009-08-211-0/+4
| | | | | | | | | | | | | 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-4/+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/+4
| | | | | | | | | | | | | 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
* BufferedDataSource to support server without range request supporthclam@chromium.org2009-07-291-0/+4
| | | | | | | | | | | | | | | 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
* Implemented proper pause-then-seek behaviour for the media pipeline.scherkus@chromium.org2009-07-251-1/+0
| | | | | | | | | | | | | | | | | | | | | | 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
* Added reference counting to the Pipeline interface.scherkus@chromium.org2009-07-181-1/+3
| | | | | | | | | 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
* Renamed FilterHost::Error() and Pipeline::GetTime() to more appropriate names.scherkus@chromium.org2009-07-171-2/+3
| | | | | | | | | 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
* Removed the bool parameter from PipelineCallback and cleaned up ↵scherkus@chromium.org2009-07-151-11/+7
| | | | | | | | | | | | | 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
* Unreverting "Implemented injected message loops for PipelineImpl"scherkus@chromium.org2009-07-111-27/+22
| | | | | | | | | | 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-22/+27
| | | | | | | | | | | | 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-27/+22
| | | | | | | | | | | 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
* Big media::Pipeline cleanup.scherkus@chromium.org2009-07-091-94/+69
| | | | | | | | | | | 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
* Handle end of stream for mediahclam@chromium.org2009-06-041-0/+1
| | | | | | | | | | When FFmpegDemuxer failed to decode a raw packet, the signal of end of stream should bubble up to the renderers. It is done in this CL by creating fake buffers. This change also fixes a bug with video of only 1 frame. Review URL: http://codereview.chromium.org/113611 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17656 0039d316-1c4b-4281-b951-d872f2087c98
* Implemented Pipeline seek callbacks and a big refactor of PipelineImplTest.scherkus@chromium.org2009-05-121-18/+27
| | | | | | | | 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
* FFmpegDemuxer now uses a thread to handle demuxing.scherkus@chromium.org2009-03-311-0/+1
| | | | | | | | | | Since FFmpegDemuxer no longer uses the pipeline thread to demuxer, I had to add a WaitableEvent to TestReader to make sure the read completed (or not!). Downside is that the test for when a read is never completed now waits 500ms before timing out. Oh well :( Review URL: http://codereview.chromium.org/55047 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12831 0039d316-1c4b-4281-b951-d872f2087c98
* Revert tree bustage cause by r11904.hclam@chromium.org2009-03-171-2/+5
| | | | | | TBR=agl git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11906 0039d316-1c4b-4281-b951-d872f2087c98
* andrew's patchhclam@chromium.org2009-03-171-5/+2
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11904 0039d316-1c4b-4281-b951-d872f2087c98
* Removed unneeded includes of base/time.h.thestig@chromium.org2009-03-161-1/+4
| | | | | | Review URL: http://codereview.chromium.org/48019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11766 0039d316-1c4b-4281-b951-d872f2087c98
* Implemented AudioRendererImpl in renderer process using APIhclam@chromium.org2009-03-101-1/+1
| | | | | | | | | | provided by RenderView for accessing audio device in the browser using IPC, subclassing from media::AudioRendererBase for buffer filling. Review URL: http://codereview.chromium.org/28081 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11392 0039d316-1c4b-4281-b951-d872f2087c98
* Checking in media::FFmpegGlue, media::FFmpegDemuxer and tests.scherkus@chromium.org2009-03-101-1/+6
| | | | | | | | | | | | | | Fixes build break by including FFmpeg dependency for media project in chrome.sln. This is a second attempt at committing the following changelists: http://codereview.chromium.org/39295 http://codereview.chromium.org/28165 TBR=darin Review URL: http://codereview.chromium.org/42029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11356 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Checking in media::FFmpegDemuxer and tests."scherkus@chromium.org2009-03-101-6/+1
| | | | | | Review URL: http://codereview.chromium.org/43032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11350 0039d316-1c4b-4281-b951-d872f2087c98
* Checking in media::FFmpegDemuxer and tests.scherkus@chromium.org2009-03-101-1/+6
| | | | | | | | FFmpegDemuxer is a Demuxer implemenation using FFmpeg's libavformat. It is written in a way to work with any format and assume that the downstream decoders can interpret FFmpeg's CodecID enumerations. Review URL: http://codereview.chromium.org/39295 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11346 0039d316-1c4b-4281-b951-d872f2087c98
* Pipeline_Impl was modified to properly render a stream that has video but no ↵ralphl@chromium.org2009-03-061-2/+15
| | | | | | | | | | | audio. A unit test accompanies the change. Note that one minor other change was snuck in with this change. The data_source_impl.cc had a TODO to set a more specific error when a read failed. Because I was already updating the pipeline error enum, I added the error code, changed the call to host_->Error(), and removed the TODO. Review URL: http://codereview.chromium.org/39170 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11148 0039d316-1c4b-4281-b951-d872f2087c98
* Almost complete implementation of the Chrome video renderer. Still needs to ↵ralphl@chromium.org2009-02-111-2/+14
| | | | | | | | implement color space conversion for final bitblt. Review URL: http://codereview.chromium.org/21037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9575 0039d316-1c4b-4281-b951-d872f2087c98
* Implementation of Pipeline and FilterHost interfaces. This is a large ↵ralphl@chromium.org2009-01-281-13/+17
| | | | | | | | | | | | change, but all of the objects are interrelated. I am also checking in a basic unit test that creates pipeline, and the data source hangs during initialization. The test sleeps one second and then stops the pipeline. Andrew has already done a first pass on this, and the code has come largely from our working experimental branch. Review URL: http://codereview.chromium.org/18546 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8805 0039d316-1c4b-4281-b951-d872f2087c98
* This is the frozen interface definition for the media pipeline, filters, and ↵ralphl@chromium.org2009-01-211-57/+114
| | | | | | | | | | | | | | filter hosts. It has been pre-code-reviewed by scherkus already. There is no actual implementation in this change -- only an empty skeleton for every public method is provided. The actual code is ready, but this change is intended to get buy-off for the public interface. I added pipeline_impl.cc to the media_lib.scons since it was missing (it was present in the .sln file already) Review URL: http://codereview.chromium.org/18380 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8396 0039d316-1c4b-4281-b951-d872f2087c98
* Checking in basic pipeline interface and stubbed out media::PipelineImpl.scherkus@chromium.org2009-01-141-0/+89
This interface is going to be updated some more in the future, but I'd like to get the basics in first. Review URL: http://codereview.chromium.org/17299 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8046 0039d316-1c4b-4281-b951-d872f2087c98