move whole logic to MF-grabber

This commit is contained in:
unknown 2024-06-05 21:40:51 +02:00
parent 0b75e90c54
commit 9cd21272c9
8 changed files with 21 additions and 30 deletions

View File

@ -31,7 +31,7 @@ public:
PixelFormat pixelFormat, uint8_t* sharedData,
int size, int width, int height, int lineLength,
int cropLeft, int cropTop, int cropBottom, int cropRight,
VideoMode videoMode, bool bottomUp, FlipMode flipMode, int pixelDecimation);
VideoMode videoMode, FlipMode flipMode, int pixelDecimation);
void process();
@ -55,7 +55,6 @@ private:
int _cropTop;
int _cropBottom;
int _cropRight;
bool _bottomUp;
FlipMode _flipMode;
VideoMode _videoMode;
bool _doTransform;
@ -96,14 +95,14 @@ public:
PixelFormat pixelFormat, uint8_t* sharedData,
int size, int width, int height, int lineLength,
int cropLeft, int cropTop, int cropBottom, int cropRight,
VideoMode videoMode, bool bottomUp, FlipMode flipMode, int pixelDecimation)
VideoMode videoMode, FlipMode flipMode, int pixelDecimation)
{
auto encThread = qobject_cast<EncoderThread*>(_thread);
if (encThread != nullptr)
encThread->setup(pixelFormat, sharedData,
size, width, height, lineLength,
cropLeft, cropTop, cropBottom, cropRight,
videoMode, bottomUp, flipMode, pixelDecimation);
videoMode, flipMode, pixelDecimation);
}
bool isBusy()

View File

@ -109,7 +109,6 @@ private:
EncoderThreadManager* _threadManager;
PixelFormat _pixelFormat,
_pixelFormatConfig;
bool _bottomUp;
int _lineLength,
_frameByteSize,
_noSignalCounterThreshold,

View File

@ -15,7 +15,6 @@ public:
void setVerticalPixelDecimation(int decimator) { _verticalDecimation = decimator; }
void setCropping(int cropLeft, int cropRight, int cropTop, int cropBottom);
void setVideoMode(VideoMode mode) { _videoMode = mode; }
void setBottomUp(bool isBottomUp) { _bottomUp = isBottomUp; }
void setFlipMode(FlipMode mode) { _flipMode = mode; }
void processImage(const uint8_t * data, int width, int height, int lineLength, PixelFormat pixelFormat, Image<ColorRgb> & outputImage) const;
@ -27,7 +26,6 @@ private:
int _cropTop;
int _cropBottom;
VideoMode _videoMode;
bool _bottomUp;
FlipMode _flipMode;
};

View File

@ -124,10 +124,10 @@ inline QString pixelFormatToString(const PixelFormat& pixelFormat)
enum class FlipMode
{
NO_CHANGE,
HORIZONTAL,
VERTICAL,
BOTH,
NO_CHANGE
BOTH
};
inline FlipMode parseFlipMode(const QString& flipMode)

View File

@ -40,7 +40,7 @@ void EncoderThread::setup(
PixelFormat pixelFormat, uint8_t* sharedData,
int size, int width, int height, int lineLength,
int cropLeft, int cropTop, int cropBottom, int cropRight,
VideoMode videoMode, bool bottomUp, FlipMode flipMode, int pixelDecimation)
VideoMode videoMode, FlipMode flipMode, int pixelDecimation)
{
_lineLength = lineLength;
_pixelFormat = pixelFormat;
@ -51,7 +51,6 @@ void EncoderThread::setup(
_cropTop = cropTop;
_cropBottom = cropBottom;
_cropRight = cropRight;
_bottomUp = bottomUp;
_flipMode = flipMode;
_videoMode = videoMode;
_pixelDecimation = pixelDecimation;
@ -82,7 +81,6 @@ void EncoderThread::setup(
#endif
_imageResampler.setVideoMode(_videoMode);
_imageResampler.setBottomUp(_bottomUp);
_imageResampler.setFlipMode(_flipMode);
_imageResampler.setCropping(_cropLeft, _cropRight, _cropTop, _cropBottom);
_imageResampler.setHorizontalPixelDecimation(_pixelDecimation);

View File

@ -359,11 +359,22 @@ done:
else
{
_pixelFormat = props.pf;
_bottomUp = (props.defstride < 0);
_width = props.width;
_height = props.height;
_frameByteSize = _width * _height * 3;
_lineLength = _width * 3;
// adjust flipMode for bottom-up images
if (props.defstride < 0)
{
if (_flipMode == FlipMode::NO_CHANGE)
_flipMode = FlipMode::HORIZONTAL;
else if (_flipMode == FlipMode::HORIZONTAL)
_flipMode = FlipMode::NO_CHANGE;
else if (_flipMode == FlipMode::VERTICAL)
_flipMode = FlipMode::BOTH;
else if (_flipMode == FlipMode::BOTH)
_flipMode = FlipMode::VERTICAL;
}
}
// Cleanup
@ -550,7 +561,7 @@ void MFGrabber::process_image(const void *frameImageBuffer, int size)
{
if (!_threadManager->_threads[i]->isBusy())
{
_threadManager->_threads[i]->setup(_pixelFormat, (uint8_t*)frameImageBuffer, size, _width, _height, _lineLength, _cropLeft, _cropTop, _cropBottom, _cropRight, _videoMode, _bottomUp, _flipMode, _pixelDecimation);
_threadManager->_threads[i]->setup(_pixelFormat, (uint8_t*)frameImageBuffer, size, _width, _height, _lineLength, _cropLeft, _cropTop, _cropBottom, _cropRight, _videoMode, _flipMode, _pixelDecimation);
_threadManager->_threads[i]->process();
break;
}

View File

@ -1046,7 +1046,7 @@ bool V4L2Grabber::process_image(const void *p, int size)
{
if (!_threadManager->_threads[i]->isBusy())
{
_threadManager->_threads[i]->setup(_pixelFormat, (uint8_t*)p, size, _width, _height, _lineLength, _cropLeft, _cropTop, _cropBottom, _cropRight, _videoMode, false, _flipMode, _pixelDecimation);
_threadManager->_threads[i]->setup(_pixelFormat, (uint8_t*)p, size, _width, _height, _lineLength, _cropLeft, _cropTop, _cropBottom, _cropRight, _videoMode, _flipMode, _pixelDecimation);
_threadManager->_threads[i]->process();
result = true;
break;

View File

@ -10,7 +10,6 @@ ImageResampler::ImageResampler()
, _cropTop(0)
, _cropBottom(0)
, _videoMode(VideoMode::VIDEO_2D)
, _bottomUp(false)
, _flipMode(FlipMode::NO_CHANGE)
{
}
@ -54,20 +53,7 @@ void ImageResampler::processImage(const uint8_t * data, int width, int height, i
int xDestStart, xDestEnd;
int yDestStart, yDestEnd;
FlipMode flipMode = _flipMode;
if (_bottomUp)
{
if (_flipMode == FlipMode::NO_CHANGE)
flipMode = FlipMode::HORIZONTAL;
else if (_flipMode == FlipMode::HORIZONTAL)
flipMode = FlipMode::NO_CHANGE;
else if (_flipMode == FlipMode::VERTICAL)
flipMode = FlipMode::BOTH;
else if (_flipMode == FlipMode::BOTH)
flipMode = FlipMode::VERTICAL;
}
switch (flipMode)
switch (_flipMode)
{
case FlipMode::NO_CHANGE:
xDestStart = 0;