diff options
Diffstat (limited to 'chromium/media/base/audio_video_metadata_extractor.h')
-rw-r--r-- | chromium/media/base/audio_video_metadata_extractor.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/chromium/media/base/audio_video_metadata_extractor.h b/chromium/media/base/audio_video_metadata_extractor.h new file mode 100644 index 00000000000..953ece0b972 --- /dev/null +++ b/chromium/media/base/audio_video_metadata_extractor.h @@ -0,0 +1,106 @@ +// 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/basictypes.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(); + 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 -1 if we cannot extract the duration. In seconds. + 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_; + + int duration_; + 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_ |