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

#ifndef MEDIA_BASE_AUDIO_VIDEO_METADATA_EXTRACTOR_H_
#define MEDIA_BASE_AUDIO_VIDEO_METADATA_EXTRACTOR_H_

#include <map>
#include <string>
#include <vector>

#include "base/macros.h"
#include "media/base/media_export.h"

struct AVDictionary;

namespace media {

class DataSource;

// This class extracts a string dictionary of metadata tags for audio and video
// files. It also provides the format name.
class MEDIA_EXPORT AudioVideoMetadataExtractor {
 public:
  typedef std::map<std::string, std::string> TagDictionary;

  struct StreamInfo {
    StreamInfo();
    StreamInfo(const StreamInfo& other);
    ~StreamInfo();
    std::string type;
    TagDictionary tags;
  };

  typedef std::vector<StreamInfo> StreamInfoVector;

  AudioVideoMetadataExtractor();
  ~AudioVideoMetadataExtractor();

  // Returns whether or not the fields were successfully extracted. Should only
  // be called once.
  bool Extract(DataSource* source, bool extract_attached_pics);

  // Returns whether or not duration information was extracted. Do not call
  // duration() if this returns false.
  bool has_duration() const;

  // Returns the duration in seconds. Value is undefined if has_duration()
  // returns false.
  double duration() const;

  // Returns -1 for containers without video.
  int width() const;
  int height() const;

  // Returns -1 if undefined.
  int rotation() const;

  // Returns -1 or an empty string if the value is undefined.
  const std::string& album() const;
  const std::string& artist() const;
  const std::string& comment() const;
  const std::string& copyright() const;
  const std::string& date() const;
  int disc() const;
  const std::string& encoder() const;
  const std::string& encoded_by() const;
  const std::string& genre() const;
  const std::string& language() const;
  const std::string& title() const;
  int track() const;

  // First element is the container. Subsequent elements are the child streams.
  const StreamInfoVector& stream_infos() const;

  // Empty if Extract call did not request attached images, or if no attached
  // images were found.
  const std::vector<std::string>& attached_images_bytes() const;

 private:
  void ExtractDictionary(AVDictionary* metadata, TagDictionary* raw_tags);

  bool extracted_;

  bool has_duration_;
  double duration_;  // Valid only if |has_duration_| is true.
  int width_;
  int height_;

  std::string album_;
  std::string artist_;
  std::string comment_;
  std::string copyright_;
  std::string date_;
  int disc_;
  std::string encoder_;
  std::string encoded_by_;
  std::string genre_;
  std::string language_;
  int rotation_;
  std::string title_;
  int track_;

  StreamInfoVector stream_infos_;

  std::vector<std::string> attached_images_bytes_;

  DISALLOW_COPY_AND_ASSIGN(AudioVideoMetadataExtractor);
};

}  // namespace media

#endif  // MEDIA_BASE_AUDIO_VIDEO_METADATA_EXTRACTOR_H_
