From 9cd21272c97c19a9d60e1092a29301dd52a7a1a5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Jun 2024 21:40:51 +0200 Subject: [PATCH] move whole logic to MF-grabber --- include/grabber/video/EncoderThread.h | 7 +++---- .../grabber/video/mediafoundation/MFGrabber.h | 1 - include/utils/ImageResampler.h | 2 -- include/utils/PixelFormat.h | 4 ++-- libsrc/grabber/video/EncoderThread.cpp | 4 +--- .../grabber/video/mediafoundation/MFGrabber.cpp | 15 +++++++++++++-- libsrc/grabber/video/v4l2/V4L2Grabber.cpp | 2 +- libsrc/utils/ImageResampler.cpp | 16 +--------------- 8 files changed, 21 insertions(+), 30 deletions(-) diff --git a/include/grabber/video/EncoderThread.h b/include/grabber/video/EncoderThread.h index 12f90096..e428c8c6 100644 --- a/include/grabber/video/EncoderThread.h +++ b/include/grabber/video/EncoderThread.h @@ -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(_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() diff --git a/include/grabber/video/mediafoundation/MFGrabber.h b/include/grabber/video/mediafoundation/MFGrabber.h index 714d09cb..da3b90c9 100644 --- a/include/grabber/video/mediafoundation/MFGrabber.h +++ b/include/grabber/video/mediafoundation/MFGrabber.h @@ -109,7 +109,6 @@ private: EncoderThreadManager* _threadManager; PixelFormat _pixelFormat, _pixelFormatConfig; - bool _bottomUp; int _lineLength, _frameByteSize, _noSignalCounterThreshold, diff --git a/include/utils/ImageResampler.h b/include/utils/ImageResampler.h index f82c0538..7aba7a40 100644 --- a/include/utils/ImageResampler.h +++ b/include/utils/ImageResampler.h @@ -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 & outputImage) const; @@ -27,7 +26,6 @@ private: int _cropTop; int _cropBottom; VideoMode _videoMode; - bool _bottomUp; FlipMode _flipMode; }; diff --git a/include/utils/PixelFormat.h b/include/utils/PixelFormat.h index 375ddc4e..10eb9a1e 100644 --- a/include/utils/PixelFormat.h +++ b/include/utils/PixelFormat.h @@ -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) diff --git a/libsrc/grabber/video/EncoderThread.cpp b/libsrc/grabber/video/EncoderThread.cpp index 83ad321d..e891c821 100644 --- a/libsrc/grabber/video/EncoderThread.cpp +++ b/libsrc/grabber/video/EncoderThread.cpp @@ -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); diff --git a/libsrc/grabber/video/mediafoundation/MFGrabber.cpp b/libsrc/grabber/video/mediafoundation/MFGrabber.cpp index eb99aa0d..178e248d 100644 --- a/libsrc/grabber/video/mediafoundation/MFGrabber.cpp +++ b/libsrc/grabber/video/mediafoundation/MFGrabber.cpp @@ -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; } diff --git a/libsrc/grabber/video/v4l2/V4L2Grabber.cpp b/libsrc/grabber/video/v4l2/V4L2Grabber.cpp index 80f6de07..e6256d7e 100644 --- a/libsrc/grabber/video/v4l2/V4L2Grabber.cpp +++ b/libsrc/grabber/video/v4l2/V4L2Grabber.cpp @@ -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; diff --git a/libsrc/utils/ImageResampler.cpp b/libsrc/utils/ImageResampler.cpp index 66ecb272..b205e0d3 100644 --- a/libsrc/utils/ImageResampler.cpp +++ b/libsrc/utils/ImageResampler.cpp @@ -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;