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

Side by Side Diff: content/common/gpu/media/gpu_video_decode_accelerator.cc

Issue 7021020: Clean up video frame sizes, types in Video Decode API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: responses to CR Created 9 years, 5 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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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_decode_accelerator.h" 5 #include "content/common/gpu/media/gpu_video_decode_accelerator.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 for (size_t i = 0; i < deferred_messages_copy.size(); ++i) 49 for (size_t i = 0; i < deferred_messages_copy.size(); ++i)
50 OnMessageReceived(*deferred_messages_copy[i]); 50 OnMessageReceived(*deferred_messages_copy[i]);
51 STLDeleteElements(&deferred_messages_copy); 51 STLDeleteElements(&deferred_messages_copy);
52 } 52 }
53 53
54 bool GpuVideoDecodeAccelerator::DeferMessageIfNeeded( 54 bool GpuVideoDecodeAccelerator::DeferMessageIfNeeded(
55 const IPC::Message& msg, bool* deferred) { 55 const IPC::Message& msg, bool* deferred) {
56 // Only consider deferring for message types that need it. 56 // Only consider deferring for message types that need it.
57 switch (msg.type()) { 57 switch (msg.type()) {
58 case AcceleratedVideoDecoderMsg_Decode::ID: 58 case AcceleratedVideoDecoderMsg_Decode::ID:
59 case AcceleratedVideoDecoderMsg_AssignGLESBuffers::ID: 59 case AcceleratedVideoDecoderMsg_AssignPictureBuffers::ID:
60 case AcceleratedVideoDecoderMsg_ReusePictureBuffer::ID: 60 case AcceleratedVideoDecoderMsg_ReusePictureBuffer::ID:
61 case AcceleratedVideoDecoderMsg_Flush::ID: 61 case AcceleratedVideoDecoderMsg_Flush::ID:
62 case AcceleratedVideoDecoderMsg_Reset::ID: 62 case AcceleratedVideoDecoderMsg_Reset::ID:
63 case AcceleratedVideoDecoderMsg_Destroy::ID: 63 case AcceleratedVideoDecoderMsg_Destroy::ID:
64 break; 64 break;
65 default: 65 default:
66 return false; 66 return false;
67 } 67 }
68 68
69 gpu::ReadWriteTokens tokens; 69 gpu::ReadWriteTokens tokens;
(...skipping 12 matching lines...) Expand all
82 bool GpuVideoDecodeAccelerator::OnMessageReceived(const IPC::Message& msg) { 82 bool GpuVideoDecodeAccelerator::OnMessageReceived(const IPC::Message& msg) {
83 bool deferred = false; 83 bool deferred = false;
84 if (!DeferMessageIfNeeded(msg, &deferred)) 84 if (!DeferMessageIfNeeded(msg, &deferred))
85 return false; 85 return false;
86 if (deferred) 86 if (deferred)
87 return true; 87 return true;
88 88
89 bool handled = true; 89 bool handled = true;
90 IPC_BEGIN_MESSAGE_MAP(GpuVideoDecodeAccelerator, msg) 90 IPC_BEGIN_MESSAGE_MAP(GpuVideoDecodeAccelerator, msg)
91 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Decode, OnDecode) 91 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Decode, OnDecode)
92 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_AssignGLESBuffers, 92 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_AssignPictureBuffers,
93 OnAssignGLESBuffers) 93 OnAssignPictureBuffers)
94 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_ReusePictureBuffer, 94 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_ReusePictureBuffer,
95 OnReusePictureBuffer) 95 OnReusePictureBuffer)
96 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Flush, OnFlush) 96 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Flush, OnFlush)
97 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Reset, OnReset) 97 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Reset, OnReset)
98 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Destroy, OnDestroy) 98 IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderMsg_Destroy, OnDestroy)
99 IPC_MESSAGE_UNHANDLED(handled = false) 99 IPC_MESSAGE_UNHANDLED(handled = false)
100 IPC_END_MESSAGE_MAP() 100 IPC_END_MESSAGE_MAP()
101 return handled; 101 return handled;
102 } 102 }
103 103
104 void GpuVideoDecodeAccelerator::OnChannelConnected(int32 peer_pid) { 104 void GpuVideoDecodeAccelerator::OnChannelConnected(int32 peer_pid) {
105 // TODO(vmr): Do we have to react on channel connections? 105 // TODO(vmr): Do we have to react on channel connections?
106 } 106 }
107 107
108 void GpuVideoDecodeAccelerator::OnChannelError() { 108 void GpuVideoDecodeAccelerator::OnChannelError() {
109 // TODO(vmr): Do we have to react on channel errors? 109 // TODO(vmr): Do we have to react on channel errors?
110 } 110 }
111 111
112 void GpuVideoDecodeAccelerator::ProvidePictureBuffers( 112 void GpuVideoDecodeAccelerator::ProvidePictureBuffers(
113 uint32 requested_num_of_buffers, 113 uint32 requested_num_of_buffers, const gfx::Size& dimensions) {
114 const gfx::Size& dimensions,
115 media::VideoDecodeAccelerator::MemoryType type) {
116 if (!Send(new AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers( 114 if (!Send(new AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers(
117 host_route_id_, requested_num_of_buffers, dimensions, type))) { 115 host_route_id_, requested_num_of_buffers, dimensions))) {
118 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers) " 116 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers) "
119 << "failed"; 117 << "failed";
120 } 118 }
121 } 119 }
122 120
123 void GpuVideoDecodeAccelerator::DismissPictureBuffer( 121 void GpuVideoDecodeAccelerator::DismissPictureBuffer(
124 int32 picture_buffer_id) { 122 int32 picture_buffer_id) {
125 // Notify client that picture buffer is now unused. 123 // Notify client that picture buffer is now unused.
126 if (!Send(new AcceleratedVideoDecoderHostMsg_DismissPictureBuffer( 124 if (!Send(new AcceleratedVideoDecoderHostMsg_DismissPictureBuffer(
127 host_route_id_, picture_buffer_id))) { 125 host_route_id_, picture_buffer_id))) {
128 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_DismissPictureBuffer) " 126 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_DismissPictureBuffer) "
129 << "failed"; 127 << "failed";
130 } 128 }
131 } 129 }
132 130
133 void GpuVideoDecodeAccelerator::PictureReady( 131 void GpuVideoDecodeAccelerator::PictureReady(
134 const media::Picture& picture) { 132 const media::Picture& picture) {
135 if (!Send(new AcceleratedVideoDecoderHostMsg_PictureReady( 133 if (!Send(new AcceleratedVideoDecoderHostMsg_PictureReady(
136 host_route_id_, 134 host_route_id_,
137 picture.picture_buffer_id(), 135 picture.picture_buffer_id(),
138 picture.bitstream_buffer_id(), 136 picture.bitstream_buffer_id()))) {
139 picture.visible_size(),
140 picture.decoded_size()))) {
141 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_PictureReady) failed"; 137 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_PictureReady) failed";
142 } 138 }
143 } 139 }
144 140
145 void GpuVideoDecodeAccelerator::NotifyEndOfStream() { 141 void GpuVideoDecodeAccelerator::NotifyEndOfStream() {
146 Send(new AcceleratedVideoDecoderHostMsg_EndOfStream(host_route_id_)); 142 Send(new AcceleratedVideoDecoderHostMsg_EndOfStream(host_route_id_));
147 } 143 }
148 144
149 void GpuVideoDecodeAccelerator::NotifyError( 145 void GpuVideoDecodeAccelerator::NotifyError(
150 media::VideoDecodeAccelerator::Error error) { 146 media::VideoDecodeAccelerator::Error error) {
(...skipping 19 matching lines...) Expand all
170 #endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) 166 #endif // defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL)
171 } 167 }
172 168
173 void GpuVideoDecodeAccelerator::OnDecode( 169 void GpuVideoDecodeAccelerator::OnDecode(
174 const gpu::ReadWriteTokens&, /* tokens */ 170 const gpu::ReadWriteTokens&, /* tokens */
175 base::SharedMemoryHandle handle, int32 id, int32 size) { 171 base::SharedMemoryHandle handle, int32 id, int32 size) {
176 DCHECK(video_decode_accelerator_.get()); 172 DCHECK(video_decode_accelerator_.get());
177 video_decode_accelerator_->Decode(media::BitstreamBuffer(id, handle, size)); 173 video_decode_accelerator_->Decode(media::BitstreamBuffer(id, handle, size));
178 } 174 }
179 175
180 void GpuVideoDecodeAccelerator::OnAssignGLESBuffers( 176 void GpuVideoDecodeAccelerator::OnAssignPictureBuffers(
181 const gpu::ReadWriteTokens& /* tokens */, 177 const gpu::ReadWriteTokens& /* tokens */,
182 const std::vector<int32>& buffer_ids, 178 const std::vector<int32>& buffer_ids,
183 const std::vector<uint32>& texture_ids, 179 const std::vector<uint32>& texture_ids,
184 const std::vector<gfx::Size>& sizes) { 180 const std::vector<gfx::Size>& sizes) {
185 DCHECK(stub_ && stub_->scheduler()); // Ensure already Initialize()'d. 181 DCHECK(stub_ && stub_->scheduler()); // Ensure already Initialize()'d.
186 gpu::gles2::GLES2Decoder* command_decoder = stub_->scheduler()->decoder(); 182 gpu::gles2::GLES2Decoder* command_decoder = stub_->scheduler()->decoder();
187 183
188 std::vector<media::GLESBuffer> buffers; 184 std::vector<media::PictureBuffer> buffers;
189 for (uint32 i = 0; i < buffer_ids.size(); ++i) { 185 for (uint32 i = 0; i < buffer_ids.size(); ++i) {
190 uint32 service_texture_id; 186 uint32 service_texture_id;
191 if (!command_decoder->GetServiceTextureId( 187 if (!command_decoder->GetServiceTextureId(
192 texture_ids[i], &service_texture_id)) { 188 texture_ids[i], &service_texture_id)) {
193 // TODO(vrk): Send an error for invalid GLES buffers. 189 // TODO(vrk): Send an error for invalid GLES buffers.
194 LOG(DFATAL) << "Failed to translate texture!"; 190 LOG(DFATAL) << "Failed to translate texture!";
195 return; 191 return;
196 } 192 }
197 buffers.push_back(media::GLESBuffer( 193 buffers.push_back(media::PictureBuffer(
198 buffer_ids[i], sizes[i], service_texture_id)); 194 buffer_ids[i], sizes[i], service_texture_id));
199 } 195 }
200 video_decode_accelerator_->AssignGLESBuffers(buffers); 196 video_decode_accelerator_->AssignPictureBuffers(buffers);
201 } 197 }
202 198
203 void GpuVideoDecodeAccelerator::OnReusePictureBuffer( 199 void GpuVideoDecodeAccelerator::OnReusePictureBuffer(
204 const gpu::ReadWriteTokens& /* tokens */, 200 const gpu::ReadWriteTokens& /* tokens */,
205 int32 picture_buffer_id) { 201 int32 picture_buffer_id) {
206 DCHECK(video_decode_accelerator_.get()); 202 DCHECK(video_decode_accelerator_.get());
207 video_decode_accelerator_->ReusePictureBuffer(picture_buffer_id); 203 video_decode_accelerator_->ReusePictureBuffer(picture_buffer_id);
208 } 204 }
209 205
210 void GpuVideoDecodeAccelerator::OnFlush( 206 void GpuVideoDecodeAccelerator::OnFlush(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 243
248 void GpuVideoDecodeAccelerator::NotifyResetDone() { 244 void GpuVideoDecodeAccelerator::NotifyResetDone() {
249 if (!Send(new AcceleratedVideoDecoderHostMsg_ResetDone(host_route_id_))) 245 if (!Send(new AcceleratedVideoDecoderHostMsg_ResetDone(host_route_id_)))
250 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_ResetDone) failed"; 246 LOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_ResetDone) failed";
251 } 247 }
252 248
253 bool GpuVideoDecodeAccelerator::Send(IPC::Message* message) { 249 bool GpuVideoDecodeAccelerator::Send(IPC::Message* message) {
254 DCHECK(sender_); 250 DCHECK(sender_);
255 return sender_->Send(message); 251 return sender_->Send(message);
256 } 252 }
OLDNEW
« no previous file with comments | « content/common/gpu/media/gpu_video_decode_accelerator.h ('k') | content/common/gpu/media/omx_video_decode_accelerator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698