mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-05-14 16:07:50 +00:00
Change the preferredVideoQuality and maxReceiverVideoQuality values to Ultra HD resolutions. The requested resolution can be as high as 4K to facilitate VPaaS customers to request 4K. The sender video resolution will always max out at the value specified in the video constraints from config.js settings.
78 lines
2.5 KiB
JavaScript
78 lines
2.5 KiB
JavaScript
import { SET_CONFIG } from '../base/config';
|
|
import { PersistenceRegistry, ReducerRegistry, set } from '../base/redux';
|
|
|
|
import { SET_MAX_RECEIVER_VIDEO_QUALITY, SET_PREFERRED_VIDEO_QUALITY } from './actionTypes';
|
|
import { VIDEO_QUALITY_LEVELS } from './constants';
|
|
import { validateMinHeightForQualityLvl } from './functions';
|
|
import logger from './logger';
|
|
|
|
const DEFAULT_STATE = {
|
|
maxReceiverVideoQuality: VIDEO_QUALITY_LEVELS.ULTRA,
|
|
minHeightForQualityLvl: new Map(),
|
|
preferredVideoQuality: VIDEO_QUALITY_LEVELS.ULTRA
|
|
};
|
|
|
|
DEFAULT_STATE.minHeightForQualityLvl.set(360, VIDEO_QUALITY_LEVELS.STANDARD);
|
|
DEFAULT_STATE.minHeightForQualityLvl.set(720, VIDEO_QUALITY_LEVELS.HIGH);
|
|
|
|
|
|
// When the persisted state is initialized the current state (for example the deafault state) is erased.
|
|
// In order to workaround this issue we need additional state for the persisted properties.
|
|
PersistenceRegistry.register('features/video-quality-persistent-storage');
|
|
|
|
ReducerRegistry.register('features/video-quality-persistent-storage', (state = {}, action) => {
|
|
switch (action.type) {
|
|
case SET_PREFERRED_VIDEO_QUALITY: {
|
|
const { preferredVideoQuality } = action;
|
|
|
|
return {
|
|
...state,
|
|
persistedPrefferedVideoQuality: preferredVideoQuality
|
|
};
|
|
}
|
|
}
|
|
|
|
return state;
|
|
});
|
|
|
|
ReducerRegistry.register('features/video-quality', (state = DEFAULT_STATE, action) => {
|
|
switch (action.type) {
|
|
case SET_CONFIG:
|
|
return _setConfig(state, action);
|
|
case SET_MAX_RECEIVER_VIDEO_QUALITY:
|
|
return set(
|
|
state,
|
|
'maxReceiverVideoQuality',
|
|
action.maxReceiverVideoQuality);
|
|
case SET_PREFERRED_VIDEO_QUALITY: {
|
|
const { preferredVideoQuality } = action;
|
|
|
|
return {
|
|
...state,
|
|
preferredVideoQuality
|
|
};
|
|
}
|
|
}
|
|
|
|
return state;
|
|
});
|
|
|
|
/**
|
|
* Extracts the height to quality level mapping from the new config.
|
|
*
|
|
* @param {Object} state - The Redux state of feature base/lastn.
|
|
* @param {Action} action - The Redux action SET_CONFIG to reduce.
|
|
* @private
|
|
* @returns {Object} The new state after the reduction of the specified action.
|
|
*/
|
|
function _setConfig(state, { config }) {
|
|
const configuredMap = config?.videoQuality?.minHeightForQualityLvl;
|
|
const convertedMap = validateMinHeightForQualityLvl(configuredMap);
|
|
|
|
if (configuredMap && !convertedMap) {
|
|
logger.error('Invalid config value videoQuality.minHeightForQualityLvl');
|
|
}
|
|
|
|
return convertedMap ? set(state, 'minHeightForQualityLvl', convertedMap) : state;
|
|
}
|