mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	* - New Media Foundation grabber
- JsonAPI available grabber fix
- commented json config removed
* Added libjpeg-turbo to dependencies
* Fix OSX build
Removed Azure Pipelines from build scripts
* Remove Platform from Dashboard
* Correct Grabber Namings
* Grabber UI improvements, generic JSONEditor Selection Update
* Active grabber fix
* Stop Framebuffer grabber on failure
* - Image format NV12 and I420 added
- Flip mode
- Scaling factor for MJPEG
- VSCode (compile before run)
- CI (push) dependency libjpeg-turbo added
* Refactor MediaFoundation (Part 1)
* Remove QDebug output
* Added image flipping ability to MF Grabber
* fix issue 1160
* -Reload MF Grabber only once per WebUI update
- Cleanup
* Improvements
* - Set 'Software Frame Decimation' begin to 0
- Removed grabber specific device name from Log
- Keep pixel format when switching resolution
- Display 'Flip mode' correct in Log
- BGR24 images always flipped
* Refactor MediaFoundation (Part 2)
* Refactor V4L2 grabber (part 1) (#62)
* Media Foundation grabber adapted to V4L2 change
* Enable Media Foundation grabber on windows
* Have fps as int, fix height typo
* Added video standards to JsonAPI output
* Error handling in source reader improved
* Fix "Frame to small" error
* Discovery VideoSources and Dynamically Update Editor
* Hide all element when no video grabber discovered, upate naming
* Do not show unsupported grabbers
* Copy Log to Clipboard
* Update Grabber schema and Defaults
* Update access levels and validate crop ranges
* Height and width in Qt grabber corrected
* Correct formatting
* Untabify
* Global component states across instances
* Components divided on the dashboard
* refactor
* Fix Merge-issues
* Database migration aligning with updated grabber model
* Align Grabber.js with new utility functions
* Allow editor-validation for enum-lists
* Handle "Show Explainations scenario" correctly
* Grabber - Ensure save is only possible on valid content
* Dashboard update + fix GlobalSignal connection
* Ensure default database is populated with current release
* Correct grabber4L2 access level
* Display Signal detection area in preview
* Write Hyperion version into default config on compiling.
* Create defaultconfig.json dynamically
* WebUI changes
* Correct grabber config look-ups
* Refactor i18n language loading
* Fix en.json
* Split global capture from instance capture config
* Update grabber default values
* Standalone grabber: Add --debug switch
* Enhance showInputOptionsForKey for multiple keys
* Add grabber instance link to system grabber config
* Only show signal detection area, if grabber is enabled
* Always show Active element on grabber page
* Remote control - Only display gabber status, if global grabber is enabled
* WebUI optimization (thx to @mkcologne)
Start Grabber only when global settings are enabled
Fixed an issue in the WebUI preview
* V4L2/MF changes
* Jsoneditor, Correct translation for default values
* Refactor LED-Device handling in UI and make element naming consistent
* MF Discovery extended
* Fix LGTM finding
* Support Grabber Bri, Hue, Sat and Con in UI, plus their defaults
* Concider Access level for item filtering
* Concider Access level for item filtering
* Revert "Concider Access level for item filtering"
This reverts commit 5b0ce3c0f2.
* Disable fpsSoftwareDecimation for framegrabber, as not supported yet
* JSON-Editor- Add updated schema for validation on dynamic elements
* added V4L2 color IDs
* LGTM findings fix
* destroy SR callback only on exit
* Grabber.js - Hide elements not supported by platform
* Fixed freezing start effect
* Grabber UI - Hardware controls - Show current values and allow to reset to defaults
* Grabber - Discovery - Add current values to properties
* Small things
* Clean-up Effects and have ENDLESS consistently defined
* Fix on/off/on priority during startup, by initializing _prevVisComp in line with background priority
* Add missing translation mappings
* DirectX Grabber reactivated/ QT Grabber size decimation fixed
* typo in push-master workflow
* Use PreciseTimer for Grabber to ensure stable FPS timing
* Set default Screencapture rate consistently
* Fix libjpeg-turbo download
* Remove Zero character from file
* docker-compile Add PLATFORM parameter, only copy output file after successful compile
* Framebuffer, Dispmanx, OSX, AML Grabber discovery, various clean-up and consistencies across grabbers
* Fix merge problem - on docker-compile Add PLATFORM parameter, only copy output file after successful compile
* Fix definition
* OSXFRameGrabber - Revert cast
* Clean-ups nach Feedback
* Disable certain libraries when building armlogic via standard stretch image as developer
* Add CEC availability to ServerInfo to have it platform independent
* Grabber UI - Fix problem that crop values are not populated when refining editor rage
* Preserve value when updating json-editor range
* LEDVisualisation - Clear image when source changes
* Fix - Preserve value when updating json-editor range
* LEDVisualisation - Clear image when no component is active
* Allow to have password handled by Password-Manager (#1263)
* Update default signal detection area to green assuming rainbow grabber
* LED Visualisation - Handle empty priority update
* Fix yuv420 in v4l2 grabber
* V4L2-Grabber discovery - Only report grabbers with valid video input information
* Grabber - Update static variables to have them working in release build
* LED Visualisation - ClearImage when no priorities
* LED Visualisation - Fix Logo resizing issue
* LED Visualisation - Have nearly black background and negative logo
Co-authored-by: LordGrey <lordgrey.emmel@gmail.com>
Co-authored-by: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
		
	
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| // Windows include
 | |
| #include <Windows.h>
 | |
| 
 | |
| // COM includes
 | |
| #include <Guiddef.h>
 | |
| 
 | |
| // Qt includes
 | |
| #include <QObject>
 | |
| #include <QRectF>
 | |
| #include <QMap>
 | |
| #include <QMultiMap>
 | |
| #include <QJsonObject>
 | |
| #include <QJsonArray>
 | |
| #include <QJsonDocument>
 | |
| 
 | |
| // utils includes
 | |
| #include <utils/PixelFormat.h>
 | |
| #include <utils/Components.h>
 | |
| #include <hyperion/Grabber.h>
 | |
| 
 | |
| // decoder thread includes
 | |
| #include <grabber/EncoderThread.h>
 | |
| 
 | |
| /// Forward class declaration
 | |
| class SourceReaderCB;
 | |
| /// Forward struct declaration
 | |
| struct IMFSourceReader;
 | |
| 
 | |
| ///
 | |
| /// Media Foundation capture class
 | |
| ///
 | |
| 
 | |
| class MFGrabber : public Grabber
 | |
| {
 | |
| 	Q_OBJECT
 | |
| 	friend class SourceReaderCB;
 | |
| public:
 | |
| 	struct DeviceProperties
 | |
| 	{
 | |
| 		QString symlink = QString();
 | |
| 		int	width		= 0;
 | |
| 		int	height		= 0;
 | |
| 		int	fps			= 0;
 | |
| 		int numerator	= 0;
 | |
| 		int denominator = 0;
 | |
| 		PixelFormat pf	= PixelFormat::NO_CHANGE;
 | |
| 		GUID guid		= GUID_NULL;
 | |
| 	};
 | |
| 
 | |
| 	struct DeviceControls
 | |
| 	{
 | |
| 		QString property = QString();
 | |
| 		int minValue = 0;
 | |
| 		int maxValue = 0;
 | |
| 		int step = 0;
 | |
| 		int default = 0;
 | |
| 		int currentValue = 0;
 | |
| 	};
 | |
| 
 | |
| 	MFGrabber();
 | |
| 	~MFGrabber() override;
 | |
| 
 | |
| 	void receive_image(const void *frameImageBuffer, int size);
 | |
| 	void setDevice(const QString& device);
 | |
| 	bool setInput(int input) override;
 | |
| 	bool setWidthHeight(int width, int height) override;
 | |
| 	void setEncoding(QString enc);
 | |
| 	void setBrightnessContrastSaturationHue(int brightness, int contrast, int saturation, int hue);
 | |
| 	void setSignalThreshold(double redSignalThreshold, double greenSignalThreshold, double blueSignalThreshold, int noSignalCounterThreshold);
 | |
| 	void setSignalDetectionOffset( double verticalMin, double horizontalMin, double verticalMax, double horizontalMax);
 | |
| 	void setSignalDetectionEnable(bool enable);
 | |
| 	bool reload(bool force = false);
 | |
| 
 | |
| 	///
 | |
| 	/// @brief Discover available Media Foundation USB devices (for configuration).
 | |
| 	/// @param[in] params Parameters used to overwrite discovery default behaviour
 | |
| 	/// @return A JSON structure holding a list of USB devices found
 | |
| 	///
 | |
| 	QJsonArray discover(const QJsonObject& params);
 | |
| 
 | |
| public slots:
 | |
| 	bool prepare();
 | |
| 	bool start();
 | |
| 	void stop();
 | |
| 	void newThreadFrame(Image<ColorRgb> image);
 | |
| 
 | |
| signals:
 | |
| 	void newFrame(const Image<ColorRgb> & image);
 | |
| 	void readError(const char* err);
 | |
| 
 | |
| private:
 | |
| 	bool init();
 | |
| 	void uninit();
 | |
| 	HRESULT init_device(QString device, DeviceProperties props);
 | |
| 	void enumVideoCaptureDevices();
 | |
| 	void start_capturing();
 | |
| 	void process_image(const void *frameImageBuffer, int size);
 | |
| 
 | |
| 	QString										_currentDeviceName,
 | |
| 												_newDeviceName;
 | |
| 	QMap<QString, QList<DeviceProperties>>		_deviceProperties;
 | |
| 	QMap<QString, QList<DeviceControls>>		_deviceControls;
 | |
| 	HRESULT										_hr;
 | |
| 	IMFSourceReader*							_sourceReader;
 | |
| 	SourceReaderCB*								_sourceReaderCB;
 | |
| 	EncoderThreadManager*						_threadManager;
 | |
| 	PixelFormat									_pixelFormat,
 | |
| 												_pixelFormatConfig;
 | |
| 	int											_lineLength,
 | |
| 												_frameByteSize,
 | |
| 												_noSignalCounterThreshold,
 | |
| 												_noSignalCounter,
 | |
| 												_brightness,
 | |
| 												_contrast,
 | |
| 												_saturation,
 | |
| 												_hue;
 | |
| 	QAtomicInt									_currentFrame;
 | |
| 	ColorRgb									_noSignalThresholdColor;
 | |
| 	bool										_signalDetectionEnabled,
 | |
| 												_noSignalDetected,
 | |
| 												_initialized,
 | |
| 												_reload;
 | |
| 	double										_x_frac_min,
 | |
| 												_y_frac_min,
 | |
| 												_x_frac_max,
 | |
| 												_y_frac_max;
 | |
| };
 |