OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/common/gpu/media/gpu_video_encode_accelerator.h" | 5 #include "content/common/gpu/media/gpu_video_encode_accelerator.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/shared_memory.h" | 10 #include "base/memory/shared_memory.h" |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
105 initial_bitrate, | 105 initial_bitrate, |
106 this); | 106 this); |
107 input_format_ = input_format; | 107 input_format_ = input_format; |
108 input_visible_size_ = input_visible_size; | 108 input_visible_size_ = input_visible_size; |
109 SendCreateEncoderReply(init_done_msg, true); | 109 SendCreateEncoderReply(init_done_msg, true); |
110 } | 110 } |
111 | 111 |
112 bool GpuVideoEncodeAccelerator::OnMessageReceived(const IPC::Message& message) { | 112 bool GpuVideoEncodeAccelerator::OnMessageReceived(const IPC::Message& message) { |
113 bool handled = true; | 113 bool handled = true; |
114 IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAccelerator, message) | 114 IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAccelerator, message) |
115 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Encode, OnEncode) | 115 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_EncodeSharedMemory, |
mcasas
2015/06/04 15:20:55
Indent here and in l.117 to match l.119 etc.
I kno
emircan
2015/06/04 22:04:40
Done.
| |
116 OnEncodeSharedMemory) | |
117 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_EncodeNativeTexture, | |
118 OnEncodeNativeTexture) | |
116 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer, | 119 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer, |
117 OnUseOutputBitstreamBuffer) | 120 OnUseOutputBitstreamBuffer) |
118 IPC_MESSAGE_HANDLER( | 121 IPC_MESSAGE_HANDLER( |
119 AcceleratedVideoEncoderMsg_RequestEncodingParametersChange, | 122 AcceleratedVideoEncoderMsg_RequestEncodingParametersChange, |
120 OnRequestEncodingParametersChange) | 123 OnRequestEncodingParametersChange) |
121 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Destroy, OnDestroy) | 124 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Destroy, OnDestroy) |
122 IPC_MESSAGE_UNHANDLED(handled = false) | 125 IPC_MESSAGE_UNHANDLED(handled = false) |
123 IPC_END_MESSAGE_MAP() | 126 IPC_END_MESSAGE_MAP() |
124 return handled; | 127 return handled; |
125 } | 128 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
200 // static | 203 // static |
201 scoped_ptr<media::VideoEncodeAccelerator> | 204 scoped_ptr<media::VideoEncodeAccelerator> |
202 GpuVideoEncodeAccelerator::CreateAndroidVEA() { | 205 GpuVideoEncodeAccelerator::CreateAndroidVEA() { |
203 scoped_ptr<media::VideoEncodeAccelerator> encoder; | 206 scoped_ptr<media::VideoEncodeAccelerator> encoder; |
204 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) | 207 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) |
205 encoder.reset(new AndroidVideoEncodeAccelerator()); | 208 encoder.reset(new AndroidVideoEncodeAccelerator()); |
206 #endif | 209 #endif |
207 return encoder.Pass(); | 210 return encoder.Pass(); |
208 } | 211 } |
209 | 212 |
210 void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id, | 213 void GpuVideoEncodeAccelerator::OnEncodeSharedMemory( |
211 base::SharedMemoryHandle buffer_handle, | 214 int32 frame_id, |
212 uint32 buffer_offset, | 215 base::SharedMemoryHandle buffer_handle, |
213 uint32 buffer_size, | 216 uint32 buffer_offset, |
214 bool force_keyframe) { | 217 uint32 buffer_size, |
218 bool force_keyframe) { | |
215 DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncode(): frame_id=" << frame_id | 219 DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncode(): frame_id=" << frame_id |
mcasas
2015/06/04 15:20:55
Update the method name. Or better, use __func__
| |
216 << ", buffer_size=" << buffer_size | 220 << ", buffer_size=" << buffer_size |
217 << ", force_keyframe=" << force_keyframe; | 221 << ", force_keyframe=" << force_keyframe; |
218 if (!encoder_) | 222 if (!encoder_) |
219 return; | 223 return; |
220 if (frame_id < 0) { | 224 if (frame_id < 0) { |
221 DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): invalid frame_id=" | 225 DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): invalid frame_id=" |
222 << frame_id; | 226 << frame_id; |
223 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); | 227 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); |
224 return; | 228 return; |
225 } | 229 } |
(...skipping 26 matching lines...) Expand all Loading... | |
252 media::VideoFrame::WrapExternalSharedMemory( | 256 media::VideoFrame::WrapExternalSharedMemory( |
253 input_format_, | 257 input_format_, |
254 input_coded_size_, | 258 input_coded_size_, |
255 gfx::Rect(input_visible_size_), | 259 gfx::Rect(input_visible_size_), |
256 input_visible_size_, | 260 input_visible_size_, |
257 shm_memory, | 261 shm_memory, |
258 buffer_size, | 262 buffer_size, |
259 buffer_handle, | 263 buffer_handle, |
260 buffer_offset, | 264 buffer_offset, |
261 base::TimeDelta()); | 265 base::TimeDelta()); |
262 frame->AddDestructionObserver( | 266 frame->AddDestructionObserver(media::BindToCurrentLoop(base::Bind( |
263 media::BindToCurrentLoop( | 267 &GpuVideoEncodeAccelerator::EncodeSharedMemoryFrameFinished, |
264 base::Bind(&GpuVideoEncodeAccelerator::EncodeFrameFinished, | 268 weak_this_factory_.GetWeakPtr(), frame_id, base::Passed(&shm)))); |
265 weak_this_factory_.GetWeakPtr(), | |
266 frame_id, | |
267 base::Passed(&shm)))); | |
268 | 269 |
269 if (!frame.get()) { | 270 if (!frame.get()) { |
270 DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): " | 271 DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): " |
271 "could not create VideoFrame for frame_id=" << frame_id; | 272 "could not create VideoFrame for frame_id=" << frame_id; |
272 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); | 273 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); |
273 return; | 274 return; |
274 } | 275 } |
275 | 276 |
276 encoder_->Encode(frame, force_keyframe); | 277 encoder_->Encode(frame, force_keyframe); |
277 } | 278 } |
278 | 279 |
280 void GpuVideoEncodeAccelerator::OnEncodeNativeTexture( | |
281 int32 frame_id, | |
282 gpu::MailboxHolder mailbox_holder, | |
283 bool force_keyframe) { | |
284 DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): frame_id=" | |
285 << frame_id << ", force_keyframe=" << force_keyframe; | |
286 if (!encoder_) | |
287 return; | |
288 if (frame_id < 0) { | |
289 DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): " | |
290 "invalid frame_id=" << frame_id; | |
291 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); | |
292 return; | |
293 } | |
294 DCHECK(!mailbox_holder.mailbox.IsZero()); | |
mcasas
2015/06/04 15:20:56
nit: pass these DCHECKs to the beginning of the me
emircan
2015/06/04 22:04:40
Done.
| |
295 DCHECK(mailbox_holder.mailbox.Verify()); | |
296 DCHECK(mailbox_holder.texture_target); | |
297 DCHECK(mailbox_holder.sync_point); | |
298 | |
299 scoped_refptr<media::VideoFrame> frame = media::VideoFrame::WrapNativeTexture( | |
300 mailbox_holder, | |
301 media::VideoFrame::ReleaseMailboxCB(), | |
302 input_coded_size_, gfx::Rect(input_visible_size_), input_visible_size_, | |
303 base::TimeDelta(), true /* allow_overlay */, true /* has_alpha */); | |
304 frame->AddDestructionObserver(media::BindToCurrentLoop( | |
305 base::Bind(&GpuVideoEncodeAccelerator::EncodeNativeTextureFrameFinished, | |
306 weak_this_factory_.GetWeakPtr(), frame_id))); | |
307 if (!frame.get()) { | |
308 DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): " | |
309 "could not create VideoFrame for frame_id=" << frame_id; | |
310 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); | |
311 return; | |
312 } | |
313 | |
314 encoder_->Encode(frame, force_keyframe); | |
315 } | |
316 | |
279 void GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer( | 317 void GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer( |
280 int32 buffer_id, | 318 int32 buffer_id, |
281 base::SharedMemoryHandle buffer_handle, | 319 base::SharedMemoryHandle buffer_handle, |
282 uint32 buffer_size) { | 320 uint32 buffer_size) { |
283 DVLOG(3) << "GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer(): " | 321 DVLOG(3) << "GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer(): " |
284 "buffer_id=" << buffer_id | 322 "buffer_id=" << buffer_id |
285 << ", buffer_size=" << buffer_size; | 323 << ", buffer_size=" << buffer_size; |
286 if (!encoder_) | 324 if (!encoder_) |
287 return; | 325 return; |
288 if (buffer_id < 0) { | 326 if (buffer_id < 0) { |
(...skipping 21 matching lines...) Expand all Loading... | |
310 uint32 bitrate, | 348 uint32 bitrate, |
311 uint32 framerate) { | 349 uint32 framerate) { |
312 DVLOG(2) << "GpuVideoEncodeAccelerator::OnRequestEncodingParametersChange(): " | 350 DVLOG(2) << "GpuVideoEncodeAccelerator::OnRequestEncodingParametersChange(): " |
313 "bitrate=" << bitrate | 351 "bitrate=" << bitrate |
314 << ", framerate=" << framerate; | 352 << ", framerate=" << framerate; |
315 if (!encoder_) | 353 if (!encoder_) |
316 return; | 354 return; |
317 encoder_->RequestEncodingParametersChange(bitrate, framerate); | 355 encoder_->RequestEncodingParametersChange(bitrate, framerate); |
318 } | 356 } |
319 | 357 |
320 void GpuVideoEncodeAccelerator::EncodeFrameFinished( | 358 void GpuVideoEncodeAccelerator::EncodeSharedMemoryFrameFinished( |
321 int32 frame_id, | 359 int32 frame_id, |
322 scoped_ptr<base::SharedMemory> shm) { | 360 scoped_ptr<base::SharedMemory> shm) { |
323 Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_, | 361 Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_, |
324 frame_id)); | 362 frame_id)); |
325 // Just let shm fall out of scope. | 363 // Just let shm fall out of scope. |
mcasas
2015/06/04 15:20:55
s/shm/|shm|/
emircan
2015/06/04 22:04:41
Done.
| |
326 } | 364 } |
365 void GpuVideoEncodeAccelerator::EncodeNativeTextureFrameFinished( | |
366 int32 frame_id) { | |
367 Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_, | |
368 frame_id)); | |
369 } | |
327 | 370 |
328 void GpuVideoEncodeAccelerator::Send(IPC::Message* message) { | 371 void GpuVideoEncodeAccelerator::Send(IPC::Message* message) { |
329 stub_->channel()->Send(message); | 372 stub_->channel()->Send(message); |
330 } | 373 } |
331 | 374 |
332 void GpuVideoEncodeAccelerator::SendCreateEncoderReply(IPC::Message* message, | 375 void GpuVideoEncodeAccelerator::SendCreateEncoderReply(IPC::Message* message, |
333 bool succeeded) { | 376 bool succeeded) { |
334 GpuCommandBufferMsg_CreateVideoEncoder::WriteReplyParams(message, succeeded); | 377 GpuCommandBufferMsg_CreateVideoEncoder::WriteReplyParams(message, succeeded); |
335 Send(message); | 378 Send(message); |
336 } | 379 } |
337 | 380 |
338 } // namespace content | 381 } // namespace content |
OLD | NEW |