Commit c903db11 authored by piman@chromium.org's avatar piman@chromium.org

Handle client going away after GVDAH::Destroy

Prevents crashes when destroying a decoder while messages are pending.

BUG=None
TEST=Pepper Flash


Review URL: http://codereview.chromium.org/7629022

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96679 0039d316-1c4b-4281-b951-d872f2087c98
parent be0a84b5
...@@ -110,6 +110,7 @@ void GpuVideoDecodeAcceleratorHost::Reset() { ...@@ -110,6 +110,7 @@ void GpuVideoDecodeAcceleratorHost::Reset() {
void GpuVideoDecodeAcceleratorHost::Destroy() { void GpuVideoDecodeAcceleratorHost::Destroy() {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
Send(new AcceleratedVideoDecoderMsg_Destroy(command_buffer_route_id_)); Send(new AcceleratedVideoDecoderMsg_Destroy(command_buffer_route_id_));
client_ = NULL;
} }
void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) { void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) {
...@@ -125,46 +126,56 @@ void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) { ...@@ -125,46 +126,56 @@ void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) {
void GpuVideoDecodeAcceleratorHost::OnBitstreamBufferProcessed( void GpuVideoDecodeAcceleratorHost::OnBitstreamBufferProcessed(
int32 bitstream_buffer_id) { int32 bitstream_buffer_id) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
client_->NotifyEndOfBitstreamBuffer(bitstream_buffer_id); if (client_)
client_->NotifyEndOfBitstreamBuffer(bitstream_buffer_id);
} }
void GpuVideoDecodeAcceleratorHost::OnProvidePictureBuffer( void GpuVideoDecodeAcceleratorHost::OnProvidePictureBuffer(
uint32 num_requested_buffers, uint32 num_requested_buffers,
const gfx::Size& buffer_size) { const gfx::Size& buffer_size) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
client_->ProvidePictureBuffers(num_requested_buffers, buffer_size); if (client_)
client_->ProvidePictureBuffers(num_requested_buffers, buffer_size);
} }
void GpuVideoDecodeAcceleratorHost::OnDismissPictureBuffer( void GpuVideoDecodeAcceleratorHost::OnDismissPictureBuffer(
int32 picture_buffer_id) { int32 picture_buffer_id) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
client_->DismissPictureBuffer(picture_buffer_id); if (client_)
client_->DismissPictureBuffer(picture_buffer_id);
} }
void GpuVideoDecodeAcceleratorHost::OnPictureReady( void GpuVideoDecodeAcceleratorHost::OnPictureReady(
int32 picture_buffer_id, int32 bitstream_buffer_id) { int32 picture_buffer_id, int32 bitstream_buffer_id) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
if (!client_)
return;
media::Picture picture(picture_buffer_id, bitstream_buffer_id); media::Picture picture(picture_buffer_id, bitstream_buffer_id);
client_->PictureReady(picture); client_->PictureReady(picture);
} }
void GpuVideoDecodeAcceleratorHost::OnFlushDone() { void GpuVideoDecodeAcceleratorHost::OnFlushDone() {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
client_->NotifyFlushDone(); if (client_)
client_->NotifyFlushDone();
} }
void GpuVideoDecodeAcceleratorHost::OnResetDone() { void GpuVideoDecodeAcceleratorHost::OnResetDone() {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
client_->NotifyResetDone(); if (client_)
client_->NotifyResetDone();
} }
void GpuVideoDecodeAcceleratorHost::OnEndOfStream() { void GpuVideoDecodeAcceleratorHost::OnEndOfStream() {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
client_->NotifyEndOfStream(); if (client_)
client_->NotifyEndOfStream();
} }
void GpuVideoDecodeAcceleratorHost::OnErrorNotification(uint32 error) { void GpuVideoDecodeAcceleratorHost::OnErrorNotification(uint32 error) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
if (!client_)
return;
client_->NotifyError( client_->NotifyError(
static_cast<media::VideoDecodeAccelerator::Error>(error)); static_cast<media::VideoDecodeAccelerator::Error>(error));
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment