Skip to content

Commit

Permalink
Media: AudioVideoMetadataParser - Parse rotation metadata.
Browse files Browse the repository at this point in the history
BUG=332228

Review URL: https://codereview.chromium.org/148113012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251867 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
tommycli@chromium.org committed Feb 18, 2014
1 parent 4ad0b2b commit cad7201
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 0 deletions.
3 changes: 3 additions & 0 deletions chrome/common/extensions/api/media_galleries.idl
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ namespace mediaGalleries {

// Defined for audio and video. In seconds.
double? duration;

// Defined for images and video. In degrees.
long? rotation;

// Generic metadata tags.
DOMString? album;
Expand Down
1 change: 1 addition & 0 deletions chrome/utility/media_galleries/media_metadata_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ void MediaMetadataParser::PopulateAudioVideoMetadata() {
SetIntScopedPtr(extractor.disc(), &metadata_->disc);
SetStringScopedPtr(extractor.genre(), &metadata_->genre);
SetStringScopedPtr(extractor.language(), &metadata_->language);
SetIntScopedPtr(extractor.rotation(), &metadata_->rotation);
SetStringScopedPtr(extractor.title(), &metadata_->title);
SetIntScopedPtr(extractor.track(), &metadata_->track);
}
Expand Down
7 changes: 7 additions & 0 deletions media/base/audio_video_metadata_extractor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ AudioVideoMetadataExtractor::AudioVideoMetadataExtractor()
width_(-1),
height_(-1),
disc_(-1),
rotation_(-1),
track_(-1) {
}

Expand Down Expand Up @@ -129,6 +130,11 @@ int AudioVideoMetadataExtractor::height() const {
return height_;
}

int AudioVideoMetadataExtractor::rotation() const {
DCHECK(extracted_);
return rotation_;
}

const std::string& AudioVideoMetadataExtractor::album() const {
DCHECK(extracted_);
return album_;
Expand Down Expand Up @@ -195,6 +201,7 @@ void AudioVideoMetadataExtractor::ExtractDictionary(AVDictionary* metadata) {

AVDictionaryEntry* tag = NULL;
while ((tag = av_dict_get(metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) {
if (ExtractInt(tag, "rotate", &rotation_)) continue;
if (ExtractString(tag, "album", &album_)) continue;
if (ExtractString(tag, "artist", &artist_)) continue;
if (ExtractString(tag, "comment", &comment_)) continue;
Expand Down
4 changes: 4 additions & 0 deletions media/base/audio_video_metadata_extractor.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ class MEDIA_EXPORT AudioVideoMetadataExtractor {
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;
Expand Down Expand Up @@ -67,6 +70,7 @@ class MEDIA_EXPORT AudioVideoMetadataExtractor {
std::string encoded_by_;
std::string genre_;
std::string language_;
int rotation_;
std::string title_;
int track_;

Expand Down
7 changes: 7 additions & 0 deletions media/base/audio_video_metadata_extractor_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ TEST(AudioVideoMetadataExtractorTest, VideoWebM) {
}

#if defined(USE_PROPRIETARY_CODECS)
TEST(AudioVideoMetadataExtractorTest, AndroidRotatedMP4Video) {
scoped_ptr<AudioVideoMetadataExtractor> extractor =
GetExtractor("90rotation.mp4", true, 0, 1920, 1080);

EXPECT_EQ(90, extractor->rotation());
}

TEST(AudioVideoMetadataExtractorTest, AudioMP3) {
scoped_ptr<AudioVideoMetadataExtractor> extractor =
GetExtractor("id3_png_test.mp3", true, 1, -1, -1);
Expand Down
Binary file added media/test/data/90rotation.mp4
Binary file not shown.

0 comments on commit cad7201

Please sign in to comment.