Bug 1068996 - Make WMFMediaDataDecoder::Shutdown() actually shutdown. r=kentuckyfriedtakahe

This commit is contained in:
Chris Pearce 2014-09-19 15:44:27 +12:00
Родитель 71030c9d35
Коммит 0b0b954051
6 изменённых файлов: 31 добавлений и 1 удалений

Просмотреть файл

@ -308,4 +308,10 @@ WMFAudioMFTManager::Output(int64_t aStreamOffset,
return S_OK;
}
void
WMFAudioMFTManager::Shutdown()
{
mDecoder = nullptr;
}
} // namespace mozilla

Просмотреть файл

@ -29,6 +29,9 @@ public:
// a null aOutput in this case.
virtual HRESULT Output(int64_t aStreamOffset,
nsAutoPtr<MediaData>& aOutput) MOZ_OVERRIDE;
virtual void Shutdown() MOZ_OVERRIDE;
private:
HRESULT UpdateOutputType();

Просмотреть файл

@ -48,10 +48,18 @@ WMFMediaDataDecoder::Init()
nsresult
WMFMediaDataDecoder::Shutdown()
{
mDecoder = nullptr;
mTaskQueue->FlushAndDispatch(NS_NewRunnableMethod(this, &WMFMediaDataDecoder::ProcessShutdown));
return NS_OK;
}
void
WMFMediaDataDecoder::ProcessShutdown()
{
mMFTManager->Shutdown();
mMFTManager = nullptr;
mDecoder = nullptr;
}
// Inserts data into the decoder's pipeline.
nsresult
WMFMediaDataDecoder::Input(mp4_demuxer::MP4Sample* aSample)

Просмотреть файл

@ -43,6 +43,9 @@ public:
// MP4Reader.
virtual HRESULT Output(int64_t aStreamOffset,
nsAutoPtr<MediaData>& aOutput) = 0;
// Destroys all resources.
virtual void Shutdown() = 0;
};
// Decodes audio and video using Windows Media Foundation. Samples are decoded
@ -81,6 +84,8 @@ private:
// all available output.
void ProcessDrain();
void ProcessShutdown();
RefPtr<MediaTaskQueue> mTaskQueue;
MediaDataDecoderCallback* mCallback;

Просмотреть файл

@ -399,4 +399,10 @@ WMFVideoMFTManager::Output(int64_t aStreamOffset,
return S_OK;
}
void
WMFVideoMFTManager::Shutdown()
{
mDecoder = nullptr;
}
} // namespace mozilla

Просмотреть файл

@ -33,6 +33,8 @@ public:
virtual HRESULT Output(int64_t aStreamOffset,
nsAutoPtr<MediaData>& aOutput) MOZ_OVERRIDE;
virtual void Shutdown() MOZ_OVERRIDE;
private:
bool InitializeDXVA();