// Copyright 2020 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.

#ifndef COBALT_MEDIA_DECODER_BUFFER_MEMORY_INFO_H_
#define COBALT_MEDIA_DECODER_BUFFER_MEMORY_INFO_H_

#include "starboard/media.h"
#include "starboard/types.h"

namespace cobalt {
namespace media {

class DecoderBufferMemoryInfo {
 public:
  virtual ~DecoderBufferMemoryInfo() {}

  virtual size_t GetAllocatedMemory() const = 0;
  virtual size_t GetCurrentMemoryCapacity() const = 0;
  virtual size_t GetMaximumMemoryCapacity() const = 0;
  // The return value will be used in `SourceBuffer::EvictCodedFrames()` so
  // it will evict extra data from the SourceBuffer, to reduce the overall
  // memory the underlying Demuxer implementation may use.
  // NOTE: This is not the best place to pass such information.  Since it is a
  // tentative workaround that will be reverted once we confirm the new
  // DecoderBufferAllocator implementation works in production, adding this
  // here allows us to reduce interfaces passed from media to dom.
  virtual size_t GetSourceBufferEvictExtraInBytes() const = 0;
};

class StubDecoderBufferMemoryInfo : public DecoderBufferMemoryInfo {
 public:
  ~StubDecoderBufferMemoryInfo() override {}

  size_t GetAllocatedMemory() const override { return 0; }
  size_t GetCurrentMemoryCapacity() const override { return 0; }
  size_t GetMaximumMemoryCapacity() const override { return 0; }
  size_t GetSourceBufferEvictExtraInBytes() const override { return 0; }
};

}  // namespace media
}  // namespace cobalt

#endif  // COBALT_MEDIA_DECODER_BUFFER_MEMORY_INFO_H_
