Bug 1322070: P2. Add virtual methods to retrieve TrackInfo. r?gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Mon, 05 Dec 2016 18:06:11 +1100
changeset 448642 6c9e3e50988dcd7080cc7560913e0c463a051a31
parent 448641 27e7177381c5716583674b196ed3ac7e8c186fa0
child 448643 516fd71adf18a3ac9c6bca6a12fa84fff1379ae3
push id38389
push userbmo:jyavenard@mozilla.com
push dateMon, 12 Dec 2016 05:01:11 +0000
reviewersgerald
bugs1322070
milestone53.0a1
Bug 1322070: P2. Add virtual methods to retrieve TrackInfo. r?gerald MozReview-Commit-ID: AepxIr1qkei
dom/media/ogg/OggCodecState.cpp
dom/media/ogg/OggCodecState.h
dom/media/ogg/OggDemuxer.cpp
--- a/dom/media/ogg/OggCodecState.cpp
+++ b/dom/media/ogg/OggCodecState.cpp
@@ -1340,20 +1340,20 @@ FlacState::PageIn(ogg_page* aPage)
 
 // Return a hash table with tag metadata.
 MetadataTags*
 FlacState::GetTags()
 {
   return mParser.GetTags();
 }
 
-const AudioInfo&
-FlacState::Info()
+const TrackInfo*
+FlacState::GetInfo() const
 {
-  return mParser.mInfo;
+  return &mParser.mInfo;
 }
 
 bool
 FlacState::ReconstructFlacGranulepos(void)
 {
   NS_ASSERTION(mUnstamped.Length() > 0, "Must have unstamped packets");
   ogg_packet* last = mUnstamped.LastElement();
   NS_ASSERTION(last->e_o_s || last->granulepos > 0,
--- a/dom/media/ogg/OggCodecState.h
+++ b/dom/media/ogg/OggCodecState.h
@@ -219,16 +219,22 @@ public:
   OggPacketQueue mPackets;
 
   // Is the bitstream active; whether we're decoding and playing this bitstream.
   bool mActive;
 
   // True when all headers packets have been read.
   bool mDoneReadingHeaders;
 
+  virtual const TrackInfo* GetInfo() const
+  {
+    MOZ_RELEASE_ASSERT(false, "Can't be called directly");
+    return nullptr;
+  }
+
   // Validation utility for vorbis-style tag names.
   static bool IsValidVorbisTagName(nsCString& aName);
 
   // Utility method to parse and add a vorbis-style comment
   // to a metadata hash table. Most Ogg-encapsulated codecs
   // use the vorbis comment format for metadata.
   static bool AddVorbisComment(MetadataTags* aTags,
                         const char* aComment,
@@ -613,17 +619,17 @@ public:
   int64_t Time(int64_t granulepos) override;
   int64_t PacketDuration(ogg_packet* aPacket) override;
   bool IsHeader(ogg_packet* aPacket) override;
   nsresult PageIn(ogg_page* aPage) override;
 
   // Return a hash table with tag metadata.
   MetadataTags* GetTags() override;
 
-  const AudioInfo& Info();
+  const TrackInfo* GetInfo() const override;
 
 private:
   bool ReconstructFlacGranulepos(void);
 
   FlacFrameParser mParser;
 };
 
 } // namespace mozilla
--- a/dom/media/ogg/OggDemuxer.cpp
+++ b/dom/media/ogg/OggDemuxer.cpp
@@ -466,17 +466,17 @@ OggDemuxer::SetupTargetOpus(OpusState* a
 
 void
 OggDemuxer::SetupTargetFlac(FlacState* aFlacState, OggHeaders& aHeaders)
 {
   if (mFlacState) {
     mFlacState->Reset();
   }
 
-  mInfo.mAudio = aFlacState->Info();
+  mInfo.mAudio = *aFlacState->GetInfo()->GetAsAudioInfo();
   mFlacState = aFlacState;
   mFlacSerial = aFlacState->mSerial;
 }
 
 void
 OggDemuxer::SetupTargetSkeleton()
 {
   // Setup skeleton related information after mVorbisState & mTheroState
@@ -577,17 +577,17 @@ OggDemuxer::SetupMediaTracksInfo(const n
       if (!(mFlacState && mFlacState->mSerial == flacState->mSerial)) {
         continue;
       }
 
       if (msgInfo) {
         InitTrack(msgInfo, &mInfo.mAudio, mFlacState == flacState);
       }
 
-      mInfo.mAudio = flacState->Info();
+      mInfo.mAudio = *flacState->GetInfo()->GetAsAudioInfo();
       FillTags(&mInfo.mAudio, flacState->GetTags());
     }
   }
 }
 
 void
 OggDemuxer::FillTags(TrackInfo* aInfo, MetadataTags* aTags)
 {
@@ -858,27 +858,29 @@ OggDemuxer::ReadOggChain(const media::Ti
 
     chained = true;
     tags = newOpusState->GetTags();
   }
 
   OggHeaders flacHeaders;
   if ((newFlacState &&
        ReadHeaders(TrackInfo::kAudioTrack, newFlacState, flacHeaders)) &&
-      (mFlacState->Info().mRate == newFlacState->Info().mRate) &&
-      (mFlacState->Info().mChannels == newFlacState->Info().mChannels)) {
+      (mFlacState->GetInfo()->GetAsAudioInfo()->mRate ==
+       newFlacState->GetInfo()->GetAsAudioInfo()->mRate) &&
+      (mFlacState->GetInfo()->GetAsAudioInfo()->mChannels ==
+       newFlacState->GetInfo()->GetAsAudioInfo()->mChannels)) {
 
     SetupTargetFlac(newFlacState, flacHeaders);
     LOG(LogLevel::Debug, ("New flac ogg link, serial=%d\n", mFlacSerial));
 
     if (msgInfo) {
       InitTrack(msgInfo, &mInfo.mAudio, true);
     }
 
-    mInfo.mAudio = newFlacState->Info();
+    mInfo.mAudio = *newFlacState->GetInfo()->GetAsAudioInfo();
     chained = true;
     tags = newFlacState->GetTags();
   }
 
   if (chained) {
     SetChained();
     mInfo.mMediaSeekable = false;
     mDecodedAudioDuration += aLastEndTime;