本文整理汇总了C++中VideoSource::CopyPattern方法的典型用法代码示例。如果您正苦于以下问题:C++ VideoSource::CopyPattern方法的具体用法?C++ VideoSource::CopyPattern怎么用?C++ VideoSource::CopyPattern使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VideoSource
的用法示例。
在下文中一共展示了VideoSource::CopyPattern方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
//.........这里部分代码省略.........
lConfig.GetSourceAddress(), lConfig.GetSourcePort() );
if ( !lResult.IsOK() )
{
cout << "Failed to open a connection to the transmitter." << endl;
return 1;
}
cout << "Transmission stream opened:" << endl;
cout << "Source: " << lTransmitter.GetSourceIPAddress().GetAscii() << " port " << lTransmitter.GetSourcePort() << endl;
cout << "Destination: " << lConfig.GetDestinationAddress() << " port " << lConfig.GetDestinationPort() << endl;
if ( !lConfig.GetSilent() )
{
cout << "Press any key to begin transmitting.\r";
PvWaitForKeyPress();
}
cout << "Press any key to stop transmitting." << endl;
// Set maximum throughput (just to even out traffic, as we control throughput at the source)
if ( lConfig.GetFPS() != 0 )
{
// Multiply image size (in bits) by FPS
float lMax = static_cast<float>( lSize ) * 8;
lMax *= lConfig.GetFPS();
// Since we control throughput at the source, make sure maximum throughput is slightly
// higher than what we need. We want to even out packet traffic, not slow down source frame rate
lMax *= 1.1f;
// Set max throughput
lTransmitter.SetMaxPayloadThroughput( lMax );
}
char lDoodle[] = "|\\-|-/";
int lDoodleIndex = 0;
// Reset transmitter stats
lTransmitter.ResetStats();
// Used to transmit at a steady frame rate
PvFPSStabilizer lStabilizer;
// Acquisition/transmission loop
while( !PvKbHit() )
{
// Step 1: If timing is right to meet desired FPS, generate pattern, transmit
if ( ( lConfig.GetFPS() == 0 ) || lStabilizer.IsTimeToDisplay( (PvUInt32)lConfig.GetFPS() ) )
{
// Are there buffers available for transmission?
if ( lFreeBuffers.size() > 0 )
{
// Retrieve buffer from list
PvBuffer *lBuffer = lFreeBuffers.front();
lFreeBuffers.pop_front();
// Generate the test pattern (if needed)
if ( !lConfig.GetNoPattern() )
{
lSource.CopyPattern( lBuffer );
}
// Queue the buffer for transmission
lTransmitter.QueueBuffer( lBuffer );
}
}
// Step 2: Retrieve free buffer(s), display stats and requeue
PvBuffer *lBuffer = NULL;
while ( lTransmitter.RetrieveFreeBuffer( &lBuffer, 0 ).IsOK() )
{
// Queue buffers back in available buffer list
lFreeBuffers.push_back( lBuffer );
// Buffer transmission complete, dislay stats
cout << fixed << setprecision( 1 );
cout << lDoodle[ lDoodleIndex ] << " ";
cout << "Transmitted " << lTransmitter.GetBlocksTransmitted() << " blocks ";
cout << "at " << lTransmitter.GetAverageTransmissionRate() << " ";
cout << "(" << lTransmitter.GetInstantaneousTransmissionRate() << ") FPS ";
cout << lTransmitter.GetAveragePayloadThroughput() / 1000000.0f << " ";
cout << "(" << lTransmitter.GetInstantaneousPayloadThroughput() / 1000000.0f << ") Mb/s \r";
++lDoodleIndex %= 6;
}
}
// Close transmitter (will also abort buffers)
lTransmitter.Close();
// Free buffers
PvBufferList::iterator lIt = lBuffers.begin();
while ( lIt != lBuffers.end() )
{
delete ( *lIt );
lIt++;
}
// Stop virtual device
lDevice.StopListening();
}