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

Side by Side Diff: media/gpu/android_video_decode_accelerator.cc

Issue 2058113002: Add 'cbcs' encryption scheme support in Android media. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years 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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/gpu/android_video_decode_accelerator.h" 5 #include "media/gpu/android_video_decode_accelerator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 // We should never be here if a SurfaceView is required. 326 // We should never be here if a SurfaceView is required.
327 DCHECK_EQ(config_.surface_id, SurfaceManager::kNoSurfaceID); 327 DCHECK_EQ(config_.surface_id, SurfaceManager::kNoSurfaceID);
328 defer_surface_creation_ = true; 328 defer_surface_creation_ = true;
329 NotifyInitializationComplete(true); 329 NotifyInitializationComplete(true);
330 return true; 330 return true;
331 } 331 }
332 332
333 // We signaled that we support deferred initialization, so see if the client 333 // We signaled that we support deferred initialization, so see if the client
334 // does also. 334 // does also.
335 deferred_initialization_pending_ = config.is_deferred_initialization_allowed; 335 deferred_initialization_pending_ = config.is_deferred_initialization_allowed;
336 if (config_.is_encrypted && !deferred_initialization_pending_) { 336 if (config_.is_encrypted() && !deferred_initialization_pending_) {
337 DLOG(ERROR) << "Deferred initialization must be used for encrypted streams"; 337 DLOG(ERROR) << "Deferred initialization must be used for encrypted streams";
338 return false; 338 return false;
339 } 339 }
340 340
341 if (AVDACodecAllocator::Instance()->AllocateSurface(this, 341 if (AVDACodecAllocator::Instance()->AllocateSurface(this,
342 config_.surface_id)) { 342 config_.surface_id)) {
343 // We now own the surface, so finish initialization. 343 // We now own the surface, so finish initialization.
344 return InitializePictureBufferManager(); 344 return InitializePictureBufferManager();
345 } 345 }
346 346
(...skipping 20 matching lines...) Expand all
367 367
368 codec_config_->surface = 368 codec_config_->surface =
369 picture_buffer_manager_.Initialize(config_.surface_id); 369 picture_buffer_manager_.Initialize(config_.surface_id);
370 if (codec_config_->surface.IsEmpty()) 370 if (codec_config_->surface.IsEmpty())
371 return false; 371 return false;
372 372
373 if (!AVDACodecAllocator::Instance()->StartThread(this)) 373 if (!AVDACodecAllocator::Instance()->StartThread(this))
374 return false; 374 return false;
375 375
376 // If we are encrypted, then we aren't able to create the codec yet. 376 // If we are encrypted, then we aren't able to create the codec yet.
377 if (config_.is_encrypted) { 377 if (config_.is_encrypted()) {
378 InitializeCdm(); 378 InitializeCdm();
379 return true; 379 return true;
380 } 380 }
381 381
382 if (deferred_initialization_pending_ || defer_surface_creation_) { 382 if (deferred_initialization_pending_ || defer_surface_creation_) {
383 defer_surface_creation_ = false; 383 defer_surface_creation_ = false;
384 ConfigureMediaCodecAsynchronously(); 384 ConfigureMediaCodecAsynchronously();
385 return true; 385 return true;
386 } 386 }
387 387
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 const std::vector<SubsampleEntry>& subsamples = bitstream_buffer.subsamples(); 497 const std::vector<SubsampleEntry>& subsamples = bitstream_buffer.subsamples();
498 498
499 MediaCodecStatus status; 499 MediaCodecStatus status;
500 if (key_id.empty() || iv.empty()) { 500 if (key_id.empty() || iv.empty()) {
501 status = media_codec_->QueueInputBuffer(input_buf_index, memory, 501 status = media_codec_->QueueInputBuffer(input_buf_index, memory,
502 bitstream_buffer.size(), 502 bitstream_buffer.size(),
503 presentation_timestamp); 503 presentation_timestamp);
504 } else { 504 } else {
505 status = media_codec_->QueueSecureInputBuffer( 505 status = media_codec_->QueueSecureInputBuffer(
506 input_buf_index, memory, bitstream_buffer.size(), key_id, iv, 506 input_buf_index, memory, bitstream_buffer.size(), key_id, iv,
507 subsamples, presentation_timestamp); 507 subsamples, config_.encryption_scheme, presentation_timestamp);
508 } 508 }
509 509
510 DVLOG(2) << __func__ 510 DVLOG(2) << __func__
511 << ": Queue(Secure)InputBuffer: pts:" << presentation_timestamp 511 << ": Queue(Secure)InputBuffer: pts:" << presentation_timestamp
512 << " status:" << status; 512 << " status:" << status;
513 513
514 if (status == MEDIA_CODEC_NO_KEY) { 514 if (status == MEDIA_CODEC_NO_KEY) {
515 // Keep trying to enqueue the same input buffer. 515 // Keep trying to enqueue the same input buffer.
516 // The buffer is owned by us (not the MediaCodec) and is filled with data. 516 // The buffer is owned by us (not the MediaCodec) and is filled with data.
517 DVLOG(1) << "QueueSecureInputBuffer failed: NO_KEY"; 517 DVLOG(1) << "QueueSecureInputBuffer failed: NO_KEY";
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
1445 } 1445 }
1446 #endif 1446 #endif
1447 1447
1448 return capabilities; 1448 return capabilities;
1449 } 1449 }
1450 1450
1451 bool AndroidVideoDecodeAccelerator::IsMediaCodecSoftwareDecodingForbidden() 1451 bool AndroidVideoDecodeAccelerator::IsMediaCodecSoftwareDecodingForbidden()
1452 const { 1452 const {
1453 // Prevent MediaCodec from using its internal software decoders when we have 1453 // Prevent MediaCodec from using its internal software decoders when we have
1454 // more secure and up to date versions in the renderer process. 1454 // more secure and up to date versions in the renderer process.
1455 return !config_.is_encrypted && (codec_config_->codec == kCodecVP8 || 1455 return !config_.is_encrypted() && (codec_config_->codec == kCodecVP8 ||
1456 codec_config_->codec == kCodecVP9); 1456 codec_config_->codec == kCodecVP9);
1457 } 1457 }
1458 1458
1459 bool AndroidVideoDecodeAccelerator::UpdateSurface() { 1459 bool AndroidVideoDecodeAccelerator::UpdateSurface() {
1460 DCHECK(pending_surface_id_); 1460 DCHECK(pending_surface_id_);
1461 DCHECK_NE(config_.surface_id, pending_surface_id_.value()); 1461 DCHECK_NE(config_.surface_id, pending_surface_id_.value());
1462 DCHECK(config_.surface_id == SurfaceManager::kNoSurfaceID || 1462 DCHECK(config_.surface_id == SurfaceManager::kNoSurfaceID ||
1463 pending_surface_id_.value() == SurfaceManager::kNoSurfaceID); 1463 pending_surface_id_.value() == SurfaceManager::kNoSurfaceID);
1464 1464
1465 const int previous_surface_id = config_.surface_id; 1465 const int previous_surface_id = config_.surface_id;
1466 const int new_surface_id = pending_surface_id_.value(); 1466 const int new_surface_id = pending_surface_id_.value();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 AVDACodecAllocator::Instance()->DeallocateSurface(this, new_surface_id); 1510 AVDACodecAllocator::Instance()->DeallocateSurface(this, new_surface_id);
1511 } 1511 }
1512 1512
1513 // Regardless of whether we succeeded, we no longer own the previous surface. 1513 // Regardless of whether we succeeded, we no longer own the previous surface.
1514 AVDACodecAllocator::Instance()->DeallocateSurface(this, previous_surface_id); 1514 AVDACodecAllocator::Instance()->DeallocateSurface(this, previous_surface_id);
1515 1515
1516 return success; 1516 return success;
1517 } 1517 }
1518 1518
1519 } // namespace media 1519 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698