1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/libvietest/include/tb_capture_device.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 14281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/libvietest/include/tb_interfaces.h" 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTbCaptureDevice::TbCaptureDevice(TbInterfaces& Engine) : 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org captureId(-1), 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViE(Engine), 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org vcpm_(NULL) 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const unsigned int KMaxDeviceNameLength = 128; 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const unsigned int KMaxUniqueIdLength = 256; 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char deviceName[KMaxDeviceNameLength]; 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org memset(deviceName, 0, KMaxDeviceNameLength); 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char uniqueId[KMaxUniqueIdLength]; 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org memset(uniqueId, 0, KMaxUniqueIdLength); 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool captureDeviceSet = false; 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoCaptureModule::DeviceInfo* devInfo = 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoCaptureFactory::CreateDeviceInfo(0); 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (size_t captureIdx = 0; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org captureIdx < devInfo->NumberOfDevices(); 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org captureIdx++) 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, devInfo->GetDeviceName(captureIdx, deviceName, 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org KMaxDeviceNameLength, uniqueId, 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org KMaxUniqueIdLength)); 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org vcpm_ = webrtc::VideoCaptureFactory::Create( 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org captureIdx, uniqueId); 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vcpm_ == NULL) // Failed to open this device. Try next. 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org continue; 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org vcpm_->AddRef(); 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int error = ViE.capture->AllocateCaptureDevice(*vcpm_, captureId); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (error == 0) 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org captureDeviceSet = true; 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete devInfo; 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_TRUE(captureDeviceSet); 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!captureDeviceSet) { 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return; 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org device_name_ = deviceName; 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, ViE.capture->StartCapture(captureId)); 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTbCaptureDevice::~TbCaptureDevice(void) 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, ViE.capture->StopCapture(captureId)); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, ViE.capture->ReleaseCaptureDevice(captureId)); 69e293cde234169fcd129599efb0a47d2544367e96tommi@webrtc.org if (vcpm_) 70e293cde234169fcd129599efb0a47d2544367e96tommi@webrtc.org vcpm_->Release(); 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid TbCaptureDevice::ConnectTo(int videoChannel) 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, ViE.capture->ConnectCaptureDevice(captureId, videoChannel)); 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid TbCaptureDevice::Disconnect(int videoChannel) 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, ViE.capture->DisconnectCaptureDevice(videoChannel)); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstd::string TbCaptureDevice::device_name() const { 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return device_name_; 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 86