Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(818)

Unified Diff: chrome/utility/media_galleries/media_metadata_parser.cc

Issue 191583002: Media Galleries API Metadata: Image metadata (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/utility/media_galleries/media_metadata_parser.cc
diff --git a/chrome/utility/media_galleries/media_metadata_parser.cc b/chrome/utility/media_galleries/media_metadata_parser.cc
index abdb2e666633ac053f2e68bec018e709e68d8a3a..22f4779958a3ef9e2afb4e423236dcde26275a5a 100644
--- a/chrome/utility/media_galleries/media_metadata_parser.cc
+++ b/chrome/utility/media_galleries/media_metadata_parser.cc
@@ -11,6 +11,7 @@
#include "base/strings/string_util.h"
#include "base/task_runner_util.h"
#include "base/threading/thread.h"
+#include "chrome/utility/media_galleries/image_metadata_extractor.h"
#include "media/base/audio_video_metadata_extractor.h"
#include "media/base/data_source.h"
@@ -20,15 +21,28 @@ namespace {
void SetStringScopedPtr(const std::string& value,
scoped_ptr<std::string>* destination) {
+ DCHECK(destination);
if (!value.empty())
destination->reset(new std::string(value));
}
void SetIntScopedPtr(int value, scoped_ptr<int>* destination) {
+ DCHECK(destination);
if (value >= 0)
destination->reset(new int(value));
}
+void SetDoubleScopedPtr(double value, scoped_ptr<double>* destination) {
+ DCHECK(destination);
+ if (value >= 0)
+ destination->reset(new double(value));
+}
+
+void SetBoolScopedPtr(bool value, scoped_ptr<bool>* destination) {
+ DCHECK(destination);
+ destination->reset(new bool(value));
+}
+
// This runs on |media_thread_|, as the underlying FFmpeg operation is
// blocking, and the utility thread must not be blocked, so the media file
// bytes can be sent from the browser process to the utility process.
@@ -36,6 +50,7 @@ scoped_ptr<MediaMetadataParser::MediaMetadata> ParseAudioVideoMetadata(
media::DataSource* source,
scoped_ptr<MediaMetadataParser::MediaMetadata> metadata) {
DCHECK(source);
+ DCHECK(metadata.get());
media::AudioVideoMetadataExtractor extractor;
if (!extractor.Extract(source))
@@ -64,6 +79,39 @@ scoped_ptr<MediaMetadataParser::MediaMetadata> ParseAudioVideoMetadata(
return metadata.Pass();
}
+void FinishParseImageMetadata(
+ ImageMetadataExtractor* extractor,
+ scoped_ptr<MediaMetadataParser::MediaMetadata> metadata,
+ MediaMetadataParser::MetadataCallback callback,
+ bool extract_success) {
+ DCHECK(extractor);
+ DCHECK(metadata.get());
+
+ if (!extract_success) {
+ callback.Run(metadata.Pass());
+ return;
+ }
+
+ SetIntScopedPtr(extractor->height(), &metadata->height);
+ SetIntScopedPtr(extractor->width(), &metadata->width);
+
+ SetIntScopedPtr(extractor->rotation(), &metadata->rotation);
+
+ SetDoubleScopedPtr(extractor->x_resolution(), &metadata->x_resolution);
+ SetDoubleScopedPtr(extractor->y_resolution(), &metadata->y_resolution);
+ SetBoolScopedPtr(extractor->flash_fired(), &metadata->flash_fired);
+ SetStringScopedPtr(extractor->camera_make(), &metadata->camera_make);
+ SetStringScopedPtr(extractor->camera_model(), &metadata->camera_model);
+ SetDoubleScopedPtr(extractor->exposure_time_sec(),
+ &metadata->exposure_time_seconds);
+
+ SetDoubleScopedPtr(extractor->f_number(), &metadata->f_number);
+ SetDoubleScopedPtr(extractor->focal_length_mm(), &metadata->focal_length_mm);
+ SetDoubleScopedPtr(extractor->iso_equivalent(), &metadata->iso_equivalent);
+
+ callback.Run(metadata.Pass());
+}
+
} // namespace
MediaMetadataParser::MediaMetadataParser(media::DataSource* source,
@@ -90,6 +138,15 @@ void MediaMetadataParser::Start(const MetadataCallback& callback) {
return;
}
+ if (StartsWithASCII(mime_type_, "image/", true)) {
+ ImageMetadataExtractor* extractor = new ImageMetadataExtractor;
+ extractor->Extract(
+ source_,
+ base::Bind(&FinishParseImageMetadata, base::Owned(extractor),
+ base::Passed(&metadata), callback));
+ return;
+ }
+
// TODO(tommycli): Implement for image mime types.
callback.Run(metadata.Pass());
}
« no previous file with comments | « chrome/utility/media_galleries/image_metadata_extractor_unittest.cc ('k') | third_party/libexif/libexif.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698