git-svn-id: http://webrtc.googlecode.com/svn/trunk@9 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
98
video_engine/main/test/WindowsTest/CaptureDevicePool.cpp
Normal file
98
video_engine/main/test/WindowsTest/CaptureDevicePool.cpp
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "CaptureDevicePool.h"
|
||||
#include "map_wrapper.h"
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include "critical_section_wrapper.h"
|
||||
#include "vie_file.h"
|
||||
|
||||
CaptureDevicePool::CaptureDevicePool(VideoEngine* videoEngine):
|
||||
_critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
||||
_vieCapture(ViECapture::GetInterface(videoEngine)),
|
||||
_vieFile(ViEFile::GetInterface(videoEngine))
|
||||
{
|
||||
}
|
||||
|
||||
CaptureDevicePool::~CaptureDevicePool(void)
|
||||
{
|
||||
assert(_deviceMap.Size()==0);
|
||||
_vieCapture->Release();
|
||||
_vieFile->Release();
|
||||
delete &_critSect;
|
||||
}
|
||||
|
||||
WebRtc_Word32 CaptureDevicePool::GetCaptureDevice(int& captureId, const char* uniqeDeviceName)
|
||||
{
|
||||
CriticalSectionScoped cs(_critSect);
|
||||
DeviceItem* device=NULL;
|
||||
|
||||
for(MapItem* item=_deviceMap.First();
|
||||
item!=NULL;
|
||||
item=_deviceMap.Next(item))
|
||||
{
|
||||
//Found the device?
|
||||
if(strcmp(uniqeDeviceName,(static_cast<DeviceItem*>( item->GetItem()))->uniqeDeviceName)==0)
|
||||
{
|
||||
device=static_cast<DeviceItem*>( item->GetItem());
|
||||
device->refCount++;
|
||||
captureId=device->captureId;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
device = new DeviceItem;
|
||||
strncpy(device->uniqeDeviceName,uniqeDeviceName,255);
|
||||
|
||||
|
||||
// Device does not exist. Create it.
|
||||
WebRtc_Word32 result=_vieCapture->AllocateCaptureDevice(device->uniqeDeviceName,strlen(device->uniqeDeviceName),device->captureId);
|
||||
if(result==0)
|
||||
{
|
||||
//CaptureCapability cap;
|
||||
/*cap.height=1080;
|
||||
cap.width=1920;
|
||||
cap.maxFPS=25;
|
||||
cap.interlaced=true;*/
|
||||
// result=_vieCapture->StartCapture(device->captureId,cap);
|
||||
result=_vieFile->SetCaptureDeviceImage(device->captureId,"captureDeviceImage.jpg");
|
||||
}
|
||||
captureId=device->captureId;
|
||||
_deviceMap.Insert(captureId,device);
|
||||
device->refCount++;
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
}
|
||||
WebRtc_Word32 CaptureDevicePool::ReturnCaptureDevice(int captureId)
|
||||
{
|
||||
CriticalSectionScoped cs(_critSect);
|
||||
|
||||
MapItem* mapItem=_deviceMap.Find(captureId);
|
||||
if(!mapItem)
|
||||
return -1;
|
||||
|
||||
DeviceItem* item=static_cast<DeviceItem*> (mapItem->GetItem());
|
||||
if(!item)
|
||||
return 0;
|
||||
item->refCount--;
|
||||
WebRtc_Word32 result=0;
|
||||
|
||||
if(item->refCount==0)
|
||||
{
|
||||
result=_vieCapture->ReleaseCaptureDevice(captureId);
|
||||
|
||||
_deviceMap.Erase(mapItem);
|
||||
delete item;
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user