Index: content/common/gpu/media/v4l2_video_decode_accelerator.cc |
diff --git a/content/common/gpu/media/v4l2_video_decode_accelerator.cc b/content/common/gpu/media/v4l2_video_decode_accelerator.cc |
index 186d92086e776d78da2ace497b82718bb0206e29..6dbbc4e7c56c676436dd0bcd16492f09e7d1fbad 100644 |
--- a/content/common/gpu/media/v4l2_video_decode_accelerator.cc |
+++ b/content/common/gpu/media/v4l2_video_decode_accelerator.cc |
@@ -447,46 +447,12 @@ bool V4L2VideoDecodeAccelerator::CanDecodeOnIOThread() { return true; } |
// static |
media::VideoDecodeAccelerator::SupportedProfiles |
V4L2VideoDecodeAccelerator::GetSupportedProfiles() { |
- SupportedProfiles profiles; |
scoped_refptr<V4L2Device> device = V4L2Device::Create(V4L2Device::kDecoder); |
if (!device) |
- return profiles; |
- |
- SupportedProfile profile; |
- profile.min_resolution.SetSize(16, 16); |
- // NOTE: additional autodetection logic may require updating input buffer size |
- // selection. |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kIgnoreResolutionLimitsForAcceleratedVideoDecode)) |
- profile.max_resolution.SetSize(4096, 2160); |
- else |
- profile.max_resolution.SetSize(1920, 1088); |
- |
- v4l2_fmtdesc fmtdesc; |
- memset(&fmtdesc, 0, sizeof(fmtdesc)); |
- fmtdesc.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; |
- for (; device->Ioctl(VIDIOC_ENUM_FMT, &fmtdesc) == 0; ++fmtdesc.index) { |
- switch (fmtdesc.pixelformat) { |
- case V4L2_PIX_FMT_H264: |
- for (uint32 media_profile = media::H264PROFILE_MIN; |
- media_profile <= media::H264PROFILE_MAX; ++media_profile) { |
- profile.profile = |
- static_cast<media::VideoCodecProfile>(media_profile); |
- profiles.push_back(profile); |
- } |
- break; |
- case V4L2_PIX_FMT_VP8: |
- profile.profile = media::VP8PROFILE_ANY; |
- profiles.push_back(profile); |
- break; |
- case V4L2_PIX_FMT_VP9: |
- profile.profile = media::VP9PROFILE_ANY; |
- profiles.push_back(profile); |
- break; |
- } |
- } |
+ return SupportedProfiles(); |
- return profiles; |
+ return device->GetSupportedDecodeProfiles(std::vector<uint32_t>( |
+ {V4L2_PIX_FMT_H264, V4L2_PIX_FMT_VP8, V4L2_PIX_FMT_VP9})); |
} |
void V4L2VideoDecodeAccelerator::DecodeTask( |
@@ -1799,8 +1765,9 @@ bool V4L2VideoDecodeAccelerator::SetupFormats() { |
} |
size_t input_size; |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kIgnoreResolutionLimitsForAcceleratedVideoDecode)) |
+ gfx::Size max_resolution = |
+ device_->GetMaxSupportedResolution(input_format_fourcc); |
+ if (max_resolution.width() > 1920 && max_resolution.height() > 1088) |
input_size = kInputBufferMaxSizeFor4k; |
else |
input_size = kInputBufferMaxSizeFor1080p; |