summaryrefslogtreecommitdiff
path: root/chromium/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/common/gpu/client/gpu_video_encode_accelerator_host.cc')
-rw-r--r--chromium/content/common/gpu/client/gpu_video_encode_accelerator_host.cc217
1 files changed, 0 insertions, 217 deletions
diff --git a/chromium/content/common/gpu/client/gpu_video_encode_accelerator_host.cc b/chromium/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
deleted file mode 100644
index 64f07e5b081..00000000000
--- a/chromium/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
+++ /dev/null
@@ -1,217 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/common/gpu/client/gpu_video_encode_accelerator_host.h"
-
-#include "base/logging.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "content/common/gpu/client/gpu_channel_host.h"
-#include "content/common/gpu/gpu_messages.h"
-#include "content/common/gpu/media/gpu_video_encode_accelerator.h"
-#include "media/base/video_frame.h"
-
-namespace content {
-
-GpuVideoEncodeAcceleratorHost::GpuVideoEncodeAcceleratorHost(
- media::VideoEncodeAccelerator::Client* client,
- const scoped_refptr<GpuChannelHost>& gpu_channel_host,
- int32 route_id)
- : client_(client),
- client_ptr_factory_(client_),
- channel_(gpu_channel_host),
- route_id_(route_id),
- next_frame_id_(0) {
- channel_->AddRoute(route_id_, AsWeakPtr());
-}
-
-GpuVideoEncodeAcceleratorHost::~GpuVideoEncodeAcceleratorHost() {
- if (channel_)
- channel_->RemoveRoute(route_id_);
-}
-
-// static
-std::vector<media::VideoEncodeAccelerator::SupportedProfile>
-GpuVideoEncodeAcceleratorHost::GetSupportedProfiles() {
- return GpuVideoEncodeAccelerator::GetSupportedProfiles();
-}
-
-bool GpuVideoEncodeAcceleratorHost::OnMessageReceived(
- const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAcceleratorHost, message)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_NotifyInitializeDone,
- OnNotifyInitializeDone)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_RequireBitstreamBuffers,
- OnRequireBitstreamBuffers)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_NotifyInputDone,
- OnNotifyInputDone)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_BitstreamBufferReady,
- OnBitstreamBufferReady)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_NotifyError,
- OnNotifyError)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- DCHECK(handled);
- return handled;
-}
-
-void GpuVideoEncodeAcceleratorHost::OnChannelError() {
- DLOG(ERROR) << "OnChannelError()";
- OnNotifyError(kPlatformFailureError);
- if (channel_) {
- channel_->RemoveRoute(route_id_);
- channel_ = NULL;
- }
-}
-
-void GpuVideoEncodeAcceleratorHost::Initialize(
- media::VideoFrame::Format input_format,
- const gfx::Size& input_visible_size,
- media::VideoCodecProfile output_profile,
- uint32 initial_bitrate) {
- Send(new AcceleratedVideoEncoderMsg_Initialize(route_id_,
- input_format,
- input_visible_size,
- output_profile,
- initial_bitrate));
-}
-
-void GpuVideoEncodeAcceleratorHost::Encode(
- const scoped_refptr<media::VideoFrame>& frame,
- bool force_keyframe) {
- if (!channel_)
- return;
- if (!base::SharedMemory::IsHandleValid(frame->shared_memory_handle())) {
- DLOG(ERROR) << "Encode(): cannot encode frame not backed by shared memory";
- NotifyError(kPlatformFailureError);
- return;
- }
- base::SharedMemoryHandle handle =
- channel_->ShareToGpuProcess(frame->shared_memory_handle());
- if (!base::SharedMemory::IsHandleValid(handle)) {
- DLOG(ERROR) << "Encode(): failed to duplicate buffer handle for GPU "
- "process";
- NotifyError(kPlatformFailureError);
- return;
- }
-
- // We assume that planar frame data passed here is packed and contiguous.
- const size_t plane_count = media::VideoFrame::NumPlanes(frame->format());
- size_t frame_size = 0;
- for (size_t i = 0; i < plane_count; ++i) {
- // Cast DCHECK parameters to void* to avoid printing uint8* as a string.
- DCHECK_EQ(reinterpret_cast<void*>(frame->data(i)),
- reinterpret_cast<void*>((frame->data(0) + frame_size)))
- << "plane=" << i;
- frame_size += frame->stride(i) * frame->rows(i);
- }
-
- Send(new AcceleratedVideoEncoderMsg_Encode(
- route_id_, next_frame_id_, handle, frame_size, force_keyframe));
- frame_map_[next_frame_id_] = frame;
-
- // Mask against 30 bits, to avoid (undefined) wraparound on signed integer.
- next_frame_id_ = (next_frame_id_ + 1) & 0x3FFFFFFF;
-}
-
-void GpuVideoEncodeAcceleratorHost::UseOutputBitstreamBuffer(
- const media::BitstreamBuffer& buffer) {
- if (!channel_)
- return;
- base::SharedMemoryHandle handle =
- channel_->ShareToGpuProcess(buffer.handle());
- if (!base::SharedMemory::IsHandleValid(handle)) {
- DLOG(ERROR) << "UseOutputBitstreamBuffer(): failed to duplicate buffer "
- "handle for GPU process: buffer.id()=" << buffer.id();
- NotifyError(kPlatformFailureError);
- return;
- }
- Send(new AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer(
- route_id_, buffer.id(), handle, buffer.size()));
-}
-
-void GpuVideoEncodeAcceleratorHost::RequestEncodingParametersChange(
- uint32 bitrate,
- uint32 framerate) {
- Send(new AcceleratedVideoEncoderMsg_RequestEncodingParametersChange(
- route_id_, bitrate, framerate));
-}
-
-void GpuVideoEncodeAcceleratorHost::Destroy() {
- Send(new GpuChannelMsg_DestroyVideoEncoder(route_id_));
- delete this;
-}
-
-void GpuVideoEncodeAcceleratorHost::NotifyError(Error error) {
- DVLOG(2) << "NotifyError(): error=" << error;
- base::MessageLoopProxy::current()->PostTask(
- FROM_HERE,
- base::Bind(&media::VideoEncodeAccelerator::Client::NotifyError,
- client_ptr_factory_.GetWeakPtr(),
- error));
-}
-
-void GpuVideoEncodeAcceleratorHost::OnNotifyInitializeDone() {
- DVLOG(2) << "OnNotifyInitializeDone()";
- if (client_)
- client_->NotifyInitializeDone();
-}
-
-void GpuVideoEncodeAcceleratorHost::OnRequireBitstreamBuffers(
- uint32 input_count,
- const gfx::Size& input_coded_size,
- uint32 output_buffer_size) {
- DVLOG(2) << "OnRequireBitstreamBuffers(): input_count=" << input_count
- << ", input_coded_size=" << input_coded_size.ToString()
- << ", output_buffer_size=" << output_buffer_size;
- if (client_) {
- client_->RequireBitstreamBuffers(
- input_count, input_coded_size, output_buffer_size);
- }
-}
-
-void GpuVideoEncodeAcceleratorHost::OnNotifyInputDone(int32 frame_id) {
- DVLOG(3) << "OnNotifyInputDone(): frame_id=" << frame_id;
- if (!frame_map_.erase(frame_id)) {
- DLOG(ERROR) << "OnNotifyInputDone(): "
- "invalid frame_id=" << frame_id;
- OnNotifyError(kPlatformFailureError);
- return;
- }
-}
-
-void GpuVideoEncodeAcceleratorHost::OnBitstreamBufferReady(
- int32 bitstream_buffer_id,
- uint32 payload_size,
- bool key_frame) {
- DVLOG(3) << "OnBitstreamBufferReady(): "
- "bitstream_buffer_id=" << bitstream_buffer_id
- << ", payload_size=" << payload_size
- << ", key_frame=" << key_frame;
- if (client_)
- client_->BitstreamBufferReady(bitstream_buffer_id, payload_size, key_frame);
-}
-
-void GpuVideoEncodeAcceleratorHost::OnNotifyError(Error error) {
- DVLOG(2) << "OnNotifyError(): error=" << error;
- if (client_) {
- client_->NotifyError(error);
- client_ = NULL;
- client_ptr_factory_.InvalidateWeakPtrs();
- }
-}
-
-void GpuVideoEncodeAcceleratorHost::Send(IPC::Message* message) {
- if (!channel_) {
- DLOG(ERROR) << "Send(): no channel";
- delete message;
- NotifyError(kPlatformFailureError);
- } else if (!channel_->Send(message)) {
- DLOG(ERROR) << "Send(): sending failed: message->type()="
- << message->type();
- NotifyError(kPlatformFailureError);
- }
-}
-
-} // namespace content