Index: content/common/gpu/media/v4l2_video_device.cc |
diff --git a/content/common/gpu/media/v4l2_video_device.cc b/content/common/gpu/media/v4l2_video_device.cc |
index dbd3d1ece09a463627b79407f459b196f9606ef6..92fc885a0692a956183b314acc74175ab1a98374 100644 |
--- a/content/common/gpu/media/v4l2_video_device.cc |
+++ b/content/common/gpu/media/v4l2_video_device.cc |
@@ -13,27 +13,30 @@ |
// TODO(posciak): remove this once V4L2 headers are updated. |
#define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') |
+#define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') |
+#define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') |
namespace content { |
-V4L2Device::~V4L2Device() {} |
+V4L2Device::~V4L2Device() { |
+} |
// static |
-scoped_ptr<V4L2Device> V4L2Device::Create(Type type) { |
+scoped_refptr<V4L2Device> V4L2Device::Create(Type type) { |
DVLOG(3) << __PRETTY_FUNCTION__; |
- scoped_ptr<GenericV4L2Device> generic_device(new GenericV4L2Device(type)); |
+ scoped_refptr<GenericV4L2Device> generic_device(new GenericV4L2Device(type)); |
if (generic_device->Initialize()) |
- return generic_device.Pass(); |
+ return generic_device; |
#if defined(ARCH_CPU_ARMEL) |
- scoped_ptr<TegraV4L2Device> tegra_device(new TegraV4L2Device(type)); |
+ scoped_refptr<TegraV4L2Device> tegra_device(new TegraV4L2Device(type)); |
if (tegra_device->Initialize()) |
- return tegra_device.Pass(); |
+ return tegra_device; |
#endif |
LOG(ERROR) << "Failed to create V4L2Device"; |
- return scoped_ptr<V4L2Device>(); |
+ return scoped_refptr<V4L2Device>(); |
} |
// static |
@@ -75,13 +78,20 @@ uint32 V4L2Device::VideoFrameFormatToV4L2PixFmt( |
// static |
uint32 V4L2Device::VideoCodecProfileToV4L2PixFmt( |
- media::VideoCodecProfile profile) { |
+ media::VideoCodecProfile profile, |
+ bool slice_based) { |
if (profile >= media::H264PROFILE_MIN && |
profile <= media::H264PROFILE_MAX) { |
- return V4L2_PIX_FMT_H264; |
+ if (slice_based) |
+ return V4L2_PIX_FMT_H264_SLICE; |
+ else |
+ return V4L2_PIX_FMT_H264; |
} else if (profile >= media::VP8PROFILE_MIN && |
profile <= media::VP8PROFILE_MAX) { |
- return V4L2_PIX_FMT_VP8; |
+ if (slice_based) |
+ return V4L2_PIX_FMT_VP8_FRAME; |
+ else |
+ return V4L2_PIX_FMT_VP8; |
} else if (profile >= media::VP9PROFILE_MIN && |
profile <= media::VP9PROFILE_MAX) { |
return V4L2_PIX_FMT_VP9; |