Chromium Code Reviews| 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) |