Chromium Code Reviews| Index: content/common/gpu/media/android_video_decode_accelerator.cc |
| diff --git a/content/common/gpu/media/android_video_decode_accelerator.cc b/content/common/gpu/media/android_video_decode_accelerator.cc |
| index 8fbdeb147c987510e6b48a7b7844cab15b78cd82..f9cb1ebd3b48da9958dcff82428d91bdf8b674c1 100644 |
| --- a/content/common/gpu/media/android_video_decode_accelerator.cc |
| +++ b/content/common/gpu/media/android_video_decode_accelerator.cc |
| @@ -19,6 +19,12 @@ |
| namespace content { |
| +// Limit default max video codec size for Android to avoid |
| +// HW codec initialization failure for resolution higher than 720p. |
| +// Default values are from Libjingle "jsepsessiondescription.cc". |
| +const int kMaxDecodeFrameWidth = 1280; |
|
wuchengli
2014/12/19 03:35:17
Why this? Originally android VDA doesn't have this
|
| +const int kMaxDecodeFrameHeight = 720; |
| + |
| // Helper macros for dealing with failure. If |result| evaluates false, emit |
| // |log| to ERROR, register |error| with the decoder, and return. |
| #define RETURN_ON_FAILURE(result, log, error) \ |
| @@ -82,6 +88,35 @@ AndroidVideoDecodeAccelerator::~AndroidVideoDecodeAccelerator() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| } |
| +// static |
| +std::vector<media::VideoDecodeAccelerator::SupportedProfile> |
| +AndroidVideoDecodeAccelerator::GetSupportedProfiles() { |
|
wuchengli
2014/12/19 11:21:57
As discussed, it becomes a huge change to support
|
| + std::vector<SupportedProfile> profiles; |
| + const struct { |
| + const media::VideoCodec codec; |
| + const media::VideoCodecProfile profile; |
| + } kSupportedCodecs[] = { |
| + { media::kCodecVP8, media::VP8PROFILE_ANY }, |
|
wuchengli
2014/12/19 03:35:17
See line 127. Only VP8 is supported. Please combin
|
| + { media::kCodecH264, media::H264PROFILE_BASELINE }, |
| + { media::kCodecH264, media::H264PROFILE_MAIN } |
| + }; |
| + |
| + SupportedProfile profile; |
| + // It would be nice if MediaCodec exposes the maximum capabilities of |
| + // the decoder. Hard-code some reasonable defaults as workaround. |
| + profile.max_resolution.SetSize(kMaxDecodeFrameWidth, kMaxDecodeFrameHeight); |
| + profile.min_resolution.SetSize(1, 1); |
| + for (const auto& supported_codec : kSupportedCodecs) { |
| + if (VideoCodecBridge::IsKnownUnaccelerated(supported_codec.codec, |
| + media::MEDIA_CODEC_ENCODER)) { |
|
wuchengli
2014/12/19 03:35:18
This should be decoder. You need to test this on a
|
| + continue; |
| + } |
| + profile.profile = supported_codec.profile; |
| + profiles.push_back(profile); |
| + } |
| + return profiles; |
| +} |
| + |
| bool AndroidVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile, |
| Client* client) { |
| DCHECK(!media_codec_); |