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

Side by Side Diff: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc

Issue 446693004: Add support for CDM_6. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: DEPS Created 6 years, 4 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 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 "media/cdm/ppapi/external_clear_key/clear_key_cdm.h" 5 #include "media/cdm/ppapi/external_clear_key/clear_key_cdm.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <sstream> 9 #include <sstream>
10 #include <string> 10 #include <string>
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 const int64 kMaxTimerDelayMs = 1 * kSecondsPerMinute * kMsPerSecond; 88 const int64 kMaxTimerDelayMs = 1 * kSecondsPerMinute * kMsPerSecond;
89 // Heart beat message header. If a key message starts with |kHeartBeatHeader|, 89 // Heart beat message header. If a key message starts with |kHeartBeatHeader|,
90 // it's a heart beat message. Otherwise, it's a key request. 90 // it's a heart beat message. Otherwise, it's a key request.
91 const char kHeartBeatHeader[] = "HEARTBEAT"; 91 const char kHeartBeatHeader[] = "HEARTBEAT";
92 // CDM file IO test result header. 92 // CDM file IO test result header.
93 const char kFileIOTestResultHeader[] = "FILEIOTESTRESULT"; 93 const char kFileIOTestResultHeader[] = "FILEIOTESTRESULT";
94 94
95 // Copies |input_buffer| into a media::DecoderBuffer. If the |input_buffer| is 95 // Copies |input_buffer| into a media::DecoderBuffer. If the |input_buffer| is
96 // empty, an empty (end-of-stream) media::DecoderBuffer is returned. 96 // empty, an empty (end-of-stream) media::DecoderBuffer is returned.
97 static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom( 97 static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom(
98 const cdm::InputBuffer& input_buffer) { 98 const cdm::InputBuffer_1& input_buffer) {
99 if (!input_buffer.data) { 99 if (!input_buffer.data) {
100 DCHECK(!input_buffer.data_size); 100 DCHECK(!input_buffer.data_size);
101 return media::DecoderBuffer::CreateEOSBuffer(); 101 return media::DecoderBuffer::CreateEOSBuffer();
102 } 102 }
103 103
104 // TODO(xhwang): Get rid of this copy. 104 // TODO(xhwang): Get rid of this copy.
105 scoped_refptr<media::DecoderBuffer> output_buffer = 105 scoped_refptr<media::DecoderBuffer> output_buffer =
106 media::DecoderBuffer::CopyFrom(input_buffer.data, input_buffer.data_size); 106 media::DecoderBuffer::CopyFrom(input_buffer.data, input_buffer.data_size);
107 107
108 std::vector<media::SubsampleEntry> subsamples; 108 std::vector<media::SubsampleEntry> subsamples;
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 374
375 static void CopyDecryptResults( 375 static void CopyDecryptResults(
376 media::Decryptor::Status* status_copy, 376 media::Decryptor::Status* status_copy,
377 scoped_refptr<media::DecoderBuffer>* buffer_copy, 377 scoped_refptr<media::DecoderBuffer>* buffer_copy,
378 media::Decryptor::Status status, 378 media::Decryptor::Status status,
379 const scoped_refptr<media::DecoderBuffer>& buffer) { 379 const scoped_refptr<media::DecoderBuffer>& buffer) {
380 *status_copy = status; 380 *status_copy = status;
381 *buffer_copy = buffer; 381 *buffer_copy = buffer;
382 } 382 }
383 383
384 cdm::Status ClearKeyCdm::Decrypt( 384 cdm::Status ClearKeyCdm::Decrypt(const cdm::InputBuffer_1& encrypted_buffer,
385 const cdm::InputBuffer& encrypted_buffer, 385 cdm::DecryptedBlock* decrypted_block) {
386 cdm::DecryptedBlock* decrypted_block) {
387 DVLOG(1) << "Decrypt()"; 386 DVLOG(1) << "Decrypt()";
388 DCHECK(encrypted_buffer.data); 387 DCHECK(encrypted_buffer.data);
389 388
390 scoped_refptr<media::DecoderBuffer> buffer; 389 scoped_refptr<media::DecoderBuffer> buffer;
391 cdm::Status status = DecryptToMediaDecoderBuffer(encrypted_buffer, &buffer); 390 cdm::Status status = DecryptToMediaDecoderBuffer(encrypted_buffer, &buffer);
392 391
393 if (status != cdm::kSuccess) 392 if (status != cdm::kSuccess)
394 return status; 393 return status;
395 394
396 DCHECK(buffer->data()); 395 DCHECK(buffer->data());
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 output_timestamp_base_in_microseconds_ = kNoTimestamp; 480 output_timestamp_base_in_microseconds_ = kNoTimestamp;
482 total_samples_generated_ = 0; 481 total_samples_generated_ = 0;
483 #endif 482 #endif
484 break; 483 break;
485 default: 484 default:
486 NOTREACHED() << "DeinitializeDecoder(): invalid cdm::StreamType"; 485 NOTREACHED() << "DeinitializeDecoder(): invalid cdm::StreamType";
487 } 486 }
488 } 487 }
489 488
490 cdm::Status ClearKeyCdm::DecryptAndDecodeFrame( 489 cdm::Status ClearKeyCdm::DecryptAndDecodeFrame(
491 const cdm::InputBuffer& encrypted_buffer, 490 const cdm::InputBuffer_1& encrypted_buffer,
492 cdm::VideoFrame* decoded_frame) { 491 cdm::VideoFrame* decoded_frame) {
493 DVLOG(1) << "DecryptAndDecodeFrame()"; 492 DVLOG(1) << "DecryptAndDecodeFrame()";
494 TRACE_EVENT0("media", "ClearKeyCdm::DecryptAndDecodeFrame"); 493 TRACE_EVENT0("media", "ClearKeyCdm::DecryptAndDecodeFrame");
495 494
496 scoped_refptr<media::DecoderBuffer> buffer; 495 scoped_refptr<media::DecoderBuffer> buffer;
497 cdm::Status status = DecryptToMediaDecoderBuffer(encrypted_buffer, &buffer); 496 cdm::Status status = DecryptToMediaDecoderBuffer(encrypted_buffer, &buffer);
498 497
499 if (status != cdm::kSuccess) 498 if (status != cdm::kSuccess)
500 return status; 499 return status;
501 500
502 const uint8_t* data = NULL; 501 const uint8_t* data = NULL;
503 int32_t size = 0; 502 int32_t size = 0;
504 int64_t timestamp = 0; 503 int64_t timestamp = 0;
505 if (!buffer->end_of_stream()) { 504 if (!buffer->end_of_stream()) {
506 data = buffer->data(); 505 data = buffer->data();
507 size = buffer->data_size(); 506 size = buffer->data_size();
508 timestamp = encrypted_buffer.timestamp; 507 timestamp = encrypted_buffer.timestamp;
509 } 508 }
510 509
511 return video_decoder_->DecodeFrame(data, size, timestamp, decoded_frame); 510 return video_decoder_->DecodeFrame(data, size, timestamp, decoded_frame);
512 } 511 }
513 512
514 cdm::Status ClearKeyCdm::DecryptAndDecodeSamples( 513 cdm::Status ClearKeyCdm::DecryptAndDecodeSamples(
515 const cdm::InputBuffer& encrypted_buffer, 514 const cdm::InputBuffer_1& encrypted_buffer,
516 cdm::AudioFrames* audio_frames) { 515 cdm::AudioFrames* audio_frames) {
517 DVLOG(1) << "DecryptAndDecodeSamples()"; 516 DVLOG(1) << "DecryptAndDecodeSamples()";
518 517
519 // Trigger a crash on purpose for testing purpose. 518 // Trigger a crash on purpose for testing purpose.
520 if (key_system_ == kExternalClearKeyCrashKeySystem) 519 if (key_system_ == kExternalClearKeyCrashKeySystem)
521 CHECK(false); 520 CHECK(false);
522 521
523 scoped_refptr<media::DecoderBuffer> buffer; 522 scoped_refptr<media::DecoderBuffer> buffer;
524 cdm::Status status = DecryptToMediaDecoderBuffer(encrypted_buffer, &buffer); 523 cdm::Status status = DecryptToMediaDecoderBuffer(encrypted_buffer, &buffer);
525 524
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 562
564 host_->SetTimer(timer_delay_ms_, &next_heartbeat_message_[0]); 563 host_->SetTimer(timer_delay_ms_, &next_heartbeat_message_[0]);
565 564
566 // Use a smaller timer delay at start-up to facilitate testing. Increase the 565 // Use a smaller timer delay at start-up to facilitate testing. Increase the
567 // timer delay up to a limit to avoid message spam. 566 // timer delay up to a limit to avoid message spam.
568 if (timer_delay_ms_ < kMaxTimerDelayMs) 567 if (timer_delay_ms_ < kMaxTimerDelayMs)
569 timer_delay_ms_ = std::min(2 * timer_delay_ms_, kMaxTimerDelayMs); 568 timer_delay_ms_ = std::min(2 * timer_delay_ms_, kMaxTimerDelayMs);
570 } 569 }
571 570
572 cdm::Status ClearKeyCdm::DecryptToMediaDecoderBuffer( 571 cdm::Status ClearKeyCdm::DecryptToMediaDecoderBuffer(
573 const cdm::InputBuffer& encrypted_buffer, 572 const cdm::InputBuffer_1& encrypted_buffer,
574 scoped_refptr<media::DecoderBuffer>* decrypted_buffer) { 573 scoped_refptr<media::DecoderBuffer>* decrypted_buffer) {
575 DCHECK(decrypted_buffer); 574 DCHECK(decrypted_buffer);
576 scoped_refptr<media::DecoderBuffer> buffer = 575 scoped_refptr<media::DecoderBuffer> buffer =
577 CopyDecoderBufferFrom(encrypted_buffer); 576 CopyDecoderBufferFrom(encrypted_buffer);
578 577
579 if (buffer->end_of_stream()) { 578 if (buffer->end_of_stream()) {
580 *decrypted_buffer = buffer; 579 *decrypted_buffer = buffer;
581 return cdm::kSuccess; 580 return cdm::kSuccess;
582 } 581 }
583 582
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 host_->OnSessionMessage(last_session_id_.data(), 790 host_->OnSessionMessage(last_session_id_.data(),
792 last_session_id_.length(), 791 last_session_id_.length(),
793 message.data(), 792 message.data(),
794 message.length(), 793 message.length(),
795 NULL, 794 NULL,
796 0); 795 0);
797 file_io_test_runner_.reset(); 796 file_io_test_runner_.reset();
798 } 797 }
799 798
800 } // namespace media 799 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698