Index: media/base/audio_video_metadata_extractor.cc |
diff --git a/media/base/audio_video_metadata_extractor.cc b/media/base/audio_video_metadata_extractor.cc |
index a18cc7d3d97c2286f85b1d2cabaf8ac75f995f45..daec0407e2ddb02826a7ffc9ce0cfa38a77308d5 100644 |
--- a/media/base/audio_video_metadata_extractor.cc |
+++ b/media/base/audio_video_metadata_extractor.cc |
@@ -47,6 +47,9 @@ bool ExtractInt(AVDictionaryEntry* tag, const char* expected_key, |
return true; |
} |
+// Set attached picture size limit to 4MB. Chosen arbitrarily. |
+const int kAttachedPicSizeLimit = 4 * 1024 * 1024; |
+ |
} // namespace |
AudioVideoMetadataExtractor::StreamInfo::StreamInfo() {} |
@@ -66,7 +69,8 @@ AudioVideoMetadataExtractor::AudioVideoMetadataExtractor() |
AudioVideoMetadataExtractor::~AudioVideoMetadataExtractor() { |
} |
-bool AudioVideoMetadataExtractor::Extract(DataSource* source) { |
+bool AudioVideoMetadataExtractor::Extract(DataSource* source, |
+ bool extract_attached_pictures) { |
DCHECK(!extracted_); |
bool read_ok = true; |
@@ -117,6 +121,18 @@ bool AudioVideoMetadataExtractor::Extract(DataSource* source) { |
width_ = stream->codec->width; |
height_ = stream->codec->height; |
} |
+ |
+ // Extract attached picture if requested. |
+ if (extract_attached_pictures && |
+ stream->disposition == AV_DISPOSITION_ATTACHED_PIC && |
+ stream->attached_pic.size > 0 && |
+ stream->attached_pic.size <= kAttachedPicSizeLimit && |
+ stream->attached_pic.data != NULL) { |
+ std::string buffer( |
vandebo (ex-Chrome)
2014/04/23 23:22:45
Looks like an extra copy... maybe pushback an empt
tommycli
2014/04/29 00:15:51
Done.
|
+ reinterpret_cast<const char*>(stream->attached_pic.data), |
+ stream->attached_pic.size); |
+ attached_pictures_bytes_.push_back(buffer); |
+ } |
} |
extracted_ = true; |
@@ -209,6 +225,12 @@ AudioVideoMetadataExtractor::stream_infos() const { |
return stream_infos_; |
} |
+const std::vector<std::string>& |
+AudioVideoMetadataExtractor::attached_pictures_bytes() const { |
+ DCHECK(extracted_); |
+ return attached_pictures_bytes_; |
+} |
+ |
void AudioVideoMetadataExtractor::ExtractDictionary( |
AVDictionary* metadata, TagDictionary* raw_tags) { |
if (!metadata) |