Bug 1322070: P2. Add virtual methods to retrieve TrackInfo. r?gerald
MozReview-Commit-ID: AepxIr1qkei
--- 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;