AVT相机arm版本SDK
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
PROJECT_NAME = LoadSaveSettings
|
||||
|
||||
PROJECT_DIR = ../..
|
||||
EXAMPLES_DIR = $(PROJECT_DIR)/..
|
||||
VIMBASDK_DIR = $(EXAMPLES_DIR)/../..
|
||||
MAKE_INCLUDE_DIR = $(CURDIR)/$(EXAMPLES_DIR)/Build/Make
|
||||
|
||||
include $(MAKE_INCLUDE_DIR)/Common.mk
|
||||
|
||||
CONFIG_DIR = $(ARCH)_$(WORDSIZE)bit
|
||||
BIN_FILE = $(PROJECT_NAME)
|
||||
BIN_DIR = binary/$(CONFIG_DIR)
|
||||
OBJ_DIR = object/$(CONFIG_DIR)
|
||||
BIN_PATH = $(BIN_DIR)/$(BIN_FILE)
|
||||
|
||||
all: $(BIN_PATH)
|
||||
|
||||
include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
|
||||
include $(MAKE_INCLUDE_DIR)/tinyxml.mk
|
||||
|
||||
SOURCE_DIR = $(PROJECT_DIR)/Source
|
||||
INCLUDE_DIRS = -I$(SOURCE_DIR) \
|
||||
-I$(EXAMPLES_DIR) \
|
||||
|
||||
LIBS = $(VIMBACPP_LIBS) \
|
||||
$(TINYXML_LIBS)
|
||||
|
||||
DEFINES =
|
||||
|
||||
CFLAGS = $(COMMON_CFLAGS) \
|
||||
$(VIMBACPP_CFLAGS) \
|
||||
$(TINYXML_CFLAGS)
|
||||
|
||||
OBJ_FILES = $(OBJ_DIR)/program.o
|
||||
|
||||
DEPENDENCIES = VimbaCPP \
|
||||
tinyxml
|
||||
|
||||
$(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(OBJ_DIR)
|
||||
$(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN_PATH): $(DEPENDENCIES) $(OBJ_FILES) $(BIN_DIR)
|
||||
$(CXX) $(ARCH_CFLAGS) -o $(BIN_PATH) $(OBJ_FILES) $(LIBS) -Wl,-rpath,'$$ORIGIN'
|
||||
|
||||
clean:
|
||||
$(RM) binary -r -f
|
||||
$(RM) object -r -f
|
||||
|
||||
$(OBJ_DIR):
|
||||
$(MKDIR) -p $(OBJ_DIR)
|
||||
|
||||
$(BIN_DIR):
|
||||
$(MKDIR) -p $(BIN_DIR)
|
||||
472
Vimba_6_0/VimbaCPP/Examples/LoadSaveSettings/Source/program.cpp
Normal file
472
Vimba_6_0/VimbaCPP/Examples/LoadSaveSettings/Source/program.cpp
Normal file
@@ -0,0 +1,472 @@
|
||||
/*=============================================================================
|
||||
Copyright (C) 2016 Allied Vision Technologies. All Rights Reserved.
|
||||
|
||||
Redistribution of this file, in original or modified form, without
|
||||
prior written consent of Allied Vision Technologies is prohibited.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
File: program.cpp
|
||||
|
||||
Description: LoadSaveSettings example of VimbaCPP.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
=============================================================================*/
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <VimbaCPP/Include/VimbaCPP.h>
|
||||
|
||||
int main( int argc, char* argv[] )
|
||||
{
|
||||
using namespace AVT::VmbAPI;
|
||||
|
||||
VmbErrorType err = VmbErrorSuccess;
|
||||
std::stringstream ss;
|
||||
bool apiFlag = false;
|
||||
bool cameraFlag = false;
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << "////////////////////////////////////////////" << std::endl;
|
||||
std::cout << "/// Vimba API Load/Save Settings Example ///" << std::endl;
|
||||
std::cout << "////////////////////////////////////////////" << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
// create camera pointer
|
||||
// get VimbaCPP instance singleton
|
||||
CameraPtr pCam;
|
||||
VimbaSystem &sys = VimbaSystem::GetInstance();
|
||||
|
||||
try
|
||||
{
|
||||
// start Vimba API
|
||||
err = sys.Startup();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not start Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
apiFlag = true;
|
||||
std::cout << "--> VimbaCPP has been started" << std::endl;
|
||||
|
||||
// get connected cameras from VimbaCPP
|
||||
CameraPtrVector pCameras;
|
||||
err = sys.GetCameras( pCameras );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not get connected cameras [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
// select first camera in list
|
||||
pCam = pCameras[0];
|
||||
|
||||
// open camera
|
||||
err = pCam->Open( VmbAccessModeFull );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not open camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
// get camera id
|
||||
std::string cameraId;
|
||||
err = pCam->GetID( cameraId );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not get camera id [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
cameraFlag = true;
|
||||
ss.str( "" );
|
||||
ss << "--> Camera with id '" << cameraId << "' has been opened";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
// create xml file name
|
||||
ss.str( "" );
|
||||
ss << cameraId << ".xml";
|
||||
std::string xmlFile = ss.str();
|
||||
|
||||
// -------------------------------------------------------------------------------------
|
||||
// setup load/save settings behaviour:
|
||||
// there are three different ways in VimbaCPP to setup the behaviour for
|
||||
// loading and saving feature values with load/save settings implementation.
|
||||
// SaveCameraSettings() and LoadCameraSettings() can be called either with
|
||||
// an created struct of type 'VmbFeaturePersistSettings_t' or not. The third
|
||||
// alternative is to call LoadSaveSettingsSetup() beforehand and provide the
|
||||
// same parameters as it will be done by the struct.
|
||||
//
|
||||
// (1) default usage:
|
||||
// pCam->SaveCameraSettings( xmlFile );
|
||||
// pCam->LoadCameraSettings( xmlFile );
|
||||
//
|
||||
// (2) usage with settings struct:
|
||||
// VmbFeaturePersistSettings_t settingsStruct;
|
||||
// settingsStruct.loggingLevel = 4; // set logging level (0:info only, 1: with errors, 2: with warnings, 3: with debug, 4: with traces)
|
||||
// settingsStruct.maxIterations = 5; // since its difficult to catch all feature dependencies during loading multiple
|
||||
// iterations are used (compare desired value with camera value and write it to camera)
|
||||
// settingsStruct.persistType = VmbFeaturePersistNoLUT; // set which features shall be persisted (saved to XML):
|
||||
// VmbFeaturePersistAll: all features shall be persisted (including LUTs).
|
||||
// VmbFeaturePersistStreamable: only streamable features shall be persisted.
|
||||
// VmbFeaturePersistNoLUT: all features shall be persisted except for LUT,
|
||||
// which is the recommended setting, because it might be very time consuming.
|
||||
// pCam->SaveCameraSettings( xmlFile, &settingsStruct );
|
||||
// pCam->LoadCameraSettings( xmlFile, &settingsStruct );
|
||||
//
|
||||
// (3) usage with setup method:
|
||||
// pCam->LoadSaveSettingsSetup( VmbFeaturePersistNoLUT, 5, 4 );
|
||||
// pCam->SaveCameraSettings( xmlFile );
|
||||
// pCam->LoadCameraSettings( xmlFile );
|
||||
// -------------------------------------------------------------------------------------
|
||||
|
||||
// call VimbaCPP method for saving all feature values
|
||||
err = pCam->SaveCameraSettings( xmlFile );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not save camera settings to file '" << xmlFile << "' [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
cameraFlag = false;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
ss.str( "" );
|
||||
ss << "--> Feature values have been saved to '" << xmlFile << "'";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
// get feature selector for user set
|
||||
FeaturePtr feature;
|
||||
err = pCam->GetFeatureByName( "UserSetSelector", feature );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not get feature 'UserSetSelector' [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
cameraFlag = false;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
// set value of selector to 'Default'
|
||||
err = feature->SetValue( "Default" );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not set value of feature 'UserSetSelector' [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
cameraFlag = false;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
// get feature command 'UserSetLoad'
|
||||
err = pCam->GetFeatureByName( "UserSetLoad", feature );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not get feature 'UserSetLoad' [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
cameraFlag = false;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
// load selected user set
|
||||
err = feature->RunCommand();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not run command 'UserSetLoad' [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
cameraFlag = false;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
std::cout << "--> All feature values have been restored to default" << std::endl;
|
||||
|
||||
// create settings struct to determine behaviour during loading
|
||||
VmbFeaturePersistSettings_t settingsStruct;
|
||||
settingsStruct.loggingLevel = 4;
|
||||
settingsStruct.maxIterations = 5;
|
||||
settingsStruct.persistType = VmbFeaturePersistNoLUT;
|
||||
|
||||
// re-load saved settings from file
|
||||
err = pCam->LoadCameraSettings( xmlFile, &settingsStruct );
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not load camera settings to file '" << xmlFile << "' [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
cameraFlag = false;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
|
||||
ss.str( "" );
|
||||
ss << "--> Feature values have been loaded from given XML file '" << xmlFile << "'";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
// close camera
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
throw std::exception();
|
||||
}
|
||||
cameraFlag = false;
|
||||
|
||||
std::cout << "--> Camera has been closed" << std::endl;
|
||||
|
||||
// shutdown Vimba
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
throw std::exception();
|
||||
}
|
||||
apiFlag = false;
|
||||
|
||||
std::cout << "--> VimbaCPP has been shut down" << std::endl;
|
||||
|
||||
}
|
||||
catch( std::exception &e )
|
||||
{
|
||||
std::cout << "[Exception] " << e.what() << std::endl;
|
||||
|
||||
if( true == cameraFlag )
|
||||
{
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
}
|
||||
if( true == apiFlag )
|
||||
{
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
std::cout << "[Exception]" << std::endl;
|
||||
|
||||
if( true == cameraFlag )
|
||||
{
|
||||
err = pCam->Close();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not close camera [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
}
|
||||
if( true == apiFlag )
|
||||
{
|
||||
err = sys.Shutdown();
|
||||
if( VmbErrorSuccess != err )
|
||||
{
|
||||
ss.str( "" );
|
||||
ss << "Could not shutdown Vimba [error code: " << err << "]";
|
||||
std::cout << ss.str() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
std::cout << std::endl << "<<press any key to close example>>" << std::endl;
|
||||
std::cin.get();
|
||||
return err;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user