nsresult
AppleMP3Reader::GetBuffered(dom::TimeRanges* aBuffered,
                            int64_t aStartTime)
{
    ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
    GetEstimatedBufferedTimeRanges(mDecoder->GetResource(),
                                   mDecoder->GetMediaDuration(),
                                   aBuffered);
    return NS_OK;
}
media::TimeIntervals
MediaDecoderReader::GetBuffered()
{
  AutoPinned<MediaResource> stream(mDecoder->GetResource());
  int64_t durationUs = 0;
  {
    ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
    durationUs = mDecoder->GetMediaDuration();
  }
  return GetEstimatedBufferedTimeRanges(stream, durationUs);
}
nsresult
MediaDecoderReader::GetBuffered(mozilla::dom::TimeRanges* aBuffered)
{
  AutoPinned<MediaResource> stream(mDecoder->GetResource());
  int64_t durationUs = 0;
  {
    ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
    durationUs = mDecoder->GetMediaDuration();
  }
  GetEstimatedBufferedTimeRanges(stream, durationUs, aBuffered);
  return NS_OK;
}
media::TimeIntervals
MediaDecoderReader::GetBuffered()
{
  NS_ENSURE_TRUE(mStartTime >= 0, media::TimeIntervals());
  AutoPinned<MediaResource> stream(mDecoder->GetResource());

  if (!mDuration.ReadOnWrongThread().isSome()) {
    return TimeIntervals();
  }

  return GetEstimatedBufferedTimeRanges(stream, mDuration.ReadOnWrongThread().ref().ToMicroseconds());
}
nsresult
DirectShowReader::GetBuffered(mozilla::dom::TimeRanges* aBuffered,
                              int64_t aStartTime)
{
  MediaResource* stream = mDecoder->GetResource();
  int64_t durationUs = 0;
  {
    ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
    durationUs = mDecoder->GetMediaDuration();
  }
  GetEstimatedBufferedTimeRanges(stream, durationUs, aBuffered);
  return NS_OK;
}
media::TimeIntervals
MediaDecoderReader::GetBuffered()
{
  MOZ_ASSERT(OnTaskQueue());

  AutoPinned<MediaResource> stream(mDecoder->GetResource());

  if (!mDuration.Ref().isSome()) {
    return TimeIntervals();
  }

  return GetEstimatedBufferedTimeRanges(stream, mDuration.Ref().ref().ToMicroseconds());
}
nsresult MediaPluginReader::GetBuffered(nsTimeRanges* aBuffered, int64_t aStartTime)
{
  if (!mPlugin)
    return NS_OK;

  MediaResource* stream = mDecoder->GetResource();

  int64_t durationUs = 0;
  mPlugin->GetDuration(mPlugin, &durationUs);

  GetEstimatedBufferedTimeRanges(stream, durationUs, aBuffered);
  
  return NS_OK;
}