This function is called whenever a complete request (one that e.g. didn't time out) has been returned back to the user.
which again is used in the first three continuous capture steps of the sample.
In configuration mode certain properties of a request will become writeable. Then a user supplied buffer can be registered at this request object. If the user registers a specific user supplied buffer with more than one request the behaviour is undefined as then e.g. if the user requests data into two requests referencing the same buffer can never be sure whether the data returned by the driver stays valid until he is done working with it. The device driver will NOT check for identical user supplied buffers as sometimes this behaviour might be desired as well.
Never free memory that is referenced by at least one request that has been sent to the device driver. If this is done, the behaviour is undefined. To remove a user supplied buffer from a request, this request must be set into configuration mode again. After removing a buffer from every request it has been assigned to it is save to free the memory associated with the buffer.
#include <iostream>
#include <memory>
#include <thread>
#include <apps/Common/exampleHelper.h>
#include <common/minmax.h>
#include <mvIMPACT_CPP/mvIMPACT_acquire.h>
#ifdef _WIN32
# include <mvDisplay/Include/mvIMPACT_acquire_display.h>
# define USE_DISPLAY
#elif defined(linux) || defined(__linux) || defined(__linux__) || defined(__APPLE__)
# if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
using UINT_PTR = uint64_t;
# elif defined(__i386__) || defined(__arm__) || defined(__powerpc__)
using UINT_PTR = uint32_t;
# endif
#endif
#ifdef BUILD_WITH_OPENCV_SUPPORT
# include <opencv2/core/core.hpp>
# include <opencv2/highgui/highgui.hpp>
# include <opencv2/imgproc/imgproc.hpp>
#endif
using namespace std;
static bool s_boTerminated = false;
class UserSuppliedHeapBuffer
{
unique_ptr<char[]> pBuf_;
int bufSize_;
int alignment_;
public:
explicit UserSuppliedHeapBuffer( int bufSize, int alignment ) : pBuf_(), bufSize_( bufSize ), alignment_( alignment )
{
if( bufSize_ > 0 )
{
pBuf_ = unique_ptr<char[]>( new char[bufSize_ + alignment_] );
}
}
char* getPtr( void ) const
{
if( alignment_ <= 1 )
{
return pBuf_.get();
}
return reinterpret_cast<char*>( align( reinterpret_cast<UINT_PTR>( pBuf_.get() ), static_cast<UINT_PTR>( alignment_ ) ) );
}
int getSize( void ) const
{
return bufSize_;
}
};
using CaptureBufferContainer = std::vector<shared_ptr<UserSuppliedHeapBuffer>>;
struct CaptureParameter
{
#ifdef USE_DISPLAY
shared_ptr<ImageDisplayWindow> pDisplayWindow;
#endif
#ifdef BUILD_WITH_OPENCV_SUPPORT
std::string openCVDisplayTitle;
std::string openCVResultDisplayTitle;
#endif
bool boUserSuppliedMemoryUsed;
bool boAlwaysUseNewUserSuppliedBuffers;
int bufferSize;
int bufferAlignment;
int bufferPitch;
CaptureBufferContainer buffers;
explicit CaptureParameter(
Device* p ) : pDev{p}, fi{p}, irc{p}, statistics{p}, boUserSuppliedMemoryUsed{false},
boAlwaysUseNewUserSuppliedBuffers{false}, bufferSize{0}, bufferAlignment{0}, bufferPitch{0}, buffers()
{
#ifdef USE_DISPLAY
pDisplayWindow = make_shared<ImageDisplayWindow>(
"mvIMPACT_acquire sample, Device " + pDev->
serial.
read() );
#endif
#ifdef BUILD_WITH_OPENCV_SUPPORT
openCVDisplayTitle = string(
"mvIMPACT_acquire sample, Device " + pDev->
serial.
read() +
", OpenCV display" );
openCVResultDisplayTitle = openCVDisplayTitle + "(Result)";
#endif
}
CaptureParameter( const CaptureParameter& src ) = delete;
CaptureParameter& operator=( const CaptureParameter& rhs ) = delete;
};
void checkCaptureBufferAddress(
const Request*
const pRequest,
bool boShouldContainUserSuppliedMemory,
const CaptureBufferContainer& buffers );
int createCaptureBuffer(
FunctionInterface& fi, CaptureBufferContainer& buffers,
const int bufferSize,
const int bufferAlignment,
const int bufferPitch,
unsigned int requestNr );
int createCaptureBuffers(
FunctionInterface& fi, CaptureBufferContainer& buffers,
const int bufferSize,
const int bufferAlignment,
const int bufferPitch );
void freeCaptureBuffer(
FunctionInterface& fi, CaptureBufferContainer& buffers,
unsigned int requestNr );
void runLiveLoop( CaptureParameter& captureParams );
void checkCaptureBufferAddress(
const Request*
const pRequest,
bool boShouldContainUserSuppliedMemory,
const CaptureBufferContainer& buffers )
{
{
cout <<
"ERROR: Request number " << pRequest->
getNumber() <<
" is supposed to contain user supplied memory, but claims that it doesn't." << endl;
return;
}
else if( !boShouldContainUserSuppliedMemory )
{
{
cout <<
"ERROR: Request number " << pRequest->
getNumber() <<
" is supposed NOT to contain user supplied memory, but claims that it does." << endl;
}
return;
}
for( const auto& buffer : buffers )
{
if( pAddr == buffer->getPtr() )
{
return;
}
}
cout <<
"ERROR: A buffer has been returned, that doesn't match any of the buffers assigned as user memory in request number " << pRequest->
getNumber() <<
"." << endl;
cout << "Buffer got: 0x" << pAddr << endl;
cout << "Buffers allocated:" << endl;
const CaptureBufferContainer::size_type vSize = buffers.size();
for( CaptureBufferContainer::size_type j = 0; j < vSize; j++ )
{
cout << "[" << j << "]: 0x" << reinterpret_cast<void*>( buffers[j]->getPtr() ) << endl;
}
}
int createCaptureBuffer(
FunctionInterface& fi, CaptureBufferContainer& buffers,
const int bufferSize,
const int bufferAlignment,
const int ,
unsigned int requestNr )
{
shared_ptr<UserSuppliedHeapBuffer> pBuffer = make_shared<UserSuppliedHeapBuffer>( bufferSize, bufferAlignment );
if( ( functionResult = pRequest->
attachUserBuffer( pBuffer->getPtr(), pBuffer->getSize() ) ) != DMR_NO_ERROR )
{
cout << "An error occurred while attaching a buffer to request number " << requestNr << ": " << ImpactAcquireException::getErrorCodeAsString( functionResult ) << "." << endl;
return -1;
}
buffers.push_back( pBuffer );
return 0;
}
int createCaptureBuffers(
FunctionInterface& fi, CaptureBufferContainer& buffers,
const int bufferSize,
const int bufferAlignment,
const int bufferPitch )
{
freeCaptureBuffers( fi, buffers );
for( unsigned int i = 0; i < requestCnt; i++ )
{
try
{
const int result = createCaptureBuffer( fi, buffers, bufferSize, bufferAlignment, bufferPitch, i );
if( result != 0 )
{
freeCaptureBuffers( fi, buffers );
return result;
}
}
{
freeCaptureBuffers( fi, buffers );
}
}
return 0;
}
void freeCaptureBuffer(
FunctionInterface& fi, CaptureBufferContainer& buffers,
unsigned int requestNr )
{
try
{
{
{
cout << "An error occurred while detaching a buffer from request number " << requestNr << " : " << ImpactAcquireException::getErrorCodeAsString( functionResult ) << "." << endl;
}
}
CaptureBufferContainer::iterator it = find_if( buffers.begin(), buffers.end(), [pAddr]( const shared_ptr<UserSuppliedHeapBuffer>& buffer )
{
return pAddr == buffer->getPtr();
} );
if( it != buffers.end() )
{
buffers.erase( it );
}
}
{
cout <<
"An error occurred while changing the mode of request number " << requestNr <<
": " << e.
getErrorCodeAsString() <<
"." << endl;
}
}
{
for( unsigned int i = 0; i < requestCnt; i++ )
{
freeCaptureBuffer( fi, buffers, i );
}
if( !buffers.empty() )
{
cout << "Error! The buffer container should be empty now but still contains " << buffers.size() << " elements!" << endl;
}
}
void displayImage( CaptureParameter* pCaptureParameter,
Request* pRequest )
{
#if !defined(USE_DISPLAY) && !defined(BUILD_WITH_OPENCV_SUPPORT)
( void )pRequest;
( void )pCaptureParameter;
#endif
#ifdef USE_DISPLAY
pCaptureParameter->pDisplayWindow->GetImageDisplay().SetImage( pRequest );
pCaptureParameter->pDisplayWindow->GetImageDisplay().Update();
#endif
#ifdef BUILD_WITH_OPENCV_SUPPORT
int openCVDataType = CV_8UC1;
{
openCVDataType = CV_8UC1;
break;
openCVDataType = CV_16UC1;
break;
openCVDataType = CV_32SC1;
break;
openCVDataType = CV_8UC3;
break;
openCVDataType = CV_8UC4;
break;
openCVDataType = CV_16UC3;
break;
cout <<
"ERROR! Don't know how to render this pixel format (" << pRequest->
imagePixelFormat.
readS() <<
") in OpenCV! Select another one e.g. by writing to mvIMPACT::acquire::ImageDestination::pixelFormat!" << endl;
exit( 42 );
break;
}
cv::imshow( pCaptureParameter->openCVDisplayTitle, openCVImage );
cv::waitKey( 5 );
cv::Mat edgesMat;
switch( openCVDataType )
{
case CV_16UC3:
cout << "This format seems to crash the Canny Edge detector. Will display the original image instead!" << endl;
edgesMat = openCVImage;
break;
default:
cv::Canny( openCVImage, edgesMat, 35.0, 55.0 );
break;
}
cv::imshow( pCaptureParameter->openCVResultDisplayTitle, edgesMat );
cv::waitKey( 5 );
#endif
}
void liveLoop( CaptureParameter* pParameter )
{
while( ( result =
static_cast<TDMR_ERROR>( pParameter->fi.imageRequestSingle() ) ) == DMR_NO_ERROR ) {};
if( result != DEV_NO_FREE_REQUEST_AVAILABLE )
{
cout << "'FunctionInterface.imageRequestSingle' returned with an unexpected result: " << result
<< "(" << ImpactAcquireException::getErrorCodeAsString( result ) << ")" << endl;
}
manuallyStartAcquisitionIfNeeded( pParameter->pDev, pParameter->fi );
unsigned int cnt = {0};
const unsigned int timeout_ms = {500};
Request* pPreviousRequest =
nullptr;
while( !s_boTerminated )
{
const int requestNr = pParameter->fi.imageRequestWaitFor( timeout_ms );
pRequest = pParameter->fi.isRequestNrValid( requestNr ) ? pParameter->fi.getRequest( requestNr ) : 0;
if( pRequest != nullptr )
{
{
++cnt;
if( cnt % 100 == 0 )
{
cout << "Info from " << pParameter->pDev->serial.read()
<< ": " << pParameter->statistics.framesPerSecond.name() << ": " << pParameter->statistics.framesPerSecond.readS()
<< ", " << pParameter->statistics.errorCount.name() << ": " << pParameter->statistics.errorCount.readS()
<< ", " << pParameter->statistics.captureTime_s.name() << ": " << pParameter->statistics.captureTime_s.readS()
}
displayImage( pParameter, pRequest );
checkCaptureBufferAddress( pRequest, pParameter->boUserSuppliedMemoryUsed, pParameter->buffers );
}
else
{
}
if( pPreviousRequest != nullptr )
{
if( pParameter->boAlwaysUseNewUserSuppliedBuffers )
{
freeCaptureBuffer( pParameter->fi, pParameter->buffers, pPreviousRequest->
getNumber() );
createCaptureBuffer( pParameter->fi, pParameter->buffers, pParameter->bufferSize, pParameter->bufferAlignment, pParameter->bufferPitch, pPreviousRequest->
getNumber() );
}
}
pPreviousRequest = pRequest;
pParameter->fi.imageRequestSingle();
}
}
manuallyStopAcquisitionIfNeeded( pParameter->pDev, pParameter->fi );
#ifdef USE_DISPLAY
pParameter->pDisplayWindow->GetImageDisplay().RemoveImage();
#endif
#ifdef BUILD_WITH_OPENCV_SUPPORT
cv::destroyAllWindows();
#endif
if( pRequest != nullptr )
{
}
pParameter->fi.imageRequestReset( 0, 0 );
}
void runLiveLoop( CaptureParameter& parameter )
{
s_boTerminated = false;
thread myThread( liveLoop, ¶meter );
cin.get();
s_boTerminated = true;
myThread.join();
}
int main( void )
{
Device* pDev = getDeviceFromUserInput( devMgr );
if( pDev == nullptr )
{
cout << "Unable to continue! Press [ENTER] to end the application" << endl;
cin.get();
return 1;
}
cout << "Initialising the device. This might take some time..." << endl;
try
{
}
{
cout <<
"An error occurred while opening device " << pDev->
serial.
read()
<< "Press [ENTER] to end the application..." << endl;
cin.get();
return 1;
}
CaptureParameter captureParams( pDev );
cout << "The device will try to capture continuously into memory automatically allocated be the device driver." << endl
<< "This is the default behaviour." << endl;
cout << "Press [ENTER] to end the continuous acquisition." << endl;
runLiveLoop( captureParams );
cout << "The device will now try to capture continuously into user supplied memory." << endl;
captureParams.boUserSuppliedMemoryUsed = true;
int bufferAlignment = {0};
Request* pCurrentCaptureBufferLayout =
nullptr;
int result = captureParams.fi.getCurrentCaptureBufferLayout( captureParams.irc, &pCurrentCaptureBufferLayout, &bufferAlignment );
if( result != 0 )
{
cout << "An error occurred while querying the current capture buffer layout for device " << captureParams.pDev->serial.read()
<< "(error code: " << ImpactAcquireException::getErrorCodeAsString( result ) << ")." << endl
<< "Press [ENTER] to end the application..." << endl;
cin.get();
return 1;
}
result = createCaptureBuffers( captureParams.fi, captureParams.buffers, bufferSize, bufferAlignment, bufferPitch );
if( result != 0 )
{
cout << "An error occurred while setting up the user supplied buffers for device " << captureParams.pDev->serial.read()
<< "(error code: " << ImpactAcquireException::getErrorCodeAsString( result ) << ")." << endl
<< "Press [ENTER] to end the application..." << endl;
cin.get();
return 1;
}
cout << "Press [ENTER] to end the continuous acquisition into user supplied memory." << endl;
runLiveLoop( captureParams );
freeCaptureBuffers( captureParams.fi, captureParams.buffers );
cout << "The device will now try to capture continuously into user supplied memory using a new buffer for each image thus constantly re-allocating and freeing user memory." << endl;
captureParams.boUserSuppliedMemoryUsed = true;
captureParams.boAlwaysUseNewUserSuppliedBuffers = true;
captureParams.bufferSize = bufferSize;
captureParams.bufferAlignment = bufferAlignment;
captureParams.bufferPitch = bufferPitch;
result = createCaptureBuffers( captureParams.fi, captureParams.buffers, bufferSize, bufferAlignment, bufferPitch );
if( result != 0 )
{
cout << "An error occurred while setting up the user supplied buffers for device " << captureParams.pDev->serial.read()
<< "(error code: " << ImpactAcquireException::getErrorCodeAsString( result ) << ")." << endl
<< "Press [ENTER] to end the application..." << endl;
cin.get();
return 1;
}
cout << "Press [ENTER] to end the continuous acquisition." << endl;
runLiveLoop( captureParams );
freeCaptureBuffers( captureParams.fi, captureParams.buffers );
captureParams.boUserSuppliedMemoryUsed = false;
captureParams.boAlwaysUseNewUserSuppliedBuffers = false;
cout << "The device will try to capture continuously into memory automatically allocated be the device driver again." << endl
<< "This is the default behaviour." << endl;
cout << "Press [ENTER] to end the continuous acquisition." << endl;
runLiveLoop( captureParams );
cout << "Now the device will try to capture one frame into a specific user supplied buffer" << endl;
UserSuppliedHeapBuffer buffer( bufferSize, bufferAlignment );
const int REQUEST_TO_USE = {2};
ss.requestCount.write( REQUEST_TO_USE + 1 );
Request* pRequest = captureParams.fi.getRequest( REQUEST_TO_USE );
try
{
int functionResult = pRequest->
attachUserBuffer( buffer.getPtr(), buffer.getSize() );
if( functionResult != DMR_NO_ERROR )
{
cout << "An error occurred while attaching a user buffer to request number " << REQUEST_TO_USE << ": " << ImpactAcquireException::getErrorCodeAsString( functionResult ) << "." << endl;
cout << "Press [ENTER] to end the application." << endl;
cin.get();
return 1;
}
}
{
cout <<
"An error occurred while attaching a user buffer to request number " << REQUEST_TO_USE <<
": " << ImpactAcquireException::getErrorCodeAsString( e.
getErrorCode() ) <<
"." << endl;
cout << "Press [ENTER] to end the application." << endl;
cin.get();
return 1;
}
captureParams.irc.requestToUse.write( REQUEST_TO_USE );
result = captureParams.fi.imageRequestSingle( &captureParams.irc, &requestUsed );
if( result != DMR_NO_ERROR )
{
cout << "An error occurred while requesting an image for request number " << REQUEST_TO_USE << ": " << ImpactAcquireException::getErrorCodeAsString( result ) << "." << endl;
cout << "Press [ENTER] to end the application." << endl;
cin.get();
return 1;
}
if( requestUsed != REQUEST_TO_USE )
{
cout << "ERROR! An acquisition into buffer " << REQUEST_TO_USE << " was requested, but the driver did use " << requestUsed << " for this acquisition." << endl;
}
manuallyStartAcquisitionIfNeeded( pDev, captureParams.fi );
int requestNr = captureParams.fi.imageRequestWaitFor( -1 );
manuallyStopAcquisitionIfNeeded( pDev, captureParams.fi );
pRequest = captureParams.fi.getRequest( requestNr );
{
cout << "Press [ENTER] to end the application..." << endl;
cin.get();
return 1;
}
cout << "Capture into specific user supplied buffer done." << endl;
displayImage( &captureParams, pRequest );
cout << "Press [ENTER] to end the application..." << endl;
cin.get();
captureParams.fi.imageRequestUnlock( requestNr );
captureParams.fi.imageRequestReset( 0, 0 );
return 0;
}
Grants access to devices that can be operated by this software interface.
Definition mvIMPACT_acquire.h:7171
This class and its functions represent an actual device detected by this interface in the current sys...
Definition mvIMPACT_acquire.h:6118
PropertyS serial
A string property (read-only) containing the serial number of this device.
Definition mvIMPACT_acquire.h:6551
void open(void)
Opens a device.
Definition mvIMPACT_acquire.h:6420
ZYX read(int index=0) const
Reads a value from a property.
Definition mvIMPACT_acquire.h:4300
The function interface to devices supported by this interface.
Definition mvIMPACT_acquire.h:10758
unsigned int requestCount(void) const
Returns the number of available request objects.
Definition mvIMPACT_acquire.h:11927
Request * getRequest(int nr) const
Returns a pointer to the desired mvIMPACT::acquire::Request.
Definition mvIMPACT_acquire.h:11189
A helper class to control the way an image request will be processed.
Definition mvIMPACT_acquire.h:10360
A base class for exceptions generated by Impact Acquire.
Definition mvIMPACT_acquire.h:256
std::string getErrorCodeAsString(void) const
Returns a string representation of the error associated with the exception.
Definition mvIMPACT_acquire.h:288
int getErrorCode(void) const
Returns a unique numerical representation for this error.
Definition mvIMPACT_acquire.h:275
void * read(int index=0) const
Reads a value from a property.
Definition mvIMPACT_acquire.h:5176
std::string read(int index=0) const
Reads a value from a property.
Definition mvIMPACT_acquire.h:5323
std::string readS(int index=0, const std::string &format="") const
Reads data from this property as a string.
Definition mvIMPACT_acquire.h:3340
Contains information about a captured buffer.
Definition mvIMPACT_acquire.h:8640
PropertyI imageHeight
An integer property (read-only) containing the height of the image in pixels.
Definition mvIMPACT_acquire.h:10331
bool isOK(void) const
Convenience function to check if a request has been processed successfully.
Definition mvIMPACT_acquire.h:9474
PropertyIRequestResult requestResult
An enumerated integer property (read-only) defining the result of this request.
Definition mvIMPACT_acquire.h:9780
PropertyI imageSize
An integer property (read-only) containing the size (in bytes) of the whole image.
Definition mvIMPACT_acquire.h:10202
PropertyI imageWidth
An integer property (read-only) containing the width of the image in pixels.
Definition mvIMPACT_acquire.h:10320
PropertyIRequestImageMemoryMode imageMemoryMode
An enumerated integer property (read-only) containing the memory mode used for this request.
Definition mvIMPACT_acquire.h:10124
int attachUserBuffer(void *pBuf, int bufSize)
Convenience function to attach a user supplied buffer to a mvIMPACT::acquire::Request object.
Definition mvIMPACT_acquire.h:9665
PropertyIImageBufferPixelFormat imagePixelFormat
An enumerated integer property (read-only) containing the pixel format of this image.
Definition mvIMPACT_acquire.h:10132
PropertyPtr imageData
A pointer property (read-only) containing the start address of the image data.
Definition mvIMPACT_acquire.h:10187
int detachUserBuffer(void)
Convenience function to detach a user supplied buffer from a mvIMPACT::acquire::Request object.
Definition mvIMPACT_acquire.h:9757
int unlock(void)
Unlocks the request for the driver again.
Definition mvIMPACT_acquire.h:9614
int getNumber(void) const
Returns the number associated with this request.
Definition mvIMPACT_acquire.h:9060
PropertyI imageLinePitch
An integer property (read-only) containing the offset (in bytes) to the next line of each channel bel...
Definition mvIMPACT_acquire.h:10262
PropertyI imageFooterSize
An integer property (read-only) containing the size (in bytes) of the footer associated with this ima...
Definition mvIMPACT_acquire.h:10217
Contains basic statistical information.
Definition mvIMPACT_acquire.h:14509
A base class for accessing settings that control the overall behaviour of a device driver.
Definition mvIMPACT_acquire.h:14728
TDMR_ERROR
Errors reported by the device manager.
Definition mvDriverBaseEnums.h:2601
const int INVALID_ID
A constant to check for an invalid ID returned from the property handling module.
Definition mvPropHandlingDatatypes.h:62
@ DMR_NO_ERROR
The function call was executed successfully.
Definition mvDriverBaseEnums.h:2603
@ ibpfYUV444Planar
A three channel YUV444 planar format occupying 24 bit per pixels. (PFNC name: YUV444_8_YVU_Planar)
Definition TImageBufferPixelFormat.h:175
@ ibpfMono32
A single channel 32 bit per pixel format. (PFNC name: Mono32)
Definition TImageBufferPixelFormat.h:177
@ ibpfRGB101010Packed
A three channel interleaved RGB image occupying 48 bit with 30 bit of usable data per pixel....
Definition TImageBufferPixelFormat.h:224
@ ibpfYUV444_UYV_10Packed
A three channel interleaved YUV format occupying 48 bit per pixel with 30 bit of usable data per pixe...
Definition TImageBufferPixelFormat.h:482
@ ibpfYUV444_10Packed
A three channel interleaved YUV format occupying 48 bit per pixel with 30 bit of usable data per pixe...
Definition TImageBufferPixelFormat.h:522
@ ibpfRGB888Packed
A three channel interleaved RGB format containing 24 bit per pixel. (PFNC name: BGR8)
Definition TImageBufferPixelFormat.h:155
@ ibpfYUV444Packed
A three channel interleaved YUV format occupying 24 bit per pixel. (PFNC name: YUV8)
Definition TImageBufferPixelFormat.h:501
@ ibpfBGR888Packed
A three channel interleaved RGB format with 24 bit per pixel. (PFNC name: RGB8)
Definition TImageBufferPixelFormat.h:399
@ ibpfRGB888Planar
A three channel planar RGB format. (PFNC name: RGB8_Planar)
Definition TImageBufferPixelFormat.h:596
@ ibpfMono12Packed_V1
A single channel 12 bit per pixel packed format occupying 12 bit per pixel. (PFNC name: Mono12p)
Definition TImageBufferPixelFormat.h:547
@ ibpfMono8
A single channel 8 bit per pixel format. (PFNC name: Mono8)
Definition TImageBufferPixelFormat.h:45
@ ibpfMono10
A single channel 10 bit per pixel format. (PFNC name: Mono10)
Definition TImageBufferPixelFormat.h:127
@ ibpfRGB141414Packed
A three channel interleaved RGB image occupying 48 bit with 42 bit of usable data per pixel....
Definition TImageBufferPixelFormat.h:266
@ ibpfYUV444_UYVPacked
A three channel interleaved YUV format occupying 24 bit per pixel. (PFNC name: YUV8_UYV)
Definition TImageBufferPixelFormat.h:461
@ ibpfMono12Packed_V2
A single channel 12 bit per pixel packed format occupying 12 bit per pixel. (PFNC name: Mono12Packed)
Definition TImageBufferPixelFormat.h:332
@ ibpfRGBx888Planar
A four channel planar RGB format. (PFNC name: RGBa8_Planar)
Definition TImageBufferPixelFormat.h:122
@ ibpfRGB161616Packed
A three channel interleaved RGB image occupying 48 bit per pixel. (PFNC name: BGR16)
Definition TImageBufferPixelFormat.h:286
@ ibpfYUV422Packed
A three channel interleaved YUV422 format using 32 bit for a pair of pixels. (PFNC name: YUV422_8)
Definition TImageBufferPixelFormat.h:93
@ ibpfMono12
A single channel 12 bit per pixel format. (PFNC name: Mono12)
Definition TImageBufferPixelFormat.h:132
@ ibpfYUV422_UYVYPacked
A three channel interleaved YUV422 format occupying 32 bit for a pair of pixels. (PFNC name: YUV422_8...
Definition TImageBufferPixelFormat.h:309
@ ibpfYUV422Planar
A three channel YUV422 planar format occupying 32 bit for a pair of pixels. (PFNC name: YUV422_8_YVU_...
Definition TImageBufferPixelFormat.h:203
@ ibpfMono14
A single channel 14 bit per pixel format. (PFNC name: Mono14)
Definition TImageBufferPixelFormat.h:137
@ ibpfYUV422_UYVY_10Packed
A three channel interleaved YUV422 format occupying 64 bit for a pair of pixels. (PFNC name: YUV422_1...
Definition TImageBufferPixelFormat.h:380
@ ibpfRGB121212Packed
A three channel interleaved RGB image occupying 48 bit with 36 bit of usable data per pixel....
Definition TImageBufferPixelFormat.h:245
@ ibpfYUV411_UYYVYY_Packed
A three channel interleaved YUV format occupying 48 bit for four pixels. (PFNC name: YUV411_8_UYYVYY)
Definition TImageBufferPixelFormat.h:573
@ ibpfBGR101010Packed_V2
A three channel 10 bit per color component RGB packed format occupying 32 bit per pixel....
Definition TImageBufferPixelFormat.h:442
@ ibpfYUV422_10Packed
A three channel interleaved YUV422 format occupying 64 bit for a pair of pixels. (PFNC name: YUV422_1...
Definition TImageBufferPixelFormat.h:356
@ ibpfMono16
A single channel 16 bit per pixel format. (PFNC name: Mono16)
Definition TImageBufferPixelFormat.h:47
@ ibpfRGBx888Packed
A four channel interleaved RGB format with 32 bit per pixel containing one alpha byte per pixel....
Definition TImageBufferPixelFormat.h:70
This namespace contains classes and functions that can be used to display images.
This namespace contains classes and functions belonging to the image acquisition module of this SDK.
Definition mvCommonDataTypes.h:34