| OLD | NEW | 
|    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 "content/common/gpu/media/android_video_decode_accelerator.h" |    5 #include "content/common/gpu/media/android_video_decode_accelerator.h" | 
|    6  |    6  | 
|    7 #include "base/bind.h" |    7 #include "base/bind.h" | 
|    8 #include "base/logging.h" |    8 #include "base/logging.h" | 
|    9 #include "base/message_loop/message_loop.h" |    9 #include "base/message_loop/message_loop.h" | 
|   10 #include "base/metrics/histogram.h" |   10 #include "base/metrics/histogram.h" | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   74   return base::TimeDelta::FromMicroseconds(0); |   74   return base::TimeDelta::FromMicroseconds(0); | 
|   75 } |   75 } | 
|   76  |   76  | 
|   77 AndroidVideoDecodeAccelerator::AndroidVideoDecodeAccelerator( |   77 AndroidVideoDecodeAccelerator::AndroidVideoDecodeAccelerator( | 
|   78     const base::WeakPtr<gpu::gles2::GLES2Decoder> decoder, |   78     const base::WeakPtr<gpu::gles2::GLES2Decoder> decoder, | 
|   79     const base::Callback<bool(void)>& make_context_current, |   79     const base::Callback<bool(void)>& make_context_current, | 
|   80     scoped_ptr<BackingStrategy> strategy) |   80     scoped_ptr<BackingStrategy> strategy) | 
|   81     : client_(NULL), |   81     : client_(NULL), | 
|   82       make_context_current_(make_context_current), |   82       make_context_current_(make_context_current), | 
|   83       codec_(media::kCodecH264), |   83       codec_(media::kCodecH264), | 
 |   84       is_encrypted_(false), | 
|   84       state_(NO_ERROR), |   85       state_(NO_ERROR), | 
|   85       picturebuffers_requested_(false), |   86       picturebuffers_requested_(false), | 
|   86       gl_decoder_(decoder), |   87       gl_decoder_(decoder), | 
|   87       strategy_(strategy.Pass()), |   88       strategy_(strategy.Pass()), | 
|   88       weak_this_factory_(this) {} |   89       weak_this_factory_(this) {} | 
|   89  |   90  | 
|   90 AndroidVideoDecodeAccelerator::~AndroidVideoDecodeAccelerator() { |   91 AndroidVideoDecodeAccelerator::~AndroidVideoDecodeAccelerator() { | 
|   91   DCHECK(thread_checker_.CalledOnValidThread()); |   92   DCHECK(thread_checker_.CalledOnValidThread()); | 
|   92 } |   93 } | 
|   93  |   94  | 
|   94 bool AndroidVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile, |   95 bool AndroidVideoDecodeAccelerator::Initialize(const Config& config, | 
|   95                                                Client* client) { |   96                                                Client* client) { | 
|   96   DCHECK(!media_codec_); |   97   DCHECK(!media_codec_); | 
|   97   DCHECK(thread_checker_.CalledOnValidThread()); |   98   DCHECK(thread_checker_.CalledOnValidThread()); | 
|   98   TRACE_EVENT0("media", "AVDA::Initialize"); |   99   TRACE_EVENT0("media", "AVDA::Initialize"); | 
|   99  |  100  | 
 |  101   DVLOG(1) << __FUNCTION__ << ": profile:" << config.profile | 
 |  102            << " is_encrypted:" << config.is_encrypted; | 
 |  103  | 
|  100   client_ = client; |  104   client_ = client; | 
|  101   codec_ = VideoCodecProfileToVideoCodec(profile); |  105   codec_ = VideoCodecProfileToVideoCodec(config.profile); | 
 |  106   is_encrypted_ = config.is_encrypted; | 
|  102  |  107  | 
|  103   bool profile_supported = codec_ == media::kCodecVP8; |  108   bool profile_supported = codec_ == media::kCodecVP8; | 
|  104 #if defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) |  109 #if defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) | 
|  105   profile_supported |= |  110   profile_supported |= | 
|  106       (codec_ == media::kCodecVP9 || codec_ == media::kCodecH264); |  111       (codec_ == media::kCodecVP9 || codec_ == media::kCodecH264); | 
|  107 #endif |  112 #endif | 
|  108  |  113  | 
|  109   if (!profile_supported) { |  114   if (!profile_supported) { | 
|  110     LOG(ERROR) << "Unsupported profile: " << profile; |  115     LOG(ERROR) << "Unsupported profile: " << config.profile; | 
|  111     return false; |  116     return false; | 
|  112   } |  117   } | 
|  113  |  118  | 
|  114   // Only use MediaCodec for VP8/9 if it's likely backed by hardware. |  119   // Only use MediaCodec for VP8/9 if it's likely backed by hardware. | 
|  115   if ((codec_ == media::kCodecVP8 || codec_ == media::kCodecVP9) && |  120   if ((codec_ == media::kCodecVP8 || codec_ == media::kCodecVP9) && | 
|  116       media::VideoCodecBridge::IsKnownUnaccelerated( |  121       media::VideoCodecBridge::IsKnownUnaccelerated( | 
|  117           codec_, media::MEDIA_CODEC_DECODER)) { |  122           codec_, media::MEDIA_CODEC_DECODER)) { | 
|  118     DVLOG(1) << "Initialization failed: " |  123     DVLOG(1) << "Initialization failed: " | 
|  119              << (codec_ == media::kCodecVP8 ? "vp8" : "vp9") |  124              << (codec_ == media::kCodecVP8 ? "vp8" : "vp9") | 
|  120              << " is not hardware accelerated"; |  125              << " is not hardware accelerated"; | 
| (...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  661     // software fallback for H264 on Android anyway. |  666     // software fallback for H264 on Android anyway. | 
|  662     profile.max_resolution.SetSize(3840, 2160); |  667     profile.max_resolution.SetSize(3840, 2160); | 
|  663     profiles.push_back(profile); |  668     profiles.push_back(profile); | 
|  664   } |  669   } | 
|  665 #endif |  670 #endif | 
|  666  |  671  | 
|  667   return profiles; |  672   return profiles; | 
|  668 } |  673 } | 
|  669  |  674  | 
|  670 }  // namespace content |  675 }  // namespace content | 
| OLD | NEW |