// Copyright 2016 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 "services/media/framework/metadata.h"

namespace mojo {
namespace media {

// static
std::unique_ptr<Metadata> Metadata::Create(
    uint64_t duration_ns,
    const std::string& title,
    const std::string& artist,
    const std::string& album,
    const std::string& publisher,
    const std::string& genre,
    const std::string& composer) {
  return std::unique_ptr<Metadata>(new Metadata(
      duration_ns,
      title,
      artist,
      album,
      publisher,
      genre,
      composer));
}

Metadata::Metadata(
    uint64_t duration_ns,
    const std::string& title,
    const std::string& artist,
    const std::string& album,
    const std::string& publisher,
    const std::string& genre,
    const std::string& composer) :
    duration_ns_(duration_ns),
    title_(title),
    artist_(artist),
    album_(album),
    publisher_(publisher),
    genre_(genre),
    composer_(composer) {}

Metadata::~Metadata() {}

}  // namespace media
}  // namespace mojo
