Chromium Code Reviews| Index: content/common/gpu/media/gpu_video_encode_accelerator.cc |
| diff --git a/content/common/gpu/media/gpu_video_encode_accelerator.cc b/content/common/gpu/media/gpu_video_encode_accelerator.cc |
| index a61f1fe4d2e93b1997a3c4f3adf45e9b8e1e8c58..157c2488cc4d405cbff71f2f69710b8df375fd44 100644 |
| --- a/content/common/gpu/media/gpu_video_encode_accelerator.cc |
| +++ b/content/common/gpu/media/gpu_video_encode_accelerator.cc |
| @@ -112,7 +112,10 @@ void GpuVideoEncodeAccelerator::Initialize( |
| bool GpuVideoEncodeAccelerator::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAccelerator, message) |
| - IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Encode, OnEncode) |
| + 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.
|
| + OnEncodeSharedMemory) |
| + IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_EncodeNativeTexture, |
| + OnEncodeNativeTexture) |
| IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer, |
| OnUseOutputBitstreamBuffer) |
| IPC_MESSAGE_HANDLER( |
| @@ -207,11 +210,12 @@ GpuVideoEncodeAccelerator::CreateAndroidVEA() { |
| return encoder.Pass(); |
| } |
| -void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id, |
| - base::SharedMemoryHandle buffer_handle, |
| - uint32 buffer_offset, |
| - uint32 buffer_size, |
| - bool force_keyframe) { |
| +void GpuVideoEncodeAccelerator::OnEncodeSharedMemory( |
| + int32 frame_id, |
| + base::SharedMemoryHandle buffer_handle, |
| + uint32 buffer_offset, |
| + uint32 buffer_size, |
| + bool force_keyframe) { |
| DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncode(): frame_id=" << frame_id |
|
mcasas
2015/06/04 15:20:55
Update the method name. Or better, use __func__
|
| << ", buffer_size=" << buffer_size |
| << ", force_keyframe=" << force_keyframe; |
| @@ -259,12 +263,9 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id, |
| buffer_handle, |
| buffer_offset, |
| base::TimeDelta()); |
| - frame->AddDestructionObserver( |
| - media::BindToCurrentLoop( |
| - base::Bind(&GpuVideoEncodeAccelerator::EncodeFrameFinished, |
| - weak_this_factory_.GetWeakPtr(), |
| - frame_id, |
| - base::Passed(&shm)))); |
| + frame->AddDestructionObserver(media::BindToCurrentLoop(base::Bind( |
| + &GpuVideoEncodeAccelerator::EncodeSharedMemoryFrameFinished, |
| + weak_this_factory_.GetWeakPtr(), frame_id, base::Passed(&shm)))); |
| if (!frame.get()) { |
| DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): " |
| @@ -276,6 +277,43 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id, |
| encoder_->Encode(frame, force_keyframe); |
| } |
| +void GpuVideoEncodeAccelerator::OnEncodeNativeTexture( |
| + int32 frame_id, |
| + gpu::MailboxHolder mailbox_holder, |
| + bool force_keyframe) { |
| + DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): frame_id=" |
| + << frame_id << ", force_keyframe=" << force_keyframe; |
| + if (!encoder_) |
| + return; |
| + if (frame_id < 0) { |
| + DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): " |
| + "invalid frame_id=" << frame_id; |
| + NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); |
| + return; |
| + } |
| + 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.
|
| + DCHECK(mailbox_holder.mailbox.Verify()); |
| + DCHECK(mailbox_holder.texture_target); |
| + DCHECK(mailbox_holder.sync_point); |
| + |
| + scoped_refptr<media::VideoFrame> frame = media::VideoFrame::WrapNativeTexture( |
| + mailbox_holder, |
| + media::VideoFrame::ReleaseMailboxCB(), |
| + input_coded_size_, gfx::Rect(input_visible_size_), input_visible_size_, |
| + base::TimeDelta(), true /* allow_overlay */, true /* has_alpha */); |
| + frame->AddDestructionObserver(media::BindToCurrentLoop( |
| + base::Bind(&GpuVideoEncodeAccelerator::EncodeNativeTextureFrameFinished, |
| + weak_this_factory_.GetWeakPtr(), frame_id))); |
| + if (!frame.get()) { |
| + DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): " |
| + "could not create VideoFrame for frame_id=" << frame_id; |
| + NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); |
| + return; |
| + } |
| + |
| + encoder_->Encode(frame, force_keyframe); |
| +} |
| + |
| void GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer( |
| int32 buffer_id, |
| base::SharedMemoryHandle buffer_handle, |
| @@ -317,13 +355,18 @@ void GpuVideoEncodeAccelerator::OnRequestEncodingParametersChange( |
| encoder_->RequestEncodingParametersChange(bitrate, framerate); |
| } |
| -void GpuVideoEncodeAccelerator::EncodeFrameFinished( |
| +void GpuVideoEncodeAccelerator::EncodeSharedMemoryFrameFinished( |
| int32 frame_id, |
| scoped_ptr<base::SharedMemory> shm) { |
| Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_, |
| frame_id)); |
| // 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.
|
| } |
| +void GpuVideoEncodeAccelerator::EncodeNativeTextureFrameFinished( |
| + int32 frame_id) { |
| + Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_, |
| + frame_id)); |
| +} |
| void GpuVideoEncodeAccelerator::Send(IPC::Message* message) { |
| stub_->channel()->Send(message); |