author | Jean-Yves Avenard <jyavenard@mozilla.com> |
Wed, 25 Nov 2015 20:30:09 +1100 | |
changeset 274542 | 349eba21938c8503440a3d38bebbc1c6041f9c8d |
parent 274541 | ae7df1dfcf43d70ce556bf598fe0013245c1e593 |
child 274543 | 0d8e85b5983278ed9c7ed0cbd88c6b1c9d1b307a |
push id | 68621 |
push user | jyavenard@mozilla.com |
push date | Mon, 30 Nov 2015 00:49:17 +0000 |
treeherder | mozilla-inbound@fd4d78b89cc0 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | cpearce |
bugs | 1227396 |
milestone | 45.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/media/MP3FrameParser.h +++ b/dom/media/MP3FrameParser.h @@ -209,29 +209,11 @@ private: DEFINITELY_MP3, // We've hit at least one ID3 tag or MP3 frame. NOT_MP3 // Not found any evidence of the stream being MP3. }; eIsMP3 mIsMP3; }; -class NotifyDataArrivedFilter { -public: - media::IntervalSet<int64_t> NotifyDataArrived(uint32_t aLength, int64_t aOffset) { - media::Interval<int64_t> interval(aOffset, aOffset + aLength); - media::IntervalSet<int64_t> newIntervals(interval); - newIntervals -= mIntervals; - mIntervals += interval; - return newIntervals; - } - - const media::IntervalSet<int64_t>& GetIntervals() { - return mIntervals; - } - -private: - media::IntervalSet<int64_t> mIntervals; -}; - } // namespace mozilla #endif
--- a/dom/media/directshow/DirectShowReader.cpp +++ b/dom/media/directshow/DirectShowReader.cpp @@ -6,17 +6,16 @@ #include "DirectShowReader.h" #include "MediaDecoderReader.h" #include "mozilla/RefPtr.h" #include "DirectShowUtils.h" #include "AudioSinkFilter.h" #include "SourceFilter.h" #include "SampleSink.h" -#include "MediaResource.h" #include "VideoUtils.h" using namespace mozilla::media; namespace mozilla { LogModule* GetDirectShowLog() { @@ -386,20 +385,22 @@ DirectShowReader::NotifyDataArrivedInter AutoPinned<MediaResource> resource(mDecoder->GetResource()); MediaByteRangeSet byteRanges; nsresult rv = resource->GetCachedRanges(byteRanges); if (NS_FAILED(rv)) { return; } - IntervalSet<int64_t> intervals; - for (auto& range : byteRanges) { - intervals += mFilter.NotifyDataArrived(range.Length(), range.mStart); + if (byteRanges == mLastCachedRanges) { + return; } + MediaByteRangeSet intervals = byteRanges - mLastCachedRanges; + mLastCachedRanges = byteRanges; + for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; }
--- a/dom/media/directshow/DirectShowReader.h +++ b/dom/media/directshow/DirectShowReader.h @@ -4,16 +4,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #if !defined(DirectShowReader_h_) #define DirectShowReader_h_ #include "windows.h" // HRESULT, DWORD #include "MediaDecoderReader.h" +#include "MediaResource.h" #include "mozilla/RefPtr.h" #include "MP3FrameParser.h" struct IGraphBuilder; struct IMediaControl; struct IMediaSeeking; namespace mozilla { @@ -100,14 +101,14 @@ private: uint32_t mAudioRate; // Number of bytes per sample. Can be either 1 or 2. uint32_t mBytesPerSample; // Duration of the stream, in microseconds. int64_t mDuration; - NotifyDataArrivedFilter mFilter; + MediaByteRangeSet mLastCachedRanges; }; } // namespace mozilla #endif
--- a/dom/media/gstreamer/GStreamerReader.cpp +++ b/dom/media/gstreamer/GStreamerReader.cpp @@ -1287,21 +1287,22 @@ void GStreamerReader::NotifyDataArrivedI AutoPinned<MediaResource> resource(mResource.GetResource()); MediaByteRangeSet byteRanges; nsresult rv = resource->GetCachedRanges(byteRanges); if (NS_FAILED(rv)) { return; } + if (byteRanges == mLastCachedRanges) { + return; + } + MediaByteRangeSet intervals = byteRanges - mLastCachedRanges; + mLastCachedRanges = byteRanges; - IntervalSet<int64_t> intervals; - for (auto& range : byteRanges) { - intervals += mFilter.NotifyDataArrived(range.Length(), range.mStart); - } for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; }
--- a/dom/media/gstreamer/GStreamerReader.h +++ b/dom/media/gstreamer/GStreamerReader.h @@ -251,14 +251,14 @@ private: bool mReachedVideoEos; #if GST_VERSION_MAJOR >= 1 bool mConfigureAlignment; #endif int fpsNum; int fpsDen; MediaResourceIndex mResource; - NotifyDataArrivedFilter mFilter; + MediaByteRangeSet mLastCachedRanges; }; } // namespace mozilla #endif
--- a/dom/media/omx/MediaOmxReader.cpp +++ b/dom/media/omx/MediaOmxReader.cpp @@ -466,20 +466,22 @@ void MediaOmxReader::NotifyDataArrivedIn AutoPinned<MediaResource> resource(mDecoder->GetResource()); MediaByteRangeSet byteRanges; nsresult rv = resource->GetCachedRanges(byteRanges); if (NS_FAILED(rv)) { return; } - IntervalSet<int64_t> intervals; - for (auto& range : byteRanges) { - intervals += mFilter.NotifyDataArrived(range.Length(), range.mStart); + if (byteRanges == mLastCachedRanges) { + return; } + MediaByteRangeSet intervals = byteRanges - mLastCachedRanges; + mLastCachedRanges = byteRanges; + for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; }
--- a/dom/media/omx/MediaOmxReader.h +++ b/dom/media/omx/MediaOmxReader.h @@ -115,14 +115,14 @@ private: MutexAutoLock lock(mShutdownMutex); return mIsShutdown; } int64_t ProcessCachedData(int64_t aOffset); already_AddRefed<AbstractMediaDecoder> SafeGetDecoder(); - NotifyDataArrivedFilter mFilter; + MediaByteRangeSet mLastCachedRanges; }; } // namespace mozilla #endif