Bug 1195723: [flac] P14. Add support for metadata. r?kamidphish
MozReview-Commit-ID: GDlmGcWRNsM
--- 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;
}