Chromium Code Reviews| 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 41b11e3064f3b7c65999bd72538e45c521b586d4..059aefa6607253d41ad8d22d7b0ef2b0e705f25a 100644 |
| --- a/content/common/gpu/media/v4l2_video_decode_accelerator.cc |
| +++ b/content/common/gpu/media/v4l2_video_decode_accelerator.cc |
| @@ -444,6 +444,47 @@ void V4L2VideoDecodeAccelerator::Destroy() { |
| bool V4L2VideoDecodeAccelerator::CanDecodeOnIOThread() { return true; } |
| +// static |
| +std::vector<media::VideoDecodeAccelerator::SupportedProfile> |
| +V4L2VideoDecodeAccelerator::GetSupportedProfiles() { |
| + std::vector<SupportedProfile> 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: |
| + profile.profile = media::H264PROFILE_MAIN; |
|
Pawel Osciak
2015/03/26 08:36:40
More H264 profiles needed here as well.
henryhsu_tw
2015/03/26 09:38:34
Done.
|
| + 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 profiles; |
| +} |
| + |
| void V4L2VideoDecodeAccelerator::DecodeTask( |
| const media::BitstreamBuffer& bitstream_buffer) { |
| DVLOG(3) << "DecodeTask(): input_id=" << bitstream_buffer.id(); |