| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <algorithm> | 5 #include <algorithm> |
| 6 | 6 |
| 7 #include <CoreVideo/CoreVideo.h> | 7 #include <CoreVideo/CoreVideo.h> |
| 8 #include <OpenGL/CGLIOSurface.h> | 8 #include <OpenGL/CGLIOSurface.h> |
| 9 #include <OpenGL/gl.h> | 9 #include <OpenGL/gl.h> |
| 10 | 10 |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 return lhs->bitstream_id > rhs->bitstream_id; | 284 return lhs->bitstream_id > rhs->bitstream_id; |
| 285 } | 285 } |
| 286 | 286 |
| 287 VTVideoDecodeAccelerator::VTVideoDecodeAccelerator( | 287 VTVideoDecodeAccelerator::VTVideoDecodeAccelerator( |
| 288 CGLContextObj cgl_context, | 288 CGLContextObj cgl_context, |
| 289 const base::Callback<bool(void)>& make_context_current) | 289 const base::Callback<bool(void)>& make_context_current) |
| 290 : cgl_context_(cgl_context), | 290 : cgl_context_(cgl_context), |
| 291 make_context_current_(make_context_current), | 291 make_context_current_(make_context_current), |
| 292 client_(nullptr), | 292 client_(nullptr), |
| 293 state_(STATE_DECODING), | 293 state_(STATE_DECODING), |
| 294 num_picture_buffers_(kNumPictureBuffers), |
| 294 format_(nullptr), | 295 format_(nullptr), |
| 295 session_(nullptr), | 296 session_(nullptr), |
| 296 last_sps_id_(-1), | 297 last_sps_id_(-1), |
| 297 last_pps_id_(-1), | 298 last_pps_id_(-1), |
| 298 gpu_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 299 gpu_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
| 299 decoder_thread_("VTDecoderThread"), | 300 decoder_thread_("VTDecoderThread"), |
| 300 weak_this_factory_(this) { | 301 weak_this_factory_(this) { |
| 301 DCHECK(!make_context_current_.is_null()); | 302 DCHECK(!make_context_current_.is_null()); |
| 302 callback_.decompressionOutputCallback = OutputThunk; | 303 callback_.decompressionOutputCallback = OutputThunk; |
| 303 callback_.decompressionOutputRefCon = this; | 304 callback_.decompressionOutputRefCon = this; |
| 304 weak_this_ = weak_this_factory_.GetWeakPtr(); | 305 weak_this_ = weak_this_factory_.GetWeakPtr(); |
| 305 } | 306 } |
| 306 | 307 |
| 307 VTVideoDecodeAccelerator::~VTVideoDecodeAccelerator() { | 308 VTVideoDecodeAccelerator::~VTVideoDecodeAccelerator() { |
| 308 } | 309 } |
| 309 | 310 |
| 310 bool VTVideoDecodeAccelerator::Initialize( | 311 bool VTVideoDecodeAccelerator::Initialize( |
| 311 media::VideoCodecProfile profile, | 312 media::VideoCodecProfile profile, |
| 313 uint32_t min_picture_count, |
| 312 Client* client) { | 314 Client* client) { |
| 313 DCHECK(gpu_thread_checker_.CalledOnValidThread()); | 315 DCHECK(gpu_thread_checker_.CalledOnValidThread()); |
| 314 client_ = client; | 316 client_ = client; |
| 315 | 317 |
| 318 num_picture_buffers_ = std::max(min_picture_count, |
| 319 static_cast<uint32_t>(kNumPictureBuffers)); |
| 320 |
| 316 if (!InitializeVideoToolbox()) | 321 if (!InitializeVideoToolbox()) |
| 317 return false; | 322 return false; |
| 318 | 323 |
| 319 bool profile_supported = false; | 324 bool profile_supported = false; |
| 320 for (const auto& supported_profile : kSupportedProfiles) { | 325 for (const auto& supported_profile : kSupportedProfiles) { |
| 321 if (profile == supported_profile) { | 326 if (profile == supported_profile) { |
| 322 profile_supported = true; | 327 profile_supported = true; |
| 323 break; | 328 break; |
| 324 } | 329 } |
| 325 } | 330 } |
| (...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 960 if (picture_size_ != frame.coded_size) { | 965 if (picture_size_ != frame.coded_size) { |
| 961 // Dismiss current pictures. | 966 // Dismiss current pictures. |
| 962 for (int32_t picture_id : assigned_picture_ids_) | 967 for (int32_t picture_id : assigned_picture_ids_) |
| 963 client_->DismissPictureBuffer(picture_id); | 968 client_->DismissPictureBuffer(picture_id); |
| 964 assigned_picture_ids_.clear(); | 969 assigned_picture_ids_.clear(); |
| 965 available_picture_ids_.clear(); | 970 available_picture_ids_.clear(); |
| 966 | 971 |
| 967 // Request new pictures. | 972 // Request new pictures. |
| 968 picture_size_ = frame.coded_size; | 973 picture_size_ = frame.coded_size; |
| 969 client_->ProvidePictureBuffers( | 974 client_->ProvidePictureBuffers( |
| 970 kNumPictureBuffers, coded_size_, GL_TEXTURE_RECTANGLE_ARB); | 975 num_picture_buffers_, coded_size_, GL_TEXTURE_RECTANGLE_ARB); |
| 971 return false; | 976 return false; |
| 972 } | 977 } |
| 973 if (!SendFrame(frame)) | 978 if (!SendFrame(frame)) |
| 974 return false; | 979 return false; |
| 975 } | 980 } |
| 976 | 981 |
| 977 return true; | 982 return true; |
| 978 } | 983 } |
| 979 | 984 |
| 980 bool VTVideoDecodeAccelerator::SendFrame(const Frame& frame) { | 985 bool VTVideoDecodeAccelerator::SendFrame(const Frame& frame) { |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 SupportedProfile profile; | 1095 SupportedProfile profile; |
| 1091 profile.profile = supported_profile; | 1096 profile.profile = supported_profile; |
| 1092 profile.min_resolution.SetSize(16, 16); | 1097 profile.min_resolution.SetSize(16, 16); |
| 1093 profile.max_resolution.SetSize(4096, 2160); | 1098 profile.max_resolution.SetSize(4096, 2160); |
| 1094 profiles.push_back(profile); | 1099 profiles.push_back(profile); |
| 1095 } | 1100 } |
| 1096 return profiles; | 1101 return profiles; |
| 1097 } | 1102 } |
| 1098 | 1103 |
| 1099 } // namespace content | 1104 } // namespace content |
| OLD | NEW |