]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/ffmpeg/ffprobe-utils.ts
Prevent weird error on sync failure
[github/Chocobozzz/PeerTube.git] / server / helpers / ffmpeg / ffprobe-utils.ts
index 7bcd27665829756d5b8b4706ff09c97573b20445..9746c2046e815a84f8909a63cac982e40f24555a 100644 (file)
@@ -91,11 +91,12 @@ async function getAudioStreamCodec (path: string, existingProbe?: FfprobeData) {
 // ---------------------------------------------------------------------------
 
 function computeResolutionsToTranscode (options: {
-  inputResolution: number
+  input: number
   type: 'vod' | 'live'
-  includeInputResolution: boolean
+  includeInput: boolean
+  strictLower: boolean
 }) {
-  const { inputResolution, type, includeInputResolution } = options
+  const { input, type, includeInput, strictLower } = options
 
   const configResolutions = type === 'vod'
     ? CONFIG.TRANSCODING.RESOLUTIONS
@@ -117,13 +118,18 @@ function computeResolutionsToTranscode (options: {
   ]
 
   for (const resolution of availableResolutions) {
-    if (configResolutions[resolution + 'p'] === true && inputResolution > resolution) {
-      resolutionsEnabled.add(resolution)
-    }
+    // Resolution not enabled
+    if (configResolutions[resolution + 'p'] !== true) continue
+    // Too big resolution for input file
+    if (input < resolution) continue
+    // We only want lower resolutions than input file
+    if (strictLower && input === resolution) continue
+
+    resolutionsEnabled.add(resolution)
   }
 
-  if (includeInputResolution) {
-    resolutionsEnabled.add(inputResolution)
+  if (includeInput) {
+    resolutionsEnabled.add(input)
   }
 
   return Array.from(resolutionsEnabled)
@@ -157,7 +163,7 @@ async function canDoQuickAudioTranscode (path: string, probe?: FfprobeData): Pro
 
   const channelLayout = parsedAudio.audioStream['channel_layout']
   // Causes playback issues with Chrome
-  if (!channelLayout || channelLayout === 'unknown') return false
+  if (!channelLayout || channelLayout === 'unknown' || channelLayout === 'quad') return false
 
   return true
 }