Chromium Code Reviews| 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 |