All files / src capabilities.ts

75.34% Statements 55/73
85.71% Branches 6/7
57.14% Functions 4/7
75.34% Lines 55/73

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 741x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 2x 2x 2x 2x 2x 2x 1x 1x 2x 2x 2x 2x 2x             2x 2x             2x 2x             2x  
import { FfmpegProcess } from './process'
import {
  FfmpegCodecs,
  FfmpegEncoders,
  FfmpegFilters,
  FfmpegFormats
} from './utils/data-types'
import {
  extractCodecs,
  extractEncoders,
  extractFilters,
  extractFormats
} from './utils/parsing'
import { nlRegexp } from './utils/regexp'
 
export class FfmpegCapabilities {
  #codecs: FfmpegCodecs | null = null
  #formats: FfmpegFormats | null = null
  #filters: FfmpegFilters | null = null
  #encoders: FfmpegEncoders | null = null
  #decoders: FfmpegEncoders | null = null
 
  private async getLines(arg: string): Promise<string[]> {
    let { stdout } = await new FfmpegProcess({
      args: [arg],
      captureStdout: true
    }).run()
 
    return stdout.split(nlRegexp) || []
  }
 
  async codecs() {
    // TODO note: if we ever check codecs, "copy" is also an option for output codec
 
    if (!this.#codecs) {
      this.#codecs = extractCodecs(await this.getLines('-codecs'))
    }
 
    return this.#codecs
  }
 
  async formats() {
    if (!this.#formats) {
      this.#formats = extractFormats(await this.getLines('-formats'))
    }
 
    return this.#formats
  }
 
  async filters() {
    if (!this.#filters) {
      this.#filters = extractFilters(await this.getLines('-filters'))
    }

    return this.#filters
  }
 
  async encoders() {
    if (!this.#encoders) {
      this.#encoders = extractEncoders(await this.getLines('-encoders'))
    }

    return this.#encoders
  }
 
  async decoders() {
    if (!this.#decoders) {
      this.#decoders = extractEncoders(await this.getLines('-decoders'))
    }

    return this.#decoders
  }
}