| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/filters/gpu_video_decoder.h" | 5 #include "media/filters/gpu_video_decoder.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 #include <array> | 8 #include <array> | 
| 9 #include <utility> | 9 #include <utility> | 
| 10 | 10 | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 22 #include "build/build_config.h" | 22 #include "build/build_config.h" | 
| 23 #include "gpu/command_buffer/common/mailbox_holder.h" | 23 #include "gpu/command_buffer/common/mailbox_holder.h" | 
| 24 #include "media/base/bind_to_current_loop.h" | 24 #include "media/base/bind_to_current_loop.h" | 
| 25 #include "media/base/cdm_context.h" | 25 #include "media/base/cdm_context.h" | 
| 26 #include "media/base/decoder_buffer.h" | 26 #include "media/base/decoder_buffer.h" | 
| 27 #include "media/base/media_log.h" | 27 #include "media/base/media_log.h" | 
| 28 #include "media/base/media_switches.h" | 28 #include "media/base/media_switches.h" | 
| 29 #include "media/base/pipeline_status.h" | 29 #include "media/base/pipeline_status.h" | 
| 30 #include "media/base/surface_manager.h" | 30 #include "media/base/surface_manager.h" | 
| 31 #include "media/base/video_decoder_config.h" | 31 #include "media/base/video_decoder_config.h" | 
| 32 #include "media/media_features.h" |  | 
| 33 #include "media/renderers/gpu_video_accelerator_factories.h" | 32 #include "media/renderers/gpu_video_accelerator_factories.h" | 
| 34 #include "third_party/skia/include/core/SkBitmap.h" | 33 #include "third_party/skia/include/core/SkBitmap.h" | 
| 35 | 34 | 
| 36 #if BUILDFLAG(USE_PROPRIETARY_CODECS) | 35 #if defined(USE_PROPRIETARY_CODECS) | 
| 37 #include "media/formats/mp4/box_definitions.h" | 36 #include "media/formats/mp4/box_definitions.h" | 
| 38 #endif | 37 #endif | 
| 39 | 38 | 
| 40 #if defined(OS_ANDROID) | 39 #if defined(OS_ANDROID) | 
| 41 #include "base/android/build_info.h" | 40 #include "base/android/build_info.h" | 
| 42 #endif | 41 #endif | 
| 43 | 42 | 
| 44 namespace media { | 43 namespace media { | 
| 45 namespace { | 44 namespace { | 
| 46 | 45 | 
| 47 // Size of shared-memory segments we allocate.  Since we reuse them we let them | 46 // Size of shared-memory segments we allocate.  Since we reuse them we let them | 
| 48 // be on the beefy side. | 47 // be on the beefy side. | 
| 49 static const size_t kSharedMemorySegmentBytes = 100 << 10; | 48 static const size_t kSharedMemorySegmentBytes = 100 << 10; | 
| 50 | 49 | 
| 51 #if defined(OS_ANDROID) && BUILDFLAG(USE_PROPRIETARY_CODECS) | 50 #if defined(OS_ANDROID) && defined(USE_PROPRIETARY_CODECS) | 
| 52 // Extract the SPS and PPS lists from |extra_data|. Each SPS and PPS is prefixed | 51 // Extract the SPS and PPS lists from |extra_data|. Each SPS and PPS is prefixed | 
| 53 // with 0x0001, the Annex B framing bytes. The out parameters are not modified | 52 // with 0x0001, the Annex B framing bytes. The out parameters are not modified | 
| 54 // on failure. | 53 // on failure. | 
| 55 void ExtractSpsAndPps(const std::vector<uint8_t>& extra_data, | 54 void ExtractSpsAndPps(const std::vector<uint8_t>& extra_data, | 
| 56                       std::vector<uint8_t>* sps_out, | 55                       std::vector<uint8_t>* sps_out, | 
| 57                       std::vector<uint8_t>* pps_out) { | 56                       std::vector<uint8_t>* pps_out) { | 
| 58   if (extra_data.empty()) | 57   if (extra_data.empty()) | 
| 59     return; | 58     return; | 
| 60 | 59 | 
| 61   mp4::AVCDecoderConfigurationRecord record; | 60   mp4::AVCDecoderConfigurationRecord record; | 
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 356   DCHECK(!init_cb_.is_null()); | 355   DCHECK(!init_cb_.is_null()); | 
| 357 | 356 | 
| 358   VideoDecodeAccelerator::Config vda_config; | 357   VideoDecodeAccelerator::Config vda_config; | 
| 359   vda_config.profile = config_.profile(); | 358   vda_config.profile = config_.profile(); | 
| 360   vda_config.cdm_id = cdm_id_; | 359   vda_config.cdm_id = cdm_id_; | 
| 361   vda_config.surface_id = surface_id; | 360   vda_config.surface_id = surface_id; | 
| 362   vda_config.encryption_scheme = config_.encryption_scheme(); | 361   vda_config.encryption_scheme = config_.encryption_scheme(); | 
| 363   vda_config.is_deferred_initialization_allowed = true; | 362   vda_config.is_deferred_initialization_allowed = true; | 
| 364   vda_config.initial_expected_coded_size = config_.coded_size(); | 363   vda_config.initial_expected_coded_size = config_.coded_size(); | 
| 365 | 364 | 
| 366 #if defined(OS_ANDROID) && BUILDFLAG(USE_PROPRIETARY_CODECS) | 365 #if defined(OS_ANDROID) && defined(USE_PROPRIETARY_CODECS) | 
| 367   // We pass the SPS and PPS on Android because it lets us initialize | 366   // We pass the SPS and PPS on Android because it lets us initialize | 
| 368   // MediaCodec more reliably (http://crbug.com/649185). | 367   // MediaCodec more reliably (http://crbug.com/649185). | 
| 369   if (config_.codec() == kCodecH264) | 368   if (config_.codec() == kCodecH264) | 
| 370     ExtractSpsAndPps(config_.extra_data(), &vda_config.sps, &vda_config.pps); | 369     ExtractSpsAndPps(config_.extra_data(), &vda_config.sps, &vda_config.pps); | 
| 371 #endif | 370 #endif | 
| 372 | 371 | 
| 373   if (!vda_->Initialize(vda_config, this)) { | 372   if (!vda_->Initialize(vda_config, this)) { | 
| 374     DVLOG(1) << "VDA::Initialize failed."; | 373     DVLOG(1) << "VDA::Initialize failed."; | 
| 375     base::ResetAndReturn(&init_cb_).Run(false); | 374     base::ResetAndReturn(&init_cb_).Run(false); | 
| 376     return; | 375     return; | 
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 902   } | 901   } | 
| 903   return false; | 902   return false; | 
| 904 } | 903 } | 
| 905 | 904 | 
| 906 void GpuVideoDecoder::DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent() | 905 void GpuVideoDecoder::DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent() | 
| 907     const { | 906     const { | 
| 908   DCHECK(factories_->GetTaskRunner()->BelongsToCurrentThread()); | 907   DCHECK(factories_->GetTaskRunner()->BelongsToCurrentThread()); | 
| 909 } | 908 } | 
| 910 | 909 | 
| 911 }  // namespace media | 910 }  // namespace media | 
| OLD | NEW | 
|---|