fix(server): scale transcoded videos if dimensions are odd (#6461)

scale if odd resolution
This commit is contained in:
Mert
2024-01-17 22:16:44 -05:00
committed by GitHub
parent b98d1bf9d3
commit 9a2fa21b28
3 changed files with 106 additions and 4 deletions
+16 -4
View File
@@ -122,15 +122,24 @@ class BaseConfig implements VideoCodecSWConfig {
}
getTargetResolution(videoStream: VideoStreamInfo) {
let target;
if (this.config.targetResolution === 'original') {
return Math.min(videoStream.height, videoStream.width);
target = Math.min(videoStream.height, videoStream.width);
} else {
target = Number.parseInt(this.config.targetResolution);
}
return Number.parseInt(this.config.targetResolution);
if (target % 2 !== 0) {
target -= 1;
}
return target;
}
shouldScale(videoStream: VideoStreamInfo) {
return Math.min(videoStream.height, videoStream.width) > this.getTargetResolution(videoStream);
const oddDimensions = videoStream.height % 2 !== 0 || videoStream.width % 2 !== 0;
const largerThanTarget = Math.min(videoStream.height, videoStream.width) > this.getTargetResolution(videoStream);
return oddDimensions || largerThanTarget;
}
shouldToneMap(videoStream: VideoStreamInfo) {
@@ -146,7 +155,10 @@ class BaseConfig implements VideoCodecSWConfig {
getSize(videoStream: VideoStreamInfo) {
const smaller = this.getTargetResolution(videoStream);
const factor = Math.max(videoStream.height, videoStream.width) / Math.min(videoStream.height, videoStream.width);
const larger = Math.round(smaller * factor);
let larger = Math.round(smaller * factor);
if (larger % 2 !== 0) {
larger -= 1;
}
return this.isVideoVertical(videoStream) ? { width: smaller, height: larger } : { width: larger, height: smaller };
}