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

#include "starboard/media.h"

#include "starboard/common/log.h"

#if SB_API_VERSION >= 10

SbMediaBufferStorageType SbMediaGetBufferStorageType() {
// Use define forwarded from GYP variable.
#if defined(COBALT_MEDIA_BUFFER_STORAGE_TYPE_MEMORY)
  // This is the legacy default value of the GYP variable, so don't warn.
  return kSbMediaBufferStorageTypeMemory;
#elif defined(COBALT_MEDIA_BUFFER_STORAGE_TYPE_FILE)
  SB_DLOG(WARNING) << "COBALT_MEDIA_BUFFER_STORAGE_TYPE_FILE will be "
                      "deprecated in a future Starboard version.";
  return kSbMediaBufferStorageTypeFile;
#else   // defined(COBALT_MEDIA_BUFFER_STORAGE_TYPE_MEMORY)
  // In the absence of other information, assume memory storage is the default.
  return kSbMediaBufferStorageTypeMemory;
#endif  // defined(COBALT_MEDIA_BUFFER_STORAGE_TYPE_MEMORY)
}
#endif  // SB_API_VERSION >= 10
