Index: content/common/gpu/media/video_encode_accelerator_unittest.cc |
diff --git a/content/common/gpu/media/video_encode_accelerator_unittest.cc b/content/common/gpu/media/video_encode_accelerator_unittest.cc |
index 37bb03036c05f14ae80fa123992eb06148fba268..2f4df292d2ce82d37342d3c9743fe436494cb0e0 100644 |
--- a/content/common/gpu/media/video_encode_accelerator_unittest.cc |
+++ b/content/common/gpu/media/video_encode_accelerator_unittest.cc |
@@ -27,10 +27,14 @@ |
#include "ui/ozone/public/ozone_platform.h" |
#endif |
-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
+#if defined(OS_CHROMEOS) |
+#if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC)) |
#include "content/common/gpu/media/v4l2_video_encode_accelerator.h" |
-#elif defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
+// defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC)) |
+#endif |
+#if defined(ARCH_CPU_X86_FAMILY) |
#include "content/common/gpu/media/vaapi_video_encode_accelerator.h" |
+#endif // defined(ARCH_CPU_X86_FAMILY) |
#else |
#error The VideoEncodeAcceleratorUnittest is not supported on this platform. |
#endif |
@@ -526,6 +530,9 @@ class VEAClient : public VideoEncodeAccelerator::Client { |
private: |
bool has_encoder() { return encoder_.get(); } |
+ scoped_ptr<media::VideoEncodeAccelerator> CreateV4L2VEA(); |
+ scoped_ptr<media::VideoEncodeAccelerator> CreateVaapiVEA(); |
+ |
void SetState(ClientState new_state); |
// Set current stream parameters to given |bitrate| at |framerate|. |
@@ -728,33 +735,57 @@ VEAClient::VEAClient(TestStream* test_stream, |
VEAClient::~VEAClient() { CHECK(!has_encoder()); } |
+scoped_ptr<media::VideoEncodeAccelerator> VEAClient::CreateV4L2VEA() { |
+ scoped_ptr<media::VideoEncodeAccelerator> encoder; |
+#if defined(OS_CHROMEOS) && (defined(ARCH_CPU_ARMEL) || \ |
+ (defined(USE_OZONE) && defined(USE_V4L2_CODEC))) |
+ scoped_ptr<V4L2Device> device = V4L2Device::Create(V4L2Device::kEncoder); |
+ if (device) |
+ encoder.reset(new V4L2VideoEncodeAccelerator(device.Pass())); |
+#endif |
+ return encoder.Pass(); |
+} |
+ |
+scoped_ptr<media::VideoEncodeAccelerator> VEAClient::CreateVaapiVEA() { |
+ scoped_ptr<media::VideoEncodeAccelerator> encoder; |
+#if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
+ encoder.reset(new VaapiVideoEncodeAccelerator()); |
+#endif |
+ return encoder.Pass(); |
+} |
+ |
void VEAClient::CreateEncoder() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
CHECK(!has_encoder()); |
-#if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) |
- scoped_ptr<V4L2Device> device = V4L2Device::Create(V4L2Device::kEncoder); |
- encoder_.reset(new V4L2VideoEncodeAccelerator(device.Pass())); |
-#elif defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
- encoder_.reset(new VaapiVideoEncodeAccelerator()); |
-#endif |
- |
- SetState(CS_ENCODER_SET); |
+ scoped_ptr<media::VideoEncodeAccelerator> encoders[] = { |
+ CreateV4L2VEA(), |
+ CreateVaapiVEA() |
+ }; |
+ size_t num_encoders = sizeof(encoders) / |
+ sizeof(scoped_ptr<media::VideoEncodeAccelerator>); |
DVLOG(1) << "Profile: " << test_stream_->requested_profile |
<< ", initial bitrate: " << requested_bitrate_; |
- if (!encoder_->Initialize(kInputFormat, |
- test_stream_->visible_size, |
- test_stream_->requested_profile, |
- requested_bitrate_, |
- this)) { |
- LOG(ERROR) << "VideoEncodeAccelerator::Initialize() failed"; |
- SetState(CS_ERROR); |
- return; |
+ |
+ for (size_t i = 0; i < num_encoders; ++i) { |
+ if (!encoders[i]) |
+ continue; |
+ encoder_ = encoders[i].Pass(); |
+ SetState(CS_ENCODER_SET); |
+ if (encoder_->Initialize(kInputFormat, |
+ test_stream_->visible_size, |
+ test_stream_->requested_profile, |
+ requested_bitrate_, |
+ this)) { |
+ SetStreamParameters(requested_bitrate_, requested_framerate_); |
+ SetState(CS_INITIALIZED); |
+ return; |
+ } |
} |
- SetStreamParameters(requested_bitrate_, requested_framerate_); |
- SetState(CS_INITIALIZED); |
+ LOG(ERROR) << "VideoEncodeAccelerator::Initialize() failed"; |
+ SetState(CS_ERROR); |
} |
void VEAClient::DestroyEncoder() { |