| 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 "media/gpu/ipc/service/gpu_video_encode_accelerator.h" | 5 #include "media/gpu/ipc/service/gpu_video_encode_accelerator.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
| 13 #include "base/memory/shared_memory.h" | 13 #include "base/memory/shared_memory.h" |
| 14 #include "base/numerics/safe_math.h" | 14 #include "base/numerics/safe_math.h" |
| 15 #include "base/sys_info.h" | 15 #include "base/sys_info.h" |
| 16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
| 17 #include "gpu/ipc/client/gpu_memory_buffer_impl.h" | |
| 18 #include "gpu/ipc/service/gpu_channel.h" | 17 #include "gpu/ipc/service/gpu_channel.h" |
| 19 #include "gpu/ipc/service/gpu_channel_manager.h" | 18 #include "gpu/ipc/service/gpu_channel_manager.h" |
| 20 #include "ipc/ipc_message_macros.h" | 19 #include "ipc/ipc_message_macros.h" |
| 21 #include "media/base/bind_to_current_loop.h" | 20 #include "media/base/bind_to_current_loop.h" |
| 22 #include "media/base/limits.h" | 21 #include "media/base/limits.h" |
| 23 #include "media/base/video_frame.h" | 22 #include "media/base/video_frame.h" |
| 24 #include "media/gpu/gpu_video_accelerator_util.h" | 23 #include "media/gpu/gpu_video_accelerator_util.h" |
| 25 #include "media/gpu/ipc/common/media_messages.h" | 24 #include "media/gpu/ipc/common/media_messages.h" |
| 26 | 25 |
| 27 #if defined(OS_CHROMEOS) | 26 #if defined(OS_CHROMEOS) |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 } | 158 } |
| 160 encoder_.reset(); | 159 encoder_.reset(); |
| 161 DLOG(ERROR) << __FUNCTION__ << " VEA initialization failed"; | 160 DLOG(ERROR) << __FUNCTION__ << " VEA initialization failed"; |
| 162 return false; | 161 return false; |
| 163 } | 162 } |
| 164 | 163 |
| 165 bool GpuVideoEncodeAccelerator::OnMessageReceived(const IPC::Message& message) { | 164 bool GpuVideoEncodeAccelerator::OnMessageReceived(const IPC::Message& message) { |
| 166 bool handled = true; | 165 bool handled = true; |
| 167 IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAccelerator, message) | 166 IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAccelerator, message) |
| 168 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Encode, OnEncode) | 167 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Encode, OnEncode) |
| 169 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Encode2, OnEncode2) | |
| 170 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer, | 168 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer, |
| 171 OnUseOutputBitstreamBuffer) | 169 OnUseOutputBitstreamBuffer) |
| 172 IPC_MESSAGE_HANDLER( | 170 IPC_MESSAGE_HANDLER( |
| 173 AcceleratedVideoEncoderMsg_RequestEncodingParametersChange, | 171 AcceleratedVideoEncoderMsg_RequestEncodingParametersChange, |
| 174 OnRequestEncodingParametersChange) | 172 OnRequestEncodingParametersChange) |
| 175 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Destroy, OnDestroy) | 173 IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Destroy, OnDestroy) |
| 176 IPC_MESSAGE_UNHANDLED(handled = false) | 174 IPC_MESSAGE_UNHANDLED(handled = false) |
| 177 IPC_END_MESSAGE_MAP() | 175 IPC_END_MESSAGE_MAP() |
| 178 return handled; | 176 return handled; |
| 179 } | 177 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 DLOG(ERROR) << __FUNCTION__ << " could not create a frame"; | 303 DLOG(ERROR) << __FUNCTION__ << " could not create a frame"; |
| 306 NotifyError(VideoEncodeAccelerator::kPlatformFailureError); | 304 NotifyError(VideoEncodeAccelerator::kPlatformFailureError); |
| 307 return; | 305 return; |
| 308 } | 306 } |
| 309 frame->AddDestructionObserver(BindToCurrentLoop(base::Bind( | 307 frame->AddDestructionObserver(BindToCurrentLoop(base::Bind( |
| 310 &GpuVideoEncodeAccelerator::EncodeFrameFinished, | 308 &GpuVideoEncodeAccelerator::EncodeFrameFinished, |
| 311 weak_this_factory_.GetWeakPtr(), params.frame_id, base::Passed(&shm)))); | 309 weak_this_factory_.GetWeakPtr(), params.frame_id, base::Passed(&shm)))); |
| 312 encoder_->Encode(frame, params.force_keyframe); | 310 encoder_->Encode(frame, params.force_keyframe); |
| 313 } | 311 } |
| 314 | 312 |
| 315 void GpuVideoEncodeAccelerator::OnEncode2( | |
| 316 const AcceleratedVideoEncoderMsg_Encode_Params2& params) { | |
| 317 DVLOG(3) << __FUNCTION__ << " frame_id = " << params.frame_id | |
| 318 << ", size=" << params.size.ToString() | |
| 319 << ", force_keyframe=" << params.force_keyframe | |
| 320 << ", handle type=" << params.gpu_memory_buffer_handles[0].type; | |
| 321 // Encoding GpuMemoryBuffer backed frames is not supported. | |
| 322 NOTREACHED(); | |
| 323 } | |
| 324 | |
| 325 void GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer( | 313 void GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer( |
| 326 int32_t buffer_id, | 314 int32_t buffer_id, |
| 327 base::SharedMemoryHandle buffer_handle, | 315 base::SharedMemoryHandle buffer_handle, |
| 328 uint32_t buffer_size) { | 316 uint32_t buffer_size) { |
| 329 DVLOG(3) << __FUNCTION__ << " buffer_id=" << buffer_id | 317 DVLOG(3) << __FUNCTION__ << " buffer_id=" << buffer_id |
| 330 << ", buffer_size=" << buffer_size; | 318 << ", buffer_size=" << buffer_size; |
| 331 if (!encoder_) | 319 if (!encoder_) |
| 332 return; | 320 return; |
| 333 if (buffer_id < 0) { | 321 if (buffer_id < 0) { |
| 334 DLOG(ERROR) << __FUNCTION__ << " invalid buffer_id=" << buffer_id; | 322 DLOG(ERROR) << __FUNCTION__ << " invalid buffer_id=" << buffer_id; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_, | 354 Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_, |
| 367 frame_id)); | 355 frame_id)); |
| 368 // Just let |shm| fall out of scope. | 356 // Just let |shm| fall out of scope. |
| 369 } | 357 } |
| 370 | 358 |
| 371 void GpuVideoEncodeAccelerator::Send(IPC::Message* message) { | 359 void GpuVideoEncodeAccelerator::Send(IPC::Message* message) { |
| 372 stub_->channel()->Send(message); | 360 stub_->channel()->Send(message); |
| 373 } | 361 } |
| 374 | 362 |
| 375 } // namespace media | 363 } // namespace media |
| OLD | NEW |