Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Side by Side Diff: content/renderer/gpu_video_decode_accelerator_host.cc

Issue 7066035: Moved GPU related files in content/renderer into gpu subdirectory. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/gpu_video_decode_accelerator_host.h"
6
7 #include "base/logging.h"
8 #include "base/shared_memory.h"
9 #include "base/task.h"
10 #include "content/common/gpu/gpu_messages.h"
11 #include "content/common/view_messages.h"
12 #include "content/renderer/render_thread.h"
13 #include "ipc/ipc_message_macros.h"
14 #include "ipc/ipc_message_utils.h"
15
16 using media::VideoDecodeAccelerator;
17 using media::VideoDecodeAcceleratorCallback;
18
19 GpuVideoDecodeAcceleratorHost::GpuVideoDecodeAcceleratorHost(
20 MessageRouter* router,
21 IPC::Message::Sender* ipc_sender,
22 int32 decoder_host_id,
23 VideoDecodeAccelerator::Client* client)
24 : router_(router),
25 ipc_sender_(ipc_sender),
26 decoder_host_id_(decoder_host_id),
27 decoder_id_(0),
28 client_(client) {
29 }
30
31 GpuVideoDecodeAcceleratorHost::~GpuVideoDecodeAcceleratorHost() {}
32
33 void GpuVideoDecodeAcceleratorHost::OnChannelConnected(int32 peer_pid) {
34 }
35
36 void GpuVideoDecodeAcceleratorHost::OnChannelError() {
37 ipc_sender_ = NULL;
38 }
39
40 bool GpuVideoDecodeAcceleratorHost::OnMessageReceived(const IPC::Message& msg) {
41 bool handled = true;
42 IPC_BEGIN_MESSAGE_MAP(GpuVideoDecodeAcceleratorHost, msg)
43 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_BitstreamBufferProcessed,
44 OnBitstreamBufferProcessed)
45 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers,
46 OnProvidePictureBuffer)
47 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_CreateDone,
48 OnCreateDone)
49 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_PictureReady,
50 OnPictureReady)
51 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_FlushDone,
52 OnFlushDone)
53 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_AbortDone,
54 OnAbortDone)
55 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_EndOfStream,
56 OnEndOfStream)
57 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_ErrorNotification,
58 OnErrorNotification)
59 IPC_MESSAGE_UNHANDLED(handled = false)
60 IPC_END_MESSAGE_MAP()
61 DCHECK(handled);
62 return handled;
63 }
64
65 void GpuVideoDecodeAcceleratorHost::GetConfigs(
66 const std::vector<uint32>& requested_configs,
67 std::vector<uint32>* matched_configs) {
68 // TODO(vrk): Need to rethink GetConfigs.
69 NOTIMPLEMENTED();
70 }
71
72 bool GpuVideoDecodeAcceleratorHost::Initialize(
73 const std::vector<uint32>& configs) {
74 router_->AddRoute(decoder_host_id_, this);
75
76 // Temporarily save configs for after create is done and we're
77 // ready to initialize.
78 configs_ = configs;
79
80 if (!ipc_sender_->Send(new GpuChannelMsg_CreateVideoDecoder(
81 decoder_id_, configs))) {
82 LOG(ERROR) << "Send(GpuChannelMsg_CreateVideoDecoder) failed";
83 return false;
84 }
85 return true;
86 }
87
88 bool GpuVideoDecodeAcceleratorHost::Decode(
89 const media::BitstreamBuffer& bitstream_buffer) {
90 if (!ipc_sender_->Send(new AcceleratedVideoDecoderMsg_Decode(
91 decoder_id_, bitstream_buffer.id(),
92 bitstream_buffer.handle(), bitstream_buffer.size()))) {
93 DLOG(ERROR) << "Send(AcceleratedVideoDecoderMsg_Decode) failed";
94 return false;
95 }
96
97 return true;
98 }
99
100 void GpuVideoDecodeAcceleratorHost::AssignGLESBuffers(
101 const std::vector<media::GLESBuffer>& buffers) {
102 // Rearrange data for IPC command.
103 std::vector<int32> buffer_ids;
104 std::vector<uint32> texture_ids;
105 std::vector<uint32> context_ids;
106 std::vector<gfx::Size> sizes;
107 for (uint32 i = 0; i < buffers.size(); i++) {
108 const media::BufferInfo& info = buffers[i].buffer_info();
109 texture_ids.push_back(buffers[i].texture_id());
110 context_ids.push_back(buffers[i].context_id());
111 buffer_ids.push_back(info.id());
112 sizes.push_back(info.size());
113 }
114 if (!ipc_sender_->Send(new AcceleratedVideoDecoderMsg_AssignGLESBuffers(
115 decoder_id_, buffer_ids, texture_ids, context_ids, sizes))) {
116 LOG(ERROR) << "Send(AcceleratedVideoDecoderMsg_AssignGLESBuffers) failed";
117 }
118 }
119
120 void GpuVideoDecodeAcceleratorHost::AssignSysmemBuffers(
121 const std::vector<media::SysmemBuffer>& buffers) {
122 // TODO(vrk): Implement.
123 NOTIMPLEMENTED();
124 }
125
126 void GpuVideoDecodeAcceleratorHost::ReusePictureBuffer(
127 int32 picture_buffer_id) {
128 if (!ipc_sender_->Send(new AcceleratedVideoDecoderMsg_ReusePictureBuffer(
129 decoder_id_, picture_buffer_id))) {
130 LOG(ERROR) << "Send(AcceleratedVideoDecoderMsg_ReusePictureBuffer) failed";
131 }
132 }
133
134 bool GpuVideoDecodeAcceleratorHost::Flush() {
135 if (!ipc_sender_->Send(new AcceleratedVideoDecoderMsg_Flush(decoder_id_))) {
136 LOG(ERROR) << "Send(AcceleratedVideoDecoderMsg_Flush) failed";
137 return false;
138 }
139 return true;
140 }
141
142 bool GpuVideoDecodeAcceleratorHost::Abort() {
143 if (!ipc_sender_->Send(new AcceleratedVideoDecoderMsg_Abort(decoder_id_))) {
144 LOG(ERROR) << "Send(AcceleratedVideoDecoderMsg_Abort) failed";
145 return false;
146 }
147 return true;
148 }
149
150 void GpuVideoDecodeAcceleratorHost::OnBitstreamBufferProcessed(
151 int32 bitstream_buffer_id) {
152 client_->NotifyEndOfBitstreamBuffer(bitstream_buffer_id);
153 }
154
155 void GpuVideoDecodeAcceleratorHost::OnProvidePictureBuffer(
156 uint32 num_requested_buffers,
157 const gfx::Size& buffer_size,
158 int32 mem_type) {
159 media::VideoDecodeAccelerator::MemoryType converted_mem_type =
160 static_cast<media::VideoDecodeAccelerator::MemoryType>(mem_type);
161 client_->ProvidePictureBuffers(
162 num_requested_buffers, buffer_size, converted_mem_type);
163 }
164
165 void GpuVideoDecodeAcceleratorHost::OnDismissPictureBuffer(
166 int32 picture_buffer_id) {
167 client_->DismissPictureBuffer(picture_buffer_id);
168 }
169
170 void GpuVideoDecodeAcceleratorHost::OnCreateDone(int32 decoder_id) {
171 decoder_id_ = decoder_id;
172 if (!ipc_sender_->Send(new AcceleratedVideoDecoderMsg_Initialize(
173 decoder_id_, configs_))) {
174 LOG(ERROR) << "Send(AcceleratedVideoDecoderMsg_Initialize) failed";
175 }
176 }
177
178 void GpuVideoDecodeAcceleratorHost::OnPictureReady(
179 int32 picture_buffer_id, int32 bitstream_buffer_id,
180 const gfx::Size& visible_size, const gfx::Size& decoded_size) {
181 media::Picture picture(
182 picture_buffer_id, bitstream_buffer_id, visible_size, decoded_size);
183 client_->PictureReady(picture);
184 }
185
186 void GpuVideoDecodeAcceleratorHost::OnFlushDone() {
187 client_->NotifyFlushDone();
188 }
189
190 void GpuVideoDecodeAcceleratorHost::OnAbortDone() {
191 client_->NotifyAbortDone();
192 }
193
194 void GpuVideoDecodeAcceleratorHost::OnEndOfStream() {
195 client_->NotifyEndOfStream();
196 }
197
198 void GpuVideoDecodeAcceleratorHost::OnErrorNotification(uint32 error) {
199 client_->NotifyError(
200 static_cast<media::VideoDecodeAccelerator::Error>(error));
201 }
OLDNEW
« no previous file with comments | « content/renderer/gpu_video_decode_accelerator_host.h ('k') | content/renderer/gpu_video_decoder_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698