Bug 1168674: [ogg] P4. Skip over header packets when seeking close to the start. r?brion
MozReview-Commit-ID: F0Ezo0yfOyo
--- a/dom/media/ogg/OggDemuxer.cpp
+++ b/dom/media/ogg/OggDemuxer.cpp
@@ -857,21 +857,33 @@ OggDemuxer::GetCrypto()
{
return nullptr;
}
RefPtr<MediaRawData>
OggDemuxer::GetNextPacket(TrackInfo::TrackType aType)
{
OggCodecState* state = GetTrackCodecState(aType);
- DemuxUntilPacketAvailable(state);
+ ogg_packet* packet = nullptr;
+
+ do {
+ if (packet) {
+ OggCodecState::ReleasePacket(state->PacketOut());
+ }
+ DemuxUntilPacketAvailable(state);
+
+ packet = state->PacketPeek();
+ } while (packet && state->IsHeader(packet));
+
+ if (!packet) {
+ return nullptr;
+ }
// Check the eos state in case we need to look for chained streams.
- ogg_packet* packet = state->PacketPeek();
- bool eos = packet && packet->e_o_s;
+ bool eos = packet->e_o_s;
RefPtr<MediaRawData> data = state->PacketOutAsMediaRawData();;
if (eos) {
// We've encountered an end of bitstream packet; check for a chained
// bitstream following this one.
ReadOggChain();
}