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

Side by Side Diff: media/cdm/ppapi/cdm_wrapper.cc

Issue 26592003: Switch CdmWrapper to use uint32_t for size types per style guide. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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
« no previous file with comments | « no previous file | media/cdm/ppapi/clear_key_cdm.h » ('j') | media/cdm/ppapi/clear_key_cdm.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <cstring> 5 #include <cstring>
6 #include <map> 6 #include <map>
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 void ConfigureInputBuffer( 68 void ConfigureInputBuffer(
69 const pp::Buffer_Dev& encrypted_buffer, 69 const pp::Buffer_Dev& encrypted_buffer,
70 const PP_EncryptedBlockInfo& encrypted_block_info, 70 const PP_EncryptedBlockInfo& encrypted_block_info,
71 std::vector<cdm::SubsampleEntry>* subsamples, 71 std::vector<cdm::SubsampleEntry>* subsamples,
72 cdm::InputBuffer* input_buffer) { 72 cdm::InputBuffer* input_buffer) {
73 PP_DCHECK(subsamples); 73 PP_DCHECK(subsamples);
74 PP_DCHECK(!encrypted_buffer.is_null()); 74 PP_DCHECK(!encrypted_buffer.is_null());
75 75
76 input_buffer->data = static_cast<uint8_t*>(encrypted_buffer.data()); 76 input_buffer->data = static_cast<uint8_t*>(encrypted_buffer.data());
77 input_buffer->data_size = encrypted_block_info.data_size; 77 input_buffer->data_size = encrypted_block_info.data_size;
78 PP_DCHECK(encrypted_buffer.size() >= 78 PP_DCHECK(encrypted_buffer.size() >= input_buffer->data_size);
79 static_cast<uint32_t>(input_buffer->data_size));
80 input_buffer->data_offset = encrypted_block_info.data_offset; 79 input_buffer->data_offset = encrypted_block_info.data_offset;
81 80
82 PP_DCHECK(encrypted_block_info.key_id_size <= 81 PP_DCHECK(encrypted_block_info.key_id_size <=
83 arraysize(encrypted_block_info.key_id)); 82 arraysize(encrypted_block_info.key_id));
84 input_buffer->key_id_size = encrypted_block_info.key_id_size; 83 input_buffer->key_id_size = encrypted_block_info.key_id_size;
85 input_buffer->key_id = input_buffer->key_id_size > 0 ? 84 input_buffer->key_id = input_buffer->key_id_size > 0 ?
86 encrypted_block_info.key_id : NULL; 85 encrypted_block_info.key_id : NULL;
87 86
88 PP_DCHECK(encrypted_block_info.iv_size <= arraysize(encrypted_block_info.iv)); 87 PP_DCHECK(encrypted_block_info.iv_size <= arraysize(encrypted_block_info.iv));
89 input_buffer->iv_size = encrypted_block_info.iv_size; 88 input_buffer->iv_size = encrypted_block_info.iv_size;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 static PpbBuffer* Create(const pp::Buffer_Dev& buffer, uint32_t buffer_id) { 222 static PpbBuffer* Create(const pp::Buffer_Dev& buffer, uint32_t buffer_id) {
224 PP_DCHECK(buffer.data()); 223 PP_DCHECK(buffer.data());
225 PP_DCHECK(buffer.size()); 224 PP_DCHECK(buffer.size());
226 PP_DCHECK(buffer_id); 225 PP_DCHECK(buffer_id);
227 return new PpbBuffer(buffer, buffer_id); 226 return new PpbBuffer(buffer, buffer_id);
228 } 227 }
229 228
230 // cdm::Buffer implementation. 229 // cdm::Buffer implementation.
231 virtual void Destroy() OVERRIDE { delete this; } 230 virtual void Destroy() OVERRIDE { delete this; }
232 231
233 virtual int32_t Capacity() const OVERRIDE { return buffer_.size(); } 232 virtual uint32_t Capacity() const OVERRIDE { return buffer_.size(); }
234 233
235 virtual uint8_t* Data() OVERRIDE { 234 virtual uint8_t* Data() OVERRIDE {
236 return static_cast<uint8_t*>(buffer_.data()); 235 return static_cast<uint8_t*>(buffer_.data());
237 } 236 }
238 237
239 virtual void SetSize(int32_t size) OVERRIDE { 238 virtual void SetSize(uint32_t size) OVERRIDE {
240 PP_DCHECK(size >= 0);
241 PP_DCHECK(size < Capacity()); 239 PP_DCHECK(size < Capacity());
242 if (size < 0 || size > Capacity()) { 240 if (size > Capacity()) {
243 size_ = 0; 241 size_ = 0;
244 return; 242 return;
245 } 243 }
246 244
247 size_ = size; 245 size_ = size;
248 } 246 }
249 247
250 virtual int32_t Size() const OVERRIDE { return size_; } 248 virtual uint32_t Size() const OVERRIDE { return size_; }
251 249
252 pp::Buffer_Dev buffer_dev() const { return buffer_; } 250 pp::Buffer_Dev buffer_dev() const { return buffer_; }
253 251
254 uint32_t buffer_id() const { return buffer_id_; } 252 uint32_t buffer_id() const { return buffer_id_; }
255 253
256 private: 254 private:
257 PpbBuffer(pp::Buffer_Dev buffer, uint32_t buffer_id) 255 PpbBuffer(pp::Buffer_Dev buffer, uint32_t buffer_id)
258 : buffer_(buffer), 256 : buffer_(buffer),
259 buffer_id_(buffer_id), 257 buffer_id_(buffer_id),
260 size_(0) {} 258 size_(0) {}
261 virtual ~PpbBuffer() {} 259 virtual ~PpbBuffer() {}
262 260
263 pp::Buffer_Dev buffer_; 261 pp::Buffer_Dev buffer_;
264 uint32_t buffer_id_; 262 uint32_t buffer_id_;
265 int32_t size_; 263 uint32_t size_;
266 264
267 DISALLOW_COPY_AND_ASSIGN(PpbBuffer); 265 DISALLOW_COPY_AND_ASSIGN(PpbBuffer);
268 }; 266 };
269 267
270 class PpbBufferAllocator { 268 class PpbBufferAllocator {
271 public: 269 public:
272 explicit PpbBufferAllocator(pp::Instance* instance) 270 explicit PpbBufferAllocator(pp::Instance* instance)
273 : instance_(instance), 271 : instance_(instance),
274 next_buffer_id_(1) {} 272 next_buffer_id_(1) {}
275 ~PpbBufferAllocator() {} 273 ~PpbBufferAllocator() {}
276 274
277 cdm::Buffer* Allocate(int32_t capacity); 275 cdm::Buffer* Allocate(uint32_t capacity);
278 276
279 // Releases the buffer with |buffer_id|. A buffer can be recycled after 277 // Releases the buffer with |buffer_id|. A buffer can be recycled after
280 // it is released. 278 // it is released.
281 void Release(uint32_t buffer_id); 279 void Release(uint32_t buffer_id);
282 280
283 private: 281 private:
284 typedef std::map<uint32_t, pp::Buffer_Dev> AllocatedBufferMap; 282 typedef std::map<uint32_t, pp::Buffer_Dev> AllocatedBufferMap;
285 typedef std::multimap<int, std::pair<uint32_t, pp::Buffer_Dev> > 283 typedef std::multimap<uint32_t, std::pair<uint32_t, pp::Buffer_Dev> >
286 FreeBufferMap; 284 FreeBufferMap;
287 285
288 // Always pad new allocated buffer so that we don't need to reallocate 286 // Always pad new allocated buffer so that we don't need to reallocate
289 // buffers frequently if requested sizes fluctuate slightly. 287 // buffers frequently if requested sizes fluctuate slightly.
290 static const int kBufferPadding = 512; 288 static const uint32_t kBufferPadding = 512;
291 289
292 // Maximum number of free buffers we can keep when allocating new buffers. 290 // Maximum number of free buffers we can keep when allocating new buffers.
293 static const int kFreeLimit = 3; 291 static const uint32_t kFreeLimit = 3;
294 292
295 pp::Buffer_Dev AllocateNewBuffer(int capacity); 293 pp::Buffer_Dev AllocateNewBuffer(uint32_t capacity);
296 294
297 pp::Instance* const instance_; 295 pp::Instance* const instance_;
298 uint32_t next_buffer_id_; 296 uint32_t next_buffer_id_;
299 AllocatedBufferMap allocated_buffers_; 297 AllocatedBufferMap allocated_buffers_;
300 FreeBufferMap free_buffers_; 298 FreeBufferMap free_buffers_;
301 299
302 DISALLOW_COPY_AND_ASSIGN(PpbBufferAllocator); 300 DISALLOW_COPY_AND_ASSIGN(PpbBufferAllocator);
303 }; 301 };
304 302
305 cdm::Buffer* PpbBufferAllocator::Allocate(int32_t capacity) { 303 cdm::Buffer* PpbBufferAllocator::Allocate(uint32_t capacity) {
306 PP_DCHECK(IsMainThread()); 304 PP_DCHECK(IsMainThread());
307 305
308 if (capacity <= 0) 306 if (!capacity)
309 return NULL; 307 return NULL;
310 308
311 pp::Buffer_Dev buffer; 309 pp::Buffer_Dev buffer;
312 uint32_t buffer_id = 0; 310 uint32_t buffer_id = 0;
313 311
314 // Reuse a buffer in the free list if there is one that fits |capacity|. 312 // Reuse a buffer in the free list if there is one that fits |capacity|.
315 // Otherwise, create a new one. 313 // Otherwise, create a new one.
316 FreeBufferMap::iterator found = free_buffers_.lower_bound(capacity); 314 FreeBufferMap::iterator found = free_buffers_.lower_bound(capacity);
317 if (found == free_buffers_.end()) { 315 if (found == free_buffers_.end()) {
318 // TODO(xhwang): Report statistics about how many new buffers are allocated. 316 // TODO(xhwang): Report statistics about how many new buffers are allocated.
(...skipping 20 matching lines...) Expand all
339 if (found == allocated_buffers_.end()) 337 if (found == allocated_buffers_.end())
340 return; 338 return;
341 339
342 pp::Buffer_Dev& buffer = found->second; 340 pp::Buffer_Dev& buffer = found->second;
343 free_buffers_.insert( 341 free_buffers_.insert(
344 std::make_pair(buffer.size(), std::make_pair(buffer_id, buffer))); 342 std::make_pair(buffer.size(), std::make_pair(buffer_id, buffer)));
345 343
346 allocated_buffers_.erase(found); 344 allocated_buffers_.erase(found);
347 } 345 }
348 346
349 pp::Buffer_Dev PpbBufferAllocator::AllocateNewBuffer(int32_t capacity) { 347 pp::Buffer_Dev PpbBufferAllocator::AllocateNewBuffer(uint32_t capacity) {
350 // Destroy the smallest buffer before allocating a new bigger buffer if the 348 // Destroy the smallest buffer before allocating a new bigger buffer if the
351 // number of free buffers exceeds a limit. This mechanism helps avoid ending 349 // number of free buffers exceeds a limit. This mechanism helps avoid ending
352 // up with too many small buffers, which could happen if the size to be 350 // up with too many small buffers, which could happen if the size to be
353 // allocated keeps increasing. 351 // allocated keeps increasing.
354 if (free_buffers_.size() >= static_cast<uint32_t>(kFreeLimit)) 352 if (free_buffers_.size() >= kFreeLimit)
355 free_buffers_.erase(free_buffers_.begin()); 353 free_buffers_.erase(free_buffers_.begin());
356 354
357 // Creation of pp::Buffer_Dev is expensive! It involves synchronous IPC calls. 355 // Creation of pp::Buffer_Dev is expensive! It involves synchronous IPC calls.
358 // That's why we try to avoid AllocateNewBuffer() as much as we can. 356 // That's why we try to avoid AllocateNewBuffer() as much as we can.
359 return pp::Buffer_Dev(instance_, capacity + kBufferPadding); 357 return pp::Buffer_Dev(instance_, capacity + kBufferPadding);
360 } 358 }
361 359
362 class DecryptedBlockImpl : public cdm::DecryptedBlock { 360 class DecryptedBlockImpl : public cdm::DecryptedBlock {
363 public: 361 public:
364 DecryptedBlockImpl() : buffer_(NULL), timestamp_(0) {} 362 DecryptedBlockImpl() : buffer_(NULL), timestamp_(0) {}
(...skipping 28 matching lines...) Expand all
393 391
394 virtual void SetSize(cdm::Size size) OVERRIDE { size_ = size; } 392 virtual void SetSize(cdm::Size size) OVERRIDE { size_ = size; }
395 virtual cdm::Size Size() const OVERRIDE { return size_; } 393 virtual cdm::Size Size() const OVERRIDE { return size_; }
396 394
397 virtual void SetFrameBuffer(cdm::Buffer* frame_buffer) OVERRIDE { 395 virtual void SetFrameBuffer(cdm::Buffer* frame_buffer) OVERRIDE {
398 frame_buffer_ = static_cast<PpbBuffer*>(frame_buffer); 396 frame_buffer_ = static_cast<PpbBuffer*>(frame_buffer);
399 } 397 }
400 virtual cdm::Buffer* FrameBuffer() OVERRIDE { return frame_buffer_; } 398 virtual cdm::Buffer* FrameBuffer() OVERRIDE { return frame_buffer_; }
401 399
402 virtual void SetPlaneOffset(cdm::VideoFrame::VideoPlane plane, 400 virtual void SetPlaneOffset(cdm::VideoFrame::VideoPlane plane,
403 int32_t offset) OVERRIDE { 401 uint32_t offset) OVERRIDE {
404 PP_DCHECK(0 <= plane && plane < kMaxPlanes); 402 PP_DCHECK(plane < kMaxPlanes);
405 PP_DCHECK(offset >= 0);
406 plane_offsets_[plane] = offset; 403 plane_offsets_[plane] = offset;
407 } 404 }
408 virtual int32_t PlaneOffset(VideoPlane plane) OVERRIDE { 405 virtual uint32_t PlaneOffset(VideoPlane plane) OVERRIDE {
409 PP_DCHECK(0 <= plane && plane < kMaxPlanes); 406 PP_DCHECK(plane < kMaxPlanes);
410 return plane_offsets_[plane]; 407 return plane_offsets_[plane];
411 } 408 }
412 409
413 virtual void SetStride(VideoPlane plane, int32_t stride) OVERRIDE { 410 virtual void SetStride(VideoPlane plane, uint32_t stride) OVERRIDE {
414 PP_DCHECK(0 <= plane && plane < kMaxPlanes); 411 PP_DCHECK(plane < kMaxPlanes);
415 strides_[plane] = stride; 412 strides_[plane] = stride;
416 } 413 }
417 virtual int32_t Stride(VideoPlane plane) OVERRIDE { 414 virtual uint32_t Stride(VideoPlane plane) OVERRIDE {
418 PP_DCHECK(0 <= plane && plane < kMaxPlanes); 415 PP_DCHECK(plane < kMaxPlanes);
419 return strides_[plane]; 416 return strides_[plane];
420 } 417 }
421 418
422 virtual void SetTimestamp(int64_t timestamp) OVERRIDE { 419 virtual void SetTimestamp(int64_t timestamp) OVERRIDE {
423 timestamp_ = timestamp; 420 timestamp_ = timestamp;
424 } 421 }
425 virtual int64_t Timestamp() const OVERRIDE { return timestamp_; } 422 virtual int64_t Timestamp() const OVERRIDE { return timestamp_; }
426 423
427 private: 424 private:
428 // The video buffer format. 425 // The video buffer format.
429 cdm::VideoFormat format_; 426 cdm::VideoFormat format_;
430 427
431 // Width and height of the video frame. 428 // Width and height of the video frame.
432 cdm::Size size_; 429 cdm::Size size_;
433 430
434 // The video frame buffer. 431 // The video frame buffer.
435 PpbBuffer* frame_buffer_; 432 PpbBuffer* frame_buffer_;
436 433
437 // Array of data pointers to each plane in the video frame buffer. 434 // Array of data pointers to each plane in the video frame buffer.
438 int32_t plane_offsets_[kMaxPlanes]; 435 uint32_t plane_offsets_[kMaxPlanes];
439 436
440 // Array of strides for each plane, typically greater or equal to the width 437 // Array of strides for each plane, typically greater or equal to the width
441 // of the surface divided by the horizontal sampling period. Note that 438 // of the surface divided by the horizontal sampling period. Note that
442 // strides can be negative. 439 // strides can be negative.
443 int32_t strides_[kMaxPlanes]; 440 uint32_t strides_[kMaxPlanes];
444 441
445 // Presentation timestamp in microseconds. 442 // Presentation timestamp in microseconds.
446 int64_t timestamp_; 443 int64_t timestamp_;
447 444
448 DISALLOW_COPY_AND_ASSIGN(VideoFrameImpl); 445 DISALLOW_COPY_AND_ASSIGN(VideoFrameImpl);
449 }; 446 };
450 447
451 VideoFrameImpl::VideoFrameImpl() 448 VideoFrameImpl::VideoFrameImpl()
452 : format_(cdm::kUnknownVideoFormat), 449 : format_(cdm::kUnknownVideoFormat),
453 frame_buffer_(NULL), 450 frame_buffer_(NULL),
454 timestamp_(0) { 451 timestamp_(0) {
455 for (int32_t i = 0; i < kMaxPlanes; ++i) { 452 for (uint32_t i = 0; i < kMaxPlanes; ++i) {
456 plane_offsets_[i] = 0; 453 plane_offsets_[i] = 0;
457 strides_[i] = 0; 454 strides_[i] = 0;
458 } 455 }
459 } 456 }
460 457
461 VideoFrameImpl::~VideoFrameImpl() { 458 VideoFrameImpl::~VideoFrameImpl() {
462 if (frame_buffer_) 459 if (frame_buffer_)
463 frame_buffer_->Destroy(); 460 frame_buffer_->Destroy();
464 } 461 }
465 462
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 virtual void DeinitializeDecoder(PP_DecryptorStreamType decoder_type, 531 virtual void DeinitializeDecoder(PP_DecryptorStreamType decoder_type,
535 uint32_t request_id) OVERRIDE; 532 uint32_t request_id) OVERRIDE;
536 virtual void ResetDecoder(PP_DecryptorStreamType decoder_type, 533 virtual void ResetDecoder(PP_DecryptorStreamType decoder_type,
537 uint32_t request_id) OVERRIDE; 534 uint32_t request_id) OVERRIDE;
538 virtual void DecryptAndDecode( 535 virtual void DecryptAndDecode(
539 PP_DecryptorStreamType decoder_type, 536 PP_DecryptorStreamType decoder_type,
540 pp::Buffer_Dev encrypted_buffer, 537 pp::Buffer_Dev encrypted_buffer,
541 const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE; 538 const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE;
542 539
543 // cdm::Host_1 implementation. 540 // cdm::Host_1 implementation.
544 virtual cdm::Buffer* Allocate(int32_t capacity) OVERRIDE; 541 virtual cdm::Buffer* Allocate(uint32_t capacity) OVERRIDE;
545 virtual void SetTimer(int64_t delay_ms, void* context) OVERRIDE; 542 virtual void SetTimer(int64_t delay_ms, void* context) OVERRIDE;
546 virtual double GetCurrentWallTimeInSeconds() OVERRIDE; 543 virtual double GetCurrentWallTimeInSeconds() OVERRIDE;
547 virtual void SendKeyMessage( 544 virtual void SendKeyMessage(
548 const char* session_id, int32_t session_id_length, 545 const char* session_id, uint32_t session_id_length,
549 const char* message, int32_t message_length, 546 const char* message, uint32_t message_length,
550 const char* default_url, int32_t default_url_length) OVERRIDE; 547 const char* default_url, uint32_t default_url_length) OVERRIDE;
551 virtual void SendKeyError(const char* session_id, 548 virtual void SendKeyError(const char* session_id,
552 int32_t session_id_length, 549 uint32_t session_id_length,
553 cdm::MediaKeyError error_code, 550 cdm::MediaKeyError error_code,
554 uint32_t system_code) OVERRIDE; 551 uint32_t system_code) OVERRIDE;
555 virtual void GetPrivateData(int32_t* instance, 552 virtual void GetPrivateData(int32_t* instance,
556 GetPrivateInterface* get_interface) OVERRIDE; 553 GetPrivateInterface* get_interface) OVERRIDE;
557 554
558 // cdm::Host_2 implementation. 555 // cdm::Host_2 implementation.
559 virtual bool CanChallengePlatform() OVERRIDE; 556 virtual bool CanChallengePlatform() OVERRIDE;
560 virtual void SendPlatformChallenge( 557 virtual void SendPlatformChallenge(
561 const char* service_id, int32_t service_id_length, 558 const char* service_id, uint32_t service_id_length,
562 const char* challenge, int32_t challenge_length) OVERRIDE; 559 const char* challenge, uint32_t challenge_length) OVERRIDE;
563 virtual void EnableOutputProtection( 560 virtual void EnableOutputProtection(
564 uint32_t desired_protection_mask) OVERRIDE; 561 uint32_t desired_protection_mask) OVERRIDE;
565 virtual void QueryOutputProtectionStatus() OVERRIDE; 562 virtual void QueryOutputProtectionStatus() OVERRIDE;
566 563
567 private: 564 private:
568 struct SessionInfo { 565 struct SessionInfo {
569 SessionInfo(const std::string& key_system_in, 566 SessionInfo(const std::string& key_system_in,
570 const std::string& session_id_in) 567 const std::string& session_id_in)
571 : key_system(key_system_in), 568 : key_system(key_system_in),
572 session_id(session_id_in) {} 569 session_id(session_id_in) {}
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 void CdmWrapper::AddKey(const std::string& session_id, 746 void CdmWrapper::AddKey(const std::string& session_id,
750 pp::VarArrayBuffer key, 747 pp::VarArrayBuffer key,
751 pp::VarArrayBuffer init_data) { 748 pp::VarArrayBuffer init_data) {
752 PP_DCHECK(cdm_); // Initialize() should have succeeded. 749 PP_DCHECK(cdm_); // Initialize() should have succeeded.
753 if (!cdm_) { 750 if (!cdm_) {
754 SendUnknownKeyError(key_system_, session_id); 751 SendUnknownKeyError(key_system_, session_id);
755 return; 752 return;
756 } 753 }
757 754
758 const uint8_t* key_ptr = static_cast<const uint8_t*>(key.Map()); 755 const uint8_t* key_ptr = static_cast<const uint8_t*>(key.Map());
759 int key_size = key.ByteLength(); 756 uint32_t key_size = key.ByteLength();
760 const uint8_t* init_data_ptr = static_cast<const uint8_t*>(init_data.Map()); 757 const uint8_t* init_data_ptr = static_cast<const uint8_t*>(init_data.Map());
761 int init_data_size = init_data.ByteLength(); 758 uint32_t init_data_size = init_data.ByteLength();
762 PP_DCHECK(!init_data_ptr == !init_data_size); 759 PP_DCHECK(!init_data_ptr == !init_data_size);
763 760
764 if (!key_ptr || key_size <= 0) { 761 if (!key_ptr || !key_size) {
765 SendUnknownKeyError(key_system_, session_id); 762 SendUnknownKeyError(key_system_, session_id);
766 return; 763 return;
767 } 764 }
768 765
769 cdm::Status status = cdm_->AddKey(session_id.data(), session_id.size(), 766 cdm::Status status = cdm_->AddKey(session_id.data(), session_id.size(),
770 key_ptr, key_size, 767 key_ptr, key_size,
771 init_data_ptr, init_data_size); 768 init_data_ptr, init_data_size);
772 PP_DCHECK(status == cdm::kSuccess || status == cdm::kSessionError); 769 PP_DCHECK(status == cdm::kSuccess || status == cdm::kSessionError);
773 if (status != cdm::kSuccess) { 770 if (status != cdm::kSuccess) {
774 SendUnknownKeyError(key_system_, session_id); 771 SendUnknownKeyError(key_system_, session_id);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 cdm::Status status = cdm::kSessionError; 829 cdm::Status status = cdm::kSessionError;
833 if (cdm_) { 830 if (cdm_) {
834 cdm::AudioDecoderConfig cdm_decoder_config; 831 cdm::AudioDecoderConfig cdm_decoder_config;
835 cdm_decoder_config.codec = 832 cdm_decoder_config.codec =
836 PpAudioCodecToCdmAudioCodec(decoder_config.codec); 833 PpAudioCodecToCdmAudioCodec(decoder_config.codec);
837 cdm_decoder_config.channel_count = decoder_config.channel_count; 834 cdm_decoder_config.channel_count = decoder_config.channel_count;
838 cdm_decoder_config.bits_per_channel = decoder_config.bits_per_channel; 835 cdm_decoder_config.bits_per_channel = decoder_config.bits_per_channel;
839 cdm_decoder_config.samples_per_second = decoder_config.samples_per_second; 836 cdm_decoder_config.samples_per_second = decoder_config.samples_per_second;
840 cdm_decoder_config.extra_data = 837 cdm_decoder_config.extra_data =
841 static_cast<uint8_t*>(extra_data_buffer.data()); 838 static_cast<uint8_t*>(extra_data_buffer.data());
842 cdm_decoder_config.extra_data_size = 839 cdm_decoder_config.extra_data_size = extra_data_buffer.size();
843 static_cast<int32_t>(extra_data_buffer.size());
844 status = cdm_->InitializeAudioDecoder(cdm_decoder_config); 840 status = cdm_->InitializeAudioDecoder(cdm_decoder_config);
845 } 841 }
846 842
847 CallOnMain(callback_factory_.NewCallback( 843 CallOnMain(callback_factory_.NewCallback(
848 &CdmWrapper::DecoderInitializeDone, 844 &CdmWrapper::DecoderInitializeDone,
849 PP_DECRYPTORSTREAMTYPE_AUDIO, 845 PP_DECRYPTORSTREAMTYPE_AUDIO,
850 decoder_config.request_id, 846 decoder_config.request_id,
851 status == cdm::kSuccess)); 847 status == cdm::kSuccess));
852 } 848 }
853 849
854 void CdmWrapper::InitializeVideoDecoder( 850 void CdmWrapper::InitializeVideoDecoder(
855 const PP_VideoDecoderConfig& decoder_config, 851 const PP_VideoDecoderConfig& decoder_config,
856 pp::Buffer_Dev extra_data_buffer) { 852 pp::Buffer_Dev extra_data_buffer) {
857 PP_DCHECK(cdm_); // Initialize() should have succeeded. 853 PP_DCHECK(cdm_); // Initialize() should have succeeded.
858 854
859 cdm::Status status = cdm::kSessionError; 855 cdm::Status status = cdm::kSessionError;
860 if (cdm_) { 856 if (cdm_) {
861 cdm::VideoDecoderConfig cdm_decoder_config; 857 cdm::VideoDecoderConfig cdm_decoder_config;
862 cdm_decoder_config.codec = 858 cdm_decoder_config.codec =
863 PpVideoCodecToCdmVideoCodec(decoder_config.codec); 859 PpVideoCodecToCdmVideoCodec(decoder_config.codec);
864 cdm_decoder_config.profile = 860 cdm_decoder_config.profile =
865 PpVCProfileToCdmVCProfile(decoder_config.profile); 861 PpVCProfileToCdmVCProfile(decoder_config.profile);
866 cdm_decoder_config.format = 862 cdm_decoder_config.format =
867 PpDecryptedFrameFormatToCdmVideoFormat(decoder_config.format); 863 PpDecryptedFrameFormatToCdmVideoFormat(decoder_config.format);
868 cdm_decoder_config.coded_size.width = decoder_config.width; 864 cdm_decoder_config.coded_size.width = decoder_config.width;
869 cdm_decoder_config.coded_size.height = decoder_config.height; 865 cdm_decoder_config.coded_size.height = decoder_config.height;
870 cdm_decoder_config.extra_data = 866 cdm_decoder_config.extra_data =
871 static_cast<uint8_t*>(extra_data_buffer.data()); 867 static_cast<uint8_t*>(extra_data_buffer.data());
872 cdm_decoder_config.extra_data_size = 868 cdm_decoder_config.extra_data_size = extra_data_buffer.size();
873 static_cast<int32_t>(extra_data_buffer.size());
874 status = cdm_->InitializeVideoDecoder(cdm_decoder_config); 869 status = cdm_->InitializeVideoDecoder(cdm_decoder_config);
875 } 870 }
876 871
877 CallOnMain(callback_factory_.NewCallback( 872 CallOnMain(callback_factory_.NewCallback(
878 &CdmWrapper::DecoderInitializeDone, 873 &CdmWrapper::DecoderInitializeDone,
879 PP_DECRYPTORSTREAMTYPE_VIDEO, 874 PP_DECRYPTORSTREAMTYPE_VIDEO,
880 decoder_config.request_id, 875 decoder_config.request_id,
881 status == cdm::kSuccess)); 876 status == cdm::kSuccess));
882 } 877 }
883 878
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 encrypted_block_info.tracking_info)); 947 encrypted_block_info.tracking_info));
953 return; 948 return;
954 } 949 }
955 950
956 default: 951 default:
957 PP_NOTREACHED(); 952 PP_NOTREACHED();
958 return; 953 return;
959 } 954 }
960 } 955 }
961 956
962 cdm::Buffer* CdmWrapper::Allocate(int32_t capacity) { 957 cdm::Buffer* CdmWrapper::Allocate(uint32_t capacity) {
963 return allocator_.Allocate(capacity); 958 return allocator_.Allocate(capacity);
964 } 959 }
965 960
966 void CdmWrapper::SetTimer(int64_t delay_ms, void* context) { 961 void CdmWrapper::SetTimer(int64_t delay_ms, void* context) {
967 // NOTE: doesn't really need to run on the main thread; could just as well run 962 // NOTE: doesn't really need to run on the main thread; could just as well run
968 // on a helper thread if |cdm_| were thread-friendly and care was taken. We 963 // on a helper thread if |cdm_| were thread-friendly and care was taken. We
969 // only use CallOnMainThread() here to get delayed-execution behavior. 964 // only use CallOnMainThread() here to get delayed-execution behavior.
970 pp::Module::Get()->core()->CallOnMainThread( 965 pp::Module::Get()->core()->CallOnMainThread(
971 delay_ms, 966 delay_ms,
972 callback_factory_.NewCallback(&CdmWrapper::TimerExpired, context), 967 callback_factory_.NewCallback(&CdmWrapper::TimerExpired, context),
973 PP_OK); 968 PP_OK);
974 } 969 }
975 970
976 void CdmWrapper::TimerExpired(int32_t result, void* context) { 971 void CdmWrapper::TimerExpired(int32_t result, void* context) {
977 PP_DCHECK(result == PP_OK); 972 PP_DCHECK(result == PP_OK);
978 cdm_->TimerExpired(context); 973 cdm_->TimerExpired(context);
979 } 974 }
980 975
981 double CdmWrapper::GetCurrentWallTimeInSeconds() { 976 double CdmWrapper::GetCurrentWallTimeInSeconds() {
982 return pp::Module::Get()->core()->GetTime(); 977 return pp::Module::Get()->core()->GetTime();
983 } 978 }
984 979
985 void CdmWrapper::SendKeyMessage( 980 void CdmWrapper::SendKeyMessage(
986 const char* session_id, int32_t session_id_length, 981 const char* session_id, uint32_t session_id_length,
987 const char* message, int32_t message_length, 982 const char* message, uint32_t message_length,
988 const char* default_url, int32_t default_url_length) { 983 const char* default_url, uint32_t default_url_length) {
989 PP_DCHECK(!key_system_.empty()); 984 PP_DCHECK(!key_system_.empty());
990 PostOnMain(callback_factory_.NewCallback( 985 PostOnMain(callback_factory_.NewCallback(
991 &CdmWrapper::KeyMessage, 986 &CdmWrapper::KeyMessage,
992 SessionInfo(key_system_, 987 SessionInfo(key_system_,
993 std::string(session_id, session_id_length)), 988 std::string(session_id, session_id_length)),
994 std::vector<uint8>(message, message + message_length), 989 std::vector<uint8>(message, message + message_length),
995 std::string(default_url, default_url_length))); 990 std::string(default_url, default_url_length)));
996 } 991 }
997 992
998 void CdmWrapper::SendKeyError(const char* session_id, 993 void CdmWrapper::SendKeyError(const char* session_id,
999 int32_t session_id_length, 994 uint32_t session_id_length,
1000 cdm::MediaKeyError error_code, 995 cdm::MediaKeyError error_code,
1001 uint32_t system_code) { 996 uint32_t system_code) {
1002 SendKeyErrorInternal(key_system_, 997 SendKeyErrorInternal(key_system_,
1003 std::string(session_id, session_id_length), 998 std::string(session_id, session_id_length),
1004 error_code, 999 error_code,
1005 system_code); 1000 system_code);
1006 } 1001 }
1007 1002
1008 void CdmWrapper::GetPrivateData(int32_t* instance, 1003 void CdmWrapper::GetPrivateData(int32_t* instance,
1009 GetPrivateInterface* get_interface) { 1004 GetPrivateInterface* get_interface) {
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 bool CdmWrapper::IsValidVideoFrame(const LinkedVideoFrame& video_frame) { 1199 bool CdmWrapper::IsValidVideoFrame(const LinkedVideoFrame& video_frame) {
1205 if (!video_frame.get() || 1200 if (!video_frame.get() ||
1206 !video_frame->FrameBuffer() || 1201 !video_frame->FrameBuffer() ||
1207 (video_frame->Format() != cdm::kI420 && 1202 (video_frame->Format() != cdm::kI420 &&
1208 video_frame->Format() != cdm::kYv12)) { 1203 video_frame->Format() != cdm::kYv12)) {
1209 return false; 1204 return false;
1210 } 1205 }
1211 1206
1212 PpbBuffer* ppb_buffer = static_cast<PpbBuffer*>(video_frame->FrameBuffer()); 1207 PpbBuffer* ppb_buffer = static_cast<PpbBuffer*>(video_frame->FrameBuffer());
1213 1208
1214 for (int i = 0; i < cdm::VideoFrame::kMaxPlanes; ++i) { 1209 for (uint32_t i = 0; i < cdm::VideoFrame::kMaxPlanes; ++i) {
1215 int plane_height = (i == cdm::VideoFrame::kYPlane) ? 1210 int plane_height = (i == cdm::VideoFrame::kYPlane) ?
1216 video_frame->Size().height : (video_frame->Size().height + 1) / 2; 1211 video_frame->Size().height : (video_frame->Size().height + 1) / 2;
1217 cdm::VideoFrame::VideoPlane plane = 1212 cdm::VideoFrame::VideoPlane plane =
1218 static_cast<cdm::VideoFrame::VideoPlane>(i); 1213 static_cast<cdm::VideoFrame::VideoPlane>(i);
1219 if (ppb_buffer->Size() < video_frame->PlaneOffset(plane) + 1214 if (ppb_buffer->Size() < video_frame->PlaneOffset(plane) +
1220 plane_height * video_frame->Stride(plane)) { 1215 plane_height * video_frame->Stride(plane)) {
1221 return false; 1216 return false;
1222 } 1217 }
1223 } 1218 }
1224 1219
1225 return true; 1220 return true;
1226 } 1221 }
1227 1222
1228 bool CdmWrapper::CanChallengePlatform() { 1223 bool CdmWrapper::CanChallengePlatform() {
1229 #if defined(OS_CHROMEOS) 1224 #if defined(OS_CHROMEOS)
1230 return can_challenge_platform_; 1225 return can_challenge_platform_;
1231 #else 1226 #else
1232 return false; 1227 return false;
1233 #endif 1228 #endif
1234 } 1229 }
1235 1230
1236 void CdmWrapper::SendPlatformChallenge( 1231 void CdmWrapper::SendPlatformChallenge(
1237 const char* service_id, int32_t service_id_length, 1232 const char* service_id, uint32_t service_id_length,
1238 const char* challenge, int32_t challenge_length) { 1233 const char* challenge, uint32_t challenge_length) {
1239 #if defined(OS_CHROMEOS) 1234 #if defined(OS_CHROMEOS)
1240 PP_DCHECK(!challenge_in_progress_); 1235 PP_DCHECK(!challenge_in_progress_);
1241 1236
1242 // Ensure member variables set by the callback are in a clean state. 1237 // Ensure member variables set by the callback are in a clean state.
1243 signed_data_output_ = pp::Var(); 1238 signed_data_output_ = pp::Var();
1244 signed_data_signature_output_ = pp::Var(); 1239 signed_data_signature_output_ = pp::Var();
1245 platform_key_certificate_output_ = pp::Var(); 1240 platform_key_certificate_output_ = pp::Var();
1246 1241
1247 pp::VarArrayBuffer challenge_var(challenge_length); 1242 pp::VarArrayBuffer challenge_var(challenge_length);
1248 uint8_t* var_data = static_cast<uint8_t*>(challenge_var.Map()); 1243 uint8_t* var_data = static_cast<uint8_t*>(challenge_var.Map());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1316 return; 1311 return;
1317 } 1312 }
1318 1313
1319 pp::VarArrayBuffer signed_data_var(signed_data_output_); 1314 pp::VarArrayBuffer signed_data_var(signed_data_output_);
1320 pp::VarArrayBuffer signed_data_signature_var(signed_data_signature_output_); 1315 pp::VarArrayBuffer signed_data_signature_var(signed_data_signature_output_);
1321 std::string platform_key_certificate_string = 1316 std::string platform_key_certificate_string =
1322 platform_key_certificate_output_.AsString(); 1317 platform_key_certificate_output_.AsString();
1323 1318
1324 cdm::PlatformChallengeResponse response = { 1319 cdm::PlatformChallengeResponse response = {
1325 static_cast<uint8_t*>(signed_data_var.Map()), 1320 static_cast<uint8_t*>(signed_data_var.Map()),
1326 static_cast<int32_t>(signed_data_var.ByteLength()), 1321 signed_data_var.ByteLength(),
1327 1322
1328 static_cast<uint8_t*>(signed_data_signature_var.Map()), 1323 static_cast<uint8_t*>(signed_data_signature_var.Map()),
1329 static_cast<int32_t>(signed_data_signature_var.ByteLength()), 1324 signed_data_signature_var.ByteLength(),
1330 1325
1331 reinterpret_cast<const uint8_t*>(platform_key_certificate_string.c_str()), 1326 reinterpret_cast<const uint8_t*>(platform_key_certificate_string.c_str()),
1332 static_cast<int32_t>(platform_key_certificate_string.length()) 1327 static_cast<uint32_t>(platform_key_certificate_string.length())
1333 }; 1328 };
1334 cdm_->OnPlatformChallengeResponse(response); 1329 cdm_->OnPlatformChallengeResponse(response);
1335 1330
1336 signed_data_var.Unmap(); 1331 signed_data_var.Unmap();
1337 signed_data_signature_var.Unmap(); 1332 signed_data_signature_var.Unmap();
1338 } 1333 }
1339 1334
1340 void CdmWrapper::EnableProtectionDone(int32_t result) { 1335 void CdmWrapper::EnableProtectionDone(int32_t result) {
1341 // Does nothing since clients must call QueryOutputProtectionStatus() to 1336 // Does nothing since clients must call QueryOutputProtectionStatus() to
1342 // inspect the protection status on a regular basis. 1337 // inspect the protection status on a regular basis.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1393 } // namespace media 1388 } // namespace media
1394 1389
1395 namespace pp { 1390 namespace pp {
1396 1391
1397 // Factory function for your specialization of the Module object. 1392 // Factory function for your specialization of the Module object.
1398 Module* CreateModule() { 1393 Module* CreateModule() {
1399 return new media::CdmWrapperModule(); 1394 return new media::CdmWrapperModule();
1400 } 1395 }
1401 1396
1402 } // namespace pp 1397 } // namespace pp
OLDNEW
« no previous file with comments | « no previous file | media/cdm/ppapi/clear_key_cdm.h » ('j') | media/cdm/ppapi/clear_key_cdm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698