diff --git a/content/media/webm/WebMReader.cpp b/content/media/webm/WebMReader.cpp index 2429d0b8f5f..8b2eb1749df 100644 --- a/content/media/webm/WebMReader.cpp +++ b/content/media/webm/WebMReader.cpp @@ -372,7 +372,7 @@ nsresult WebMReader::ReadMetadata(MediaInfo* aInfo, mHasAudio = true; mInfo.mAudio.mHasAudio = true; mAudioCodec = nestegg_track_codec_id(mContext, track); - mCodecDelay = params.codec_delay; + mCodecDelay = params.codec_delay / NS_PER_USEC; if (mAudioCodec == NESTEGG_CODEC_VORBIS) { // Get the Vorbis header data @@ -439,6 +439,12 @@ nsresult WebMReader::ReadMetadata(MediaInfo* aInfo, return NS_ERROR_FAILURE; } + if (mCodecDelay != FramesToUsecs(mOpusParser->mPreSkip, mOpusParser->mRate).value()) { + LOG(PR_LOG_DEBUG, ("Values for CodecDelay and PreSkip do not match\n")) + Cleanup(); + return NS_ERROR_FAILURE; + } + mInfo.mAudio.mRate = mOpusParser->mRate; mInfo.mAudio.mChannels = mOpusParser->mChannels; @@ -718,7 +724,7 @@ bool WebMReader::DecodeAudioPacket(nestegg_packet* aPacket, int64_t aOffset) NS_WARNING("Int overflow converting WebM audio duration"); return false; } - CheckedInt64 time = startTime - (mCodecDelay / NS_PER_USEC); + CheckedInt64 time = startTime - mCodecDelay; if (!time.isValid()) { NS_WARNING("Int overflow shifting tstamp by codec delay"); nestegg_free_packet(aPacket); diff --git a/content/media/webm/WebMReader.h b/content/media/webm/WebMReader.h index 79554787a9f..278d3e572e9 100644 --- a/content/media/webm/WebMReader.h +++ b/content/media/webm/WebMReader.h @@ -215,7 +215,7 @@ private: // Number of audio frames we've decoded since decoding began at mAudioStartMs. uint64_t mAudioFrames; - // Number of nanoseconds that must be discarded from the start of the Stream. + // Number of microseconds that must be discarded from the start of the Stream. uint64_t mCodecDelay; // Parser state and computed offset-time mappings. Shared by multiple