media::TimeIntervals
SourceBufferDecoder::GetBuffered()
{
  media::TimeIntervals buffered = mReader->GetBuffered();
  if (buffered.IsInvalid()) {
    return buffered;
  }

  // Adjust buffered range according to timestamp offset.
  buffered.Shift(media::TimeUnit::FromMicroseconds(mTimestampOffset));

  if (!WasTrimmed()) {
    return buffered;
  }
  media::TimeInterval filter(media::TimeUnit::FromSeconds(0),
                             media::TimeUnit::FromSeconds(mTrimmedOffset));
  return buffered.Intersection(filter);
}
nsresult
SourceBufferDecoder::GetBuffered(dom::TimeRanges* aBuffered)
{
  nsresult rv = mReader->GetBuffered(aBuffered);
  if (NS_FAILED(rv)) {
    return rv;
  }

  // Adjust buffered range according to timestamp offset.
  aBuffered->Shift((double)mTimestampOffset / USECS_PER_S);

  if (!WasTrimmed()) {
    return NS_OK;
  }
  nsRefPtr<dom::TimeRanges> tr = new dom::TimeRanges();
  tr->Add(0, mTrimmedOffset);
  aBuffered->Intersection(tr);
  return NS_OK;
}