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

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

Issue 1645873002: Use ParamTraits for media::BitstreamBuffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 9 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_jpeg_decode_accelerator.h" 5 #include "content/common/gpu/media/gpu_jpeg_decode_accelerator.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 191
192 void OnDecodeOnIOThread( 192 void OnDecodeOnIOThread(
193 const int32_t* route_id, 193 const int32_t* route_id,
194 const AcceleratedJpegDecoderMsg_Decode_Params& params) { 194 const AcceleratedJpegDecoderMsg_Decode_Params& params) {
195 DCHECK(io_task_runner_->BelongsToCurrentThread()); 195 DCHECK(io_task_runner_->BelongsToCurrentThread());
196 DCHECK(route_id); 196 DCHECK(route_id);
197 TRACE_EVENT0("jpeg", "GpuJpegDecodeAccelerator::MessageFilter::OnDecode"); 197 TRACE_EVENT0("jpeg", "GpuJpegDecodeAccelerator::MessageFilter::OnDecode");
198 198
199 if (!VerifyDecodeParams(params)) { 199 if (!VerifyDecodeParams(params)) {
200 NotifyDecodeStatusOnIOThread( 200 NotifyDecodeStatusOnIOThread(
201 *route_id, params.input_buffer_id, 201 *route_id, params.input_buffer.id(),
202 media::JpegDecodeAccelerator::INVALID_ARGUMENT); 202 media::JpegDecodeAccelerator::INVALID_ARGUMENT);
203 if (base::SharedMemory::IsHandleValid(params.input_buffer_handle))
204 base::SharedMemory::CloseHandle(params.input_buffer_handle);
205 if (base::SharedMemory::IsHandleValid(params.output_video_frame_handle)) 203 if (base::SharedMemory::IsHandleValid(params.output_video_frame_handle))
206 base::SharedMemory::CloseHandle(params.output_video_frame_handle); 204 base::SharedMemory::CloseHandle(params.output_video_frame_handle);
207 return; 205 return;
208 } 206 }
209 207
210 // For handles in |params|, from now on, |params.output_video_frame_handle| 208 // For handles in |params|, from now on, |params.output_video_frame_handle|
211 // is taken cared by scoper. |params.input_buffer_handle| need to be closed 209 // is taken cared by scoper. |params.input_buffer.handle()| need to be
212 // manually for early exits. 210 // closed manually for early exits.
213 scoped_ptr<base::SharedMemory> output_shm( 211 scoped_ptr<base::SharedMemory> output_shm(
214 new base::SharedMemory(params.output_video_frame_handle, false)); 212 new base::SharedMemory(params.output_video_frame_handle, false));
215 if (!output_shm->Map(params.output_buffer_size)) { 213 if (!output_shm->Map(params.output_buffer_size)) {
216 LOG(ERROR) << "Could not map output shared memory for input buffer id " 214 LOG(ERROR) << "Could not map output shared memory for input buffer id "
217 << params.input_buffer_id; 215 << params.input_buffer.id();
218 NotifyDecodeStatusOnIOThread( 216 NotifyDecodeStatusOnIOThread(
219 *route_id, params.input_buffer_id, 217 *route_id, params.input_buffer.id(),
220 media::JpegDecodeAccelerator::PLATFORM_FAILURE); 218 media::JpegDecodeAccelerator::PLATFORM_FAILURE);
221 base::SharedMemory::CloseHandle(params.input_buffer_handle); 219 base::SharedMemory::CloseHandle(params.input_buffer.handle());
222 return; 220 return;
223 } 221 }
224 222
225 media::BitstreamBuffer input_buffer(params.input_buffer_id,
226 params.input_buffer_handle,
227 params.input_buffer_size);
228
229 uint8_t* shm_memory = static_cast<uint8_t*>(output_shm->memory()); 223 uint8_t* shm_memory = static_cast<uint8_t*>(output_shm->memory());
230 scoped_refptr<media::VideoFrame> frame = 224 scoped_refptr<media::VideoFrame> frame =
231 media::VideoFrame::WrapExternalSharedMemory( 225 media::VideoFrame::WrapExternalSharedMemory(
232 media::PIXEL_FORMAT_I420, // format 226 media::PIXEL_FORMAT_I420, // format
233 params.coded_size, // coded_size 227 params.coded_size, // coded_size
234 gfx::Rect(params.coded_size), // visible_rect 228 gfx::Rect(params.coded_size), // visible_rect
235 params.coded_size, // natural_size 229 params.coded_size, // natural_size
236 shm_memory, // data 230 shm_memory, // data
237 params.output_buffer_size, // data_size 231 params.output_buffer_size, // data_size
238 params.output_video_frame_handle, // handle 232 params.output_video_frame_handle, // handle
239 0, // data_offset 233 0, // data_offset
240 base::TimeDelta()); // timestamp 234 base::TimeDelta()); // timestamp
241 if (!frame.get()) { 235 if (!frame.get()) {
242 LOG(ERROR) << "Could not create VideoFrame for input buffer id " 236 LOG(ERROR) << "Could not create VideoFrame for input buffer id "
243 << params.input_buffer_id; 237 << params.input_buffer.id();
244 NotifyDecodeStatusOnIOThread( 238 NotifyDecodeStatusOnIOThread(
245 *route_id, params.input_buffer_id, 239 *route_id, params.input_buffer.id(),
246 media::JpegDecodeAccelerator::PLATFORM_FAILURE); 240 media::JpegDecodeAccelerator::PLATFORM_FAILURE);
247 base::SharedMemory::CloseHandle(params.input_buffer_handle); 241 base::SharedMemory::CloseHandle(params.input_buffer.handle());
248 return; 242 return;
249 } 243 }
250 frame->AddDestructionObserver( 244 frame->AddDestructionObserver(
251 base::Bind(DecodeFinished, base::Passed(&output_shm))); 245 base::Bind(DecodeFinished, base::Passed(&output_shm)));
252 246
253 DCHECK_GT(client_map_.count(*route_id), 0u); 247 DCHECK_GT(client_map_.count(*route_id), 0u);
254 Client* client = client_map_[*route_id]; 248 Client* client = client_map_[*route_id];
255 client->Decode(input_buffer, frame); 249 client->Decode(params.input_buffer, frame);
256 } 250 }
257 251
258 protected: 252 protected:
259 ~MessageFilter() override { 253 ~MessageFilter() override {
260 if (client_map_.empty()) 254 if (client_map_.empty())
261 return; 255 return;
262 256
263 if (child_task_runner_->BelongsToCurrentThread()) { 257 if (child_task_runner_->BelongsToCurrentThread()) {
264 STLDeleteValues(&client_map_); 258 STLDeleteValues(&client_map_);
265 } else { 259 } else {
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 for (const auto& create_jda_function : create_jda_fps) { 416 for (const auto& create_jda_function : create_jda_fps) {
423 scoped_ptr<media::JpegDecodeAccelerator> accelerator = 417 scoped_ptr<media::JpegDecodeAccelerator> accelerator =
424 (*create_jda_function)(base::ThreadTaskRunnerHandle::Get()); 418 (*create_jda_function)(base::ThreadTaskRunnerHandle::Get());
425 if (accelerator && accelerator->IsSupported()) 419 if (accelerator && accelerator->IsSupported())
426 return true; 420 return true;
427 } 421 }
428 return false; 422 return false;
429 } 423 }
430 424
431 } // namespace content 425 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698