// Copyright 2013 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 CHROME_UTILITY_MEDIA_GALLERIES_MEDIA_METADATA_PARSER_H_ #define CHROME_UTILITY_MEDIA_GALLERIES_MEDIA_METADATA_PARSER_H_ #include #include #include "base/callback.h" #include "base/memory/scoped_ptr.h" #include "chrome/common/extensions/api/media_galleries.h" #include "chrome/common/media_galleries/metadata_types.h" namespace base { class Thread; } namespace media { class DataSource; } namespace metadata { // This class takes a MIME type and data source and parses its metadata. It // handles audio, video, and images. It delegates its operations to FFMPEG, // libexif, etc. This class lives and operates on the utility thread of the // utility process, as we wish to sandbox potentially dangerous operations // on user-provided data. class MediaMetadataParser { public: typedef extensions::api::media_galleries::MediaMetadata MediaMetadata; typedef base::Callback< void(const MediaMetadata& metadata, const std::vector& attached_images)> MetadataCallback; // Does not take ownership of |source|. Caller is responsible for ensuring // that |source| outlives this object. MediaMetadataParser(media::DataSource* source, const std::string& mime_type, bool get_attached_images); ~MediaMetadataParser(); // |callback| is called on same message loop. void Start(const MetadataCallback& callback); private: // Only accessed on |media_thread_| from this class. media::DataSource* const source_; const std::string mime_type_; bool get_attached_images_; // Thread that blocking media parsing operations run on while the main thread // handles messages from the browser process. // TODO(tommycli): Replace with a reference to a WorkerPool if we ever use // this class in batch mode. scoped_ptr media_thread_; DISALLOW_COPY_AND_ASSIGN(MediaMetadataParser); }; } // namespace metadata #endif // CHROME_UTILITY_MEDIA_GALLERIES_MEDIA_METADATA_PARSER_H_