OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/gpu/gpu_video_decode_accelerator_host.h" | 5 #include "content/renderer/gpu/gpu_video_decode_accelerator_host.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/task.h" | 10 #include "base/task.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 } | 103 } |
104 | 104 |
105 void GpuVideoDecodeAcceleratorHost::Reset() { | 105 void GpuVideoDecodeAcceleratorHost::Reset() { |
106 DCHECK(CalledOnValidThread()); | 106 DCHECK(CalledOnValidThread()); |
107 Send(new AcceleratedVideoDecoderMsg_Reset(command_buffer_route_id_)); | 107 Send(new AcceleratedVideoDecoderMsg_Reset(command_buffer_route_id_)); |
108 } | 108 } |
109 | 109 |
110 void GpuVideoDecodeAcceleratorHost::Destroy() { | 110 void GpuVideoDecodeAcceleratorHost::Destroy() { |
111 DCHECK(CalledOnValidThread()); | 111 DCHECK(CalledOnValidThread()); |
112 Send(new AcceleratedVideoDecoderMsg_Destroy(command_buffer_route_id_)); | 112 Send(new AcceleratedVideoDecoderMsg_Destroy(command_buffer_route_id_)); |
| 113 client_ = NULL; |
113 } | 114 } |
114 | 115 |
115 void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) { | 116 void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) { |
116 // After OnChannelError is called, the client should no longer send | 117 // After OnChannelError is called, the client should no longer send |
117 // messages to the gpu channel through this object. | 118 // messages to the gpu channel through this object. |
118 DCHECK(ipc_sender_); | 119 DCHECK(ipc_sender_); |
119 if (!ipc_sender_ || !ipc_sender_->Send(message)) { | 120 if (!ipc_sender_ || !ipc_sender_->Send(message)) { |
120 DLOG(ERROR) << "Send(" << message->type() << ") failed"; | 121 DLOG(ERROR) << "Send(" << message->type() << ") failed"; |
121 OnErrorNotification(PLATFORM_FAILURE); | 122 OnErrorNotification(PLATFORM_FAILURE); |
122 } | 123 } |
123 } | 124 } |
124 | 125 |
125 void GpuVideoDecodeAcceleratorHost::OnBitstreamBufferProcessed( | 126 void GpuVideoDecodeAcceleratorHost::OnBitstreamBufferProcessed( |
126 int32 bitstream_buffer_id) { | 127 int32 bitstream_buffer_id) { |
127 DCHECK(CalledOnValidThread()); | 128 DCHECK(CalledOnValidThread()); |
128 client_->NotifyEndOfBitstreamBuffer(bitstream_buffer_id); | 129 if (client_) |
| 130 client_->NotifyEndOfBitstreamBuffer(bitstream_buffer_id); |
129 } | 131 } |
130 | 132 |
131 void GpuVideoDecodeAcceleratorHost::OnProvidePictureBuffer( | 133 void GpuVideoDecodeAcceleratorHost::OnProvidePictureBuffer( |
132 uint32 num_requested_buffers, | 134 uint32 num_requested_buffers, |
133 const gfx::Size& buffer_size) { | 135 const gfx::Size& buffer_size) { |
134 DCHECK(CalledOnValidThread()); | 136 DCHECK(CalledOnValidThread()); |
135 client_->ProvidePictureBuffers(num_requested_buffers, buffer_size); | 137 if (client_) |
| 138 client_->ProvidePictureBuffers(num_requested_buffers, buffer_size); |
136 } | 139 } |
137 | 140 |
138 void GpuVideoDecodeAcceleratorHost::OnDismissPictureBuffer( | 141 void GpuVideoDecodeAcceleratorHost::OnDismissPictureBuffer( |
139 int32 picture_buffer_id) { | 142 int32 picture_buffer_id) { |
140 DCHECK(CalledOnValidThread()); | 143 DCHECK(CalledOnValidThread()); |
141 client_->DismissPictureBuffer(picture_buffer_id); | 144 if (client_) |
| 145 client_->DismissPictureBuffer(picture_buffer_id); |
142 } | 146 } |
143 | 147 |
144 void GpuVideoDecodeAcceleratorHost::OnPictureReady( | 148 void GpuVideoDecodeAcceleratorHost::OnPictureReady( |
145 int32 picture_buffer_id, int32 bitstream_buffer_id) { | 149 int32 picture_buffer_id, int32 bitstream_buffer_id) { |
146 DCHECK(CalledOnValidThread()); | 150 DCHECK(CalledOnValidThread()); |
| 151 if (!client_) |
| 152 return; |
147 media::Picture picture(picture_buffer_id, bitstream_buffer_id); | 153 media::Picture picture(picture_buffer_id, bitstream_buffer_id); |
148 client_->PictureReady(picture); | 154 client_->PictureReady(picture); |
149 } | 155 } |
150 | 156 |
151 void GpuVideoDecodeAcceleratorHost::OnFlushDone() { | 157 void GpuVideoDecodeAcceleratorHost::OnFlushDone() { |
152 DCHECK(CalledOnValidThread()); | 158 DCHECK(CalledOnValidThread()); |
153 client_->NotifyFlushDone(); | 159 if (client_) |
| 160 client_->NotifyFlushDone(); |
154 } | 161 } |
155 | 162 |
156 void GpuVideoDecodeAcceleratorHost::OnResetDone() { | 163 void GpuVideoDecodeAcceleratorHost::OnResetDone() { |
157 DCHECK(CalledOnValidThread()); | 164 DCHECK(CalledOnValidThread()); |
158 client_->NotifyResetDone(); | 165 if (client_) |
| 166 client_->NotifyResetDone(); |
159 } | 167 } |
160 | 168 |
161 void GpuVideoDecodeAcceleratorHost::OnEndOfStream() { | 169 void GpuVideoDecodeAcceleratorHost::OnEndOfStream() { |
162 DCHECK(CalledOnValidThread()); | 170 DCHECK(CalledOnValidThread()); |
163 client_->NotifyEndOfStream(); | 171 if (client_) |
| 172 client_->NotifyEndOfStream(); |
164 } | 173 } |
165 | 174 |
166 void GpuVideoDecodeAcceleratorHost::OnErrorNotification(uint32 error) { | 175 void GpuVideoDecodeAcceleratorHost::OnErrorNotification(uint32 error) { |
167 DCHECK(CalledOnValidThread()); | 176 DCHECK(CalledOnValidThread()); |
| 177 if (!client_) |
| 178 return; |
168 client_->NotifyError( | 179 client_->NotifyError( |
169 static_cast<media::VideoDecodeAccelerator::Error>(error)); | 180 static_cast<media::VideoDecodeAccelerator::Error>(error)); |
170 } | 181 } |
OLD | NEW |