Hi,
my setup JP4.6.1 AGX, imx264 2448x2048.
This code compress frame:
EGLStream::IImageJPEG * iJPEG{ Argus::interface_cast< EGLStream::IImageJPEG >( iFrame->getImage() ) };
if( iJPEG )
{
const auto file{ m_recordPath + "/" + std::to_string( cameraId ) + "/" + std::to_string( framesNum.at( cameraId ) ) + ".jpg" };
if( iJPEG->writeJPEG( file.c_str() ) != Argus::STATUS_OK )
{
std::cout << "Failed to write JPEG: " << file << std::endl;
}
}
This does not:
EGLStream::NV::IImageNativeBuffer * iNativeBuffer{ Argus::interface_cast< EGLStream::NV::IImageNativeBuffer >( iFrame->getImage()) };
if( not iNativeBuffer )
std::cout << "IImageNativeBuffer not supported by Image!" << std::endl;
else
{
if( m_dmaBuffers.at( cameraId ) == - 1 )
{
m_dmaBuffers.at( cameraId ) = iNativeBuffer->createNvBuffer( frameSize,
NvBufferColorFormat_YUV420,
NvBufferLayout_BlockLinear );
}
if( m_dmaBuffers.at( cameraId ) != - 1 )
{
if( iNativeBuffer->copyToNvBuffer( m_dmaBuffers.at( cameraId ) ) != Argus::STATUS_OK )
{
std::cout << "Failed to copy frame to NvBuffer!" << std::endl;
} else
{
const auto filename{ m_recordPath + "/" + std::to_string( cameraId ) + "/" + std::to_string( framesNum.at( cameraId ) ) + ".jpg" };
std::ofstream outputFile{ filename };
if( outputFile.is_open() )
{
uint8_t * buffer = m_OutputBuffers.at( cameraId );
unsigned long size{ bufferSize };
m_JpegEncoders.at( cameraId )->encodeFromFd( m_dmaBuffers.at( cameraId ), JCS_YCbCr, & buffer, size );
outputFile.write( ( char * ) buffer, bufferSize );
}
}
} else
std::cout << "Failed to create NvBuffer!" << std::endl;
}
First case file size about 200-400KB
Next one always 7.5MB as buffer size.
Please explain me that.
Best regards, Viktor.