author | Jean-Yves Avenard <jyavenard@mozilla.com> |
Wed, 28 Oct 2015 11:28:21 +1100 | |
changeset 305275 | 8adc6bf10f95b5093499144a5bebcf50ed35e397 |
parent 305274 | 2d5b6e079a602965bcf10633bf090f9b61bb1246 |
child 305276 | 8ef8edb2980f992aff70330730c66c1eb13429d8 |
push id | 1001 |
push user | raliiev@mozilla.com |
push date | Mon, 18 Jan 2016 19:06:03 +0000 |
treeherder | mozilla-release@8b89261f3ac4 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | cpearce |
bugs | 1218157 |
milestone | 44.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/apple/AppleMP3Reader.cpp +++ b/dom/media/apple/AppleMP3Reader.cpp @@ -502,29 +502,40 @@ AppleMP3Reader::Seek(int64_t aTime, int6 void AppleMP3Reader::NotifyDataArrivedInternal(uint32_t aLength, int64_t aOffset) { MOZ_ASSERT(OnTaskQueue()); if (!mMP3FrameParser.NeedsData()) { return; } - IntervalSet<int64_t> intervals = mFilter.NotifyDataArrived(aLength, aOffset); + AutoPinned<MediaResource> resource(mResource.GetResource()); + nsTArray<MediaByteRange> 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); + } for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = - mResource.MediaReadAt(interval.mStart, interval.Length()); + resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; } + } - uint64_t duration = mMP3FrameParser.GetDuration(); - if (duration != mDuration) { - LOGD("Updating media duration to %lluus\n", duration); - MOZ_ASSERT(mDecoder); - mDuration = duration; - mDecoder->DispatchUpdateEstimatedMediaDuration(duration); - } + uint64_t duration = mMP3FrameParser.GetDuration(); + if (duration != mDuration) { + LOGD("Updating media duration to %lluus\n", duration); + MOZ_ASSERT(mDecoder); + mDuration = duration; + mDecoder->DispatchUpdateEstimatedMediaDuration(duration); } } } // namespace mozilla
--- a/dom/media/directshow/DirectShowReader.cpp +++ b/dom/media/directshow/DirectShowReader.cpp @@ -382,28 +382,38 @@ DirectShowReader::SeekInternal(int64_t a void DirectShowReader::NotifyDataArrivedInternal(uint32_t aLength, int64_t aOffset) { MOZ_ASSERT(OnTaskQueue()); if (!mMP3FrameParser.NeedsData()) { return; } - IntervalSet<int64_t> intervals = mFilter.NotifyDataArrived(aLength, aOffset); + AutoPinned<MediaResource> resource(mDecoder->GetResource()); + nsTArray<MediaByteRange> 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); + } for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = - mDecoder->GetResource()->MediaReadAt(interval.mStart, interval.Length()); + resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; } - - int64_t duration = mMP3FrameParser.GetDuration(); - if (duration != mDuration) { - MOZ_ASSERT(mDecoder); - mDuration = duration; - mDecoder->DispatchUpdateEstimatedMediaDuration(mDuration); - } + } + int64_t duration = mMP3FrameParser.GetDuration(); + if (duration != mDuration) { + MOZ_ASSERT(mDecoder); + mDuration = duration; + mDecoder->DispatchUpdateEstimatedMediaDuration(mDuration); } } } // namespace mozilla
--- a/dom/media/gstreamer/GStreamerReader.cpp +++ b/dom/media/gstreamer/GStreamerReader.cpp @@ -1281,32 +1281,42 @@ void GStreamerReader::NotifyDataArrivedI MOZ_ASSERT(OnTaskQueue()); if (HasVideo()) { return; } if (!mMP3FrameParser.NeedsData()) { return; } - IntervalSet<int64_t> intervals = mFilter.NotifyDataArrived(aLength, aOffset); + AutoPinned<MediaResource> resource(mResource.GetResource()); + nsTArray<MediaByteRange> 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); + } for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = - mResource.MediaReadAt(interval.mStart, interval.Length()); + resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; } - - int64_t duration = mMP3FrameParser.GetDuration(); - if (duration != mLastParserDuration && mUseParserDuration) { - MOZ_ASSERT(mDecoder); - mLastParserDuration = duration; - mDecoder->DispatchUpdateEstimatedMediaDuration(mLastParserDuration); - } + } + int64_t duration = mMP3FrameParser.GetDuration(); + if (duration != mLastParserDuration && mUseParserDuration) { + MOZ_ASSERT(mDecoder); + mLastParserDuration = duration; + mDecoder->DispatchUpdateEstimatedMediaDuration(mLastParserDuration); } } #if GST_VERSION_MAJOR >= 1 GstCaps* GStreamerReader::BuildAudioSinkCaps() { GstCaps* caps = gst_caps_from_string("audio/x-raw, channels={1,2}"); const char* format;
--- a/dom/media/omx/MediaCodecReader.cpp +++ b/dom/media/omx/MediaCodecReader.cpp @@ -515,20 +515,31 @@ MediaCodecReader::HasVideo() { return mInfo.HasVideo(); } void MediaCodecReader::NotifyDataArrivedInternal(uint32_t aLength, int64_t aOffset) { - IntervalSet<int64_t> intervals = mFilter.NotifyDataArrived(aLength, aOffset); + AutoPinned<MediaResource> resource(mDecoder->GetResource()); + nsTArray<MediaByteRange> 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); + } for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = - mDecoder->GetResource()->MediaReadAt(interval.mStart, interval.Length()); + resource->MediaReadAt(interval.mStart, interval.Length()); MonitorAutoLock monLock(mParserMonitor); if (mNextParserPosition == mParsedDataLength && mNextParserPosition >= interval.mStart && mNextParserPosition <= interval.mEnd) { // No pending parsing runnable currently. And available data are adjacent to // parsed data. int64_t shift = mNextParserPosition - interval.mStart; const char* buffer = reinterpret_cast<const char*>(bytes->Elements()) + shift;
--- a/dom/media/omx/MediaOmxReader.cpp +++ b/dom/media/omx/MediaOmxReader.cpp @@ -458,31 +458,41 @@ void MediaOmxReader::NotifyDataArrivedIn } if (HasVideo()) { return; } if (!mMP3FrameParser.NeedsData()) { return; } - IntervalSet<int64_t> intervals = mFilter.NotifyDataArrived(aLength, aOffset); + AutoPinned<MediaResource> resource(mDecoder->GetResource()); + nsTArray<MediaByteRange> 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); + } for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = - mDecoder->GetResource()->MediaReadAt(interval.mStart, interval.Length()); + resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; } - - int64_t duration = mMP3FrameParser.GetDuration(); - if (duration != mLastParserDuration) { - mLastParserDuration = duration; - decoder->DispatchUpdateEstimatedMediaDuration(mLastParserDuration); - } + } + int64_t duration = mMP3FrameParser.GetDuration(); + if (duration != mLastParserDuration) { + mLastParserDuration = duration; + decoder->DispatchUpdateEstimatedMediaDuration(mLastParserDuration); } } bool MediaOmxReader::DecodeAudioData() { MOZ_ASSERT(OnTaskQueue()); EnsureActive();
--- a/dom/media/webm/WebMReader.cpp +++ b/dom/media/webm/WebMReader.cpp @@ -785,20 +785,30 @@ media::TimeIntervals WebMReader::GetBuff } return buffered; } void WebMReader::NotifyDataArrivedInternal(uint32_t aLength, int64_t aOffset) { MOZ_ASSERT(OnTaskQueue()); - RefPtr<MediaByteBuffer> bytes = - mDecoder->GetResource()->MediaReadAt(aOffset, aLength); - NS_ENSURE_TRUE_VOID(bytes); - mBufferedState->NotifyDataArrived(bytes->Elements(), aLength, aOffset); + AutoPinned<MediaResource> resource(mDecoder->GetResource()); + nsTArray<MediaByteRange> byteRanges; + nsresult rv = resource->GetCachedRanges(byteRanges); + + if (NS_FAILED(rv)) { + return; + } + + for (auto& range : byteRanges) { + RefPtr<MediaByteBuffer> bytes = + resource->MediaReadAt(range.mStart, range.Length()); + NS_ENSURE_TRUE_VOID(bytes); + mBufferedState->NotifyDataArrived(bytes->Elements(), aLength, aOffset); + } } int WebMReader::GetVideoCodec() { return mVideoCodec; } nsIntRect WebMReader::GetPicture()