bug 1081766 clear audio/video track/reader only once r=kinetik
Clearing tracks after Shutdown of TrackBuffers means they are cleared
after any more can be added.
--- a/content/media/mediasource/MediaSourceReader.cpp
+++ b/content/media/mediasource/MediaSourceReader.cpp
@@ -197,34 +197,37 @@ MediaSourceReader::OnDecodeError()
MSE_DEBUG("MediaSourceReader(%p)::OnDecodeError", this);
GetCallback()->OnDecodeError();
}
void
MediaSourceReader::Shutdown()
{
MediaDecoderReader::Shutdown();
+ for (uint32_t i = 0; i < mTrackBuffers.Length(); ++i) {
+ mTrackBuffers[i]->Shutdown();
+ }
mAudioTrack = nullptr;
mAudioReader = nullptr;
mVideoTrack = nullptr;
mVideoReader = nullptr;
- for (uint32_t i = 0; i < mTrackBuffers.Length(); ++i) {
- mTrackBuffers[i]->Shutdown();
- }
mTrackBuffers.Clear();
}
void
MediaSourceReader::BreakCycles()
{
MediaDecoderReader::BreakCycles();
- mAudioTrack = nullptr;
- mAudioReader = nullptr;
- mVideoTrack = nullptr;
- mVideoReader = nullptr;
+
+ // These were cleared in Shutdown().
+ MOZ_ASSERT(!mAudioTrack);
+ MOZ_ASSERT(!mAudioReader);
+ MOZ_ASSERT(!mVideoTrack);
+ MOZ_ASSERT(!mVideoReader);
+
for (uint32_t i = 0; i < mTrackBuffers.Length(); ++i) {
mTrackBuffers[i]->BreakCycles();
}
mTrackBuffers.Clear();
}
already_AddRefed<MediaDecoderReader>
MediaSourceReader::SelectReader(int64_t aTarget,