Bug 1163467. Part 1 - refactor DecodedStream::RecreateData(). r=roc.

This commit is contained in:
JW Wang 2015-05-28 14:16:01 +08:00
parent 6ddb65f184
commit 22cc98ef7b
3 changed files with 12 additions and 11 deletions

View File

@ -221,13 +221,19 @@ DecodedStream::DestroyData()
}
void
DecodedStream::RecreateData(int64_t aInitialTime, SourceMediaStream* aStream)
DecodedStream::RecreateData(int64_t aInitialTime, MediaStreamGraph* aGraph)
{
MOZ_ASSERT(NS_IsMainThread());
GetReentrantMonitor().AssertCurrentThreadIn();
MOZ_ASSERT(!mData);
MOZ_ASSERT((aGraph && !mData && OutputStreams().IsEmpty()) || // first time
(!aGraph && mData)); // 2nd time and later
mData.reset(new DecodedStreamData(aInitialTime, aStream));
if (!aGraph) {
aGraph = mData->mStream->Graph();
}
auto source = aGraph->CreateSourceStream(nullptr);
DestroyData();
mData.reset(new DecodedStreamData(aInitialTime, source));
// Note that the delay between removing ports in DestroyDecodedStream
// and adding new ones won't cause a glitch since all graph operations

View File

@ -21,6 +21,7 @@ class DecodedStream;
class DecodedStreamGraphListener;
class OutputStreamListener;
class ReentrantMonitor;
class MediaStreamGraph;
namespace layers {
class Image;
@ -94,7 +95,7 @@ public:
explicit DecodedStream(ReentrantMonitor& aMonitor);
DecodedStreamData* GetData();
void DestroyData();
void RecreateData(int64_t aInitialTime, SourceMediaStream* aStream);
void RecreateData(int64_t aInitialTime, MediaStreamGraph* aGraph);
nsTArray<OutputStreamData>& OutputStreams();
ReentrantMonitor& GetReentrantMonitor();
void Connect(ProcessedMediaStream* aStream, bool aFinishWhenEnded);

View File

@ -332,13 +332,7 @@ void MediaDecoder::RecreateDecodedStream(int64_t aStartTimeUSecs,
ReentrantMonitorAutoEnter mon(GetReentrantMonitor());
DECODER_LOG("RecreateDecodedStream aStartTimeUSecs=%lld!", aStartTimeUSecs);
if (!aGraph) {
aGraph = GetDecodedStream()->mStream->Graph();
}
mDecodedStream.DestroyData();
mDecodedStream.RecreateData(aStartTimeUSecs, aGraph->CreateSourceStream(nullptr));
mDecodedStream.RecreateData(aStartTimeUSecs, aGraph);
UpdateStreamBlockingForStateMachinePlaying();
GetDecodedStream()->mHaveBlockedForPlayState = mPlayState != PLAY_STATE_PLAYING;