1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file. 4a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#ifndef CHROME_UTILITY_MEDIA_GALLERIES_IMAGE_METADATA_EXTRACTOR_H_ 6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define CHROME_UTILITY_MEDIA_GALLERIES_IMAGE_METADATA_EXTRACTOR_H_ 7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <string> 9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/basictypes.h" 11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/callback_forward.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 14a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace media { 15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass DataSource; 16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace net { 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass DrainableIOBuffer; 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace metadata { 23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Extracts a basic set of image metadata tags. Users must initialize the 25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// library before use. Each class instance is 'one-time-use', and cannot be used 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// to extract metadata from multiple images. 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass ImageMetadataExtractor { 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public: 29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch typedef base::Callback<void(bool)> DoneCallback; 30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // One of these two is required before use of this class. 32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static bool InitializeLibrary(); 33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static bool InitializeLibraryForTesting(); 34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ImageMetadataExtractor(); 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ~ImageMetadataExtractor(); 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // |callback| called with whether or not the extraction succeeded. Should 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // only be called once. 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void Extract(media::DataSource* source, const DoneCallback& callback); 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // All below methods require Extract to have already succeeded. 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Returns -1 if file does not define a width or height. 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int width() const; 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int height() const; 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // In degrees. 48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int rotation() const; 49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // In pixels per inch. 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double x_resolution() const; 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double y_resolution() const; 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // In the same string form as the original file. 55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& date() const; 56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& camera_make() const; 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& camera_model() const; 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double exposure_time_sec() const; 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool flash_fired() const; 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double f_number() const; 62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double focal_length_mm() const; 63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int iso_equivalent() const; 64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch private: 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Second half of the Extract method. 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void FinishExtraction(const DoneCallback& callback, 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<net::DrainableIOBuffer>& buffer); 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool extracted_; 71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int width_; 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int height_; 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int rotation_; 76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double x_resolution_; 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double y_resolution_; 79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string date_; 81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string camera_make_; 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string camera_model_; 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double exposure_time_sec_; 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool flash_fired_; 86a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double f_number_; 87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch double focal_length_mm_; 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int iso_equivalent_; 89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DISALLOW_COPY_AND_ASSIGN(ImageMetadataExtractor); 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 93a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace metadata 94a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 95a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // CHROME_UTILITY_MEDIA_GALLERIES_IMAGE_METADATA_EXTRACTOR_H_ 96