Bug 1195723: [flac] P14. Add support for metadata. r?kamidphish draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Thu, 18 Aug 2016 16:06:38 +1000
changeset 404123 ea2688fd0b28f5a54d59b7a782abaac72a100ae9
parent 404122 4d082163dcf6b96dd12ea70a250a88d612726fac
child 404124 1dc4143308b1bb5ba3ba40727b620021117f200d
push id27118
push userbmo:jyavenard@mozilla.com
push dateMon, 22 Aug 2016 22:58:57 +0000
reviewerskamidphish
bugs1195723
milestone51.0a1
Bug 1195723: [flac] P14. Add support for metadata. r?kamidphish MozReview-Commit-ID: GDlmGcWRNsM
dom/media/flac/FlacDemuxer.cpp
--- a/dom/media/flac/FlacDemuxer.cpp
+++ b/dom/media/flac/FlacDemuxer.cpp
@@ -443,16 +443,19 @@ public:
   {
     return mParser.DecodeHeaderBlock(aPacket, aLength);
   }
 
   bool HasFullMetadata() const { return mParser.HasFullMetadata(); }
 
   AudioInfo Info() const { return mParser.mInfo; }
 
+  // Return a hash table with tag metadata.
+  MetadataTags* GetTags() const { return mParser.GetTags(); }
+
 private:
   bool GetNextFrame(MediaResourceIndex& aResource)
   {
     while (mNextFrame.FindNext(aResource)) {
       // Move our offset slightly, so that we don't find the same frame at the
       // next FindNext call.
       aResource.Seek(SEEK_CUR, mNextFrame.Header().Size());
       if (mFrame.IsValid()
@@ -688,17 +691,24 @@ FlacTrackDemuxer::Init()
   return true;
 }
 
 UniquePtr<TrackInfo>
 FlacTrackDemuxer::GetInfo() const
 {
   if (mParser->Info().IsValid()) {
     // We have a proper metadata header.
-    return mParser->Info().Clone();
+    UniquePtr<TrackInfo> info = mParser->Info().Clone();
+    nsAutoPtr<MetadataTags> tags(mParser->GetTags());
+    if (tags) {
+      for (auto iter = tags->Iter(); !iter.Done(); iter.Next()) {
+        info->mTags.AppendElement(MetadataTag(iter.Key(), iter.Data()));
+      }
+    }
+    return info;
   } else if (mParser->FirstFrame().Info().IsValid()) {
     // Use the first frame header.
     UniquePtr<TrackInfo> info = mParser->FirstFrame().Info().Clone();
     info->mDuration = Duration().ToMicroseconds();
     return info;
   }
   return nullptr;
 }