// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cobalt/media/base/mime_util.h"

#include "base/lazy_instance.h"
#include "cobalt/media/base/mime_util_internal.h"

namespace cobalt {
namespace media {

// This variable is Leaky because it is accessed from WorkerPool threads.
static base::LazyInstance<internal::MimeUtil>::Leaky g_media_mime_util =
    LAZY_INSTANCE_INITIALIZER;

bool IsSupportedMediaMimeType(const std::string& mime_type) {
  return g_media_mime_util.Pointer()->IsSupportedMediaMimeType(mime_type);
}

SupportsType IsSupportedMediaFormat(const std::string& mime_type,
                                    const std::vector<std::string>& codecs) {
  return g_media_mime_util.Pointer()->IsSupportedMediaFormat(mime_type, codecs,
                                                             false);
}

SupportsType IsSupportedEncryptedMediaFormat(
    const std::string& mime_type, const std::vector<std::string>& codecs) {
  return g_media_mime_util.Pointer()->IsSupportedMediaFormat(mime_type, codecs,
                                                             true);
}

void ParseCodecString(const std::string& codecs,
                      std::vector<std::string>* codecs_out, bool strip) {
  g_media_mime_util.Pointer()->ParseCodecString(codecs, codecs_out, strip);
}

void RemoveProprietaryMediaTypesAndCodecsForTests() {
  g_media_mime_util.Pointer()->RemoveProprietaryMediaTypesAndCodecs();
}

}  // namespace media
}  // namespace cobalt
