// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// https://www.w3.org/TR/media-source/#idl-def-SourceBuffer
// https://www.w3.org/TR/2016/CR-media-source-20160705/#sourcebuffer

interface SourceBuffer : EventTarget {
  // MSE 2016 Interface
  [RaisesException] attribute SourceBufferAppendMode mode;
  readonly attribute boolean updating;
  [RaisesException] readonly attribute TimeRanges buffered;
  [RaisesException] attribute double timestampOffset;
  readonly attribute AudioTrackList audioTracks;
  readonly attribute VideoTrackList videoTracks;
  // readonly attribute TextTrackList textTracks;
  [RaisesException] attribute double appendWindowStart;
  [RaisesException] attribute unrestricted double appendWindowEnd;
  [RaisesException] void appendBuffer(ArrayBuffer data);
  [RaisesException] void appendBuffer(ArrayBufferView data);

  // appendStream() omitted as it is not used.
  [RaisesException] void abort();
  [RaisesException] void remove(double start, unrestricted double end);
  [RaisesException] attribute TrackDefaultList trackDefaults;

  // Non standard interface (b/267678497).
  // Returns the highest presentation timestamp written to SbPlayer, raises
  // `InvalidStateError` if the SourceBuffer object has been removed from the
  // MediaSource object.
  [RaisesException] readonly attribute double writeHead;

  // Non standard stream memory limit modifier. This will override the default
  // stream memory limit which is tied to the resolution of the video.
  // This will be passed down to the SourceBufferStream associated with this
  // instance.
  [RaisesException] attribute unsigned long long memoryLimit;
};
