{"version":3,"file":"crt-filter-graph.mjs","names":[],"sources":["../../src/actions/crt-filter-graph.ts"],"sourcesContent":["import type { FilterChain, FilterGraph } from './filter-graph.js';\n\ninterface CrtFilterGraphOptions {\n  defaultFps?: number;\n  desiredFps?: number;\n  hBlur?: number;\n  curve?: number;\n  halationBlur?: number;\n  resolution?: [number, number];\n  image?: true;\n}\n\nexport const simpleFilterGraph = (\n  options: CrtFilterGraphOptions = {},\n): FilterGraph => {\n  const { resolution = [-2, 720], defaultFps = 25, desiredFps = 60 } = options;\n\n  const fpsChain: FilterChain = [\n    ['format', 'yuv420p'],\n    ['settb', { expr: 'AVTB' }],\n    ['setpts', `${(defaultFps / desiredFps).toFixed(5)}*(PTS-STARTPTS)`],\n    ['fps', desiredFps],\n  ];\n\n  const rescale: FilterChain = [\n    ['scale', [...resolution, 'flags=lanczos']],\n    ['pad', ['iw+24', 'ih+24', '12', '12', 'black']],\n  ];\n\n  return [[[], [...rescale, ...fpsChain], []]];\n};\n\nexport const crtFilterGraph = (\n  options: CrtFilterGraphOptions = {},\n): FilterGraph => {\n  const {\n    defaultFps = 25,\n    desiredFps = 60,\n    hBlur = 2.5,\n    curve = 0.02,\n    halationBlur = 32,\n    resolution = [-2, 720],\n    image = false,\n  } = options;\n\n  const fpsChain: FilterChain = [\n    ['format', 'yuv420p'],\n    ['settb', { expr: 'AVTB' }],\n    ['setpts', `${(defaultFps / desiredFps).toFixed(5)}*(PTS-STARTPTS)`],\n    ['fps', desiredFps],\n  ];\n\n  const crt: FilterChain = [\n    ['gblur', { sigma: hBlur, sigmaV: 0, steps: 3 }],\n    ['vignette', 'PI/7.5'],\n    ['pad', ['iw+8', 'ih+8', '4', '4', 'black']],\n    ['lenscorrection', { k1: curve, k2: curve, i: 'bilinear' }],\n    ['crop', 'iw-8:ih-8'],\n  ];\n\n  const rescale: FilterChain = [\n    ['scale', [...resolution, 'flags=lanczos']],\n    ['pad', ['iw+24', 'ih+24', '12', '12', 'black']],\n  ];\n\n  const halation: FilterChain = [\n    ['blend', 'overlay'],\n    ['gblur', { sigma: halationBlur, steps: 3 }],\n    ['eq', { brightness: -0.5 }],\n  ];\n\n  return [\n    [[], [...crt, ['split', 3]], ['crt0', 'crt1', 'crt2']],\n    [['crt1'], [['rgbashift', { rh: 10, bv: 10, gh: -10 }]], ['hal1']],\n    [['crt0', 'hal1'], halation, ['hal2']],\n    [['crt2', 'hal2'], [['blend', 'screen']], ['final']],\n    [['final'], [...rescale, ...(image ? [] : fpsChain)], []],\n  ];\n};\n"],"mappings":";AAYA,MAAa,qBACX,UAAiC,CAAC,MAClB;CAChB,MAAM,EAAE,aAAa,CAAC,IAAI,GAAG,GAAG,aAAa,IAAI,aAAa,OAAO;CAErE,MAAM,WAAwB;EAC5B,CAAC,UAAU,SAAS;EACpB,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;EAC1B,CAAC,UAAU,IAAI,aAAa,WAAA,CAAY,QAAQ,CAAC,EAAE,gBAAgB;EACnE,CAAC,OAAO,UAAU;CACpB;CAOA,OAAO,CAAC;EAAC,CAAC;EAAG,CAAC,GAAG,CAJf,CAAC,SAAS,CAAC,GAAG,YAAY,eAAe,CAAC,GAC1C,CAAC,OAAO;GAAC;GAAS;GAAS;GAAM;GAAM;EAAO,CAAC,CAG1B,GAAG,GAAG,QAAQ;EAAG,CAAC;CAAC,CAAC;AAC7C;AAEA,MAAa,kBACX,UAAiC,CAAC,MAClB;CAChB,MAAM,EACJ,aAAa,IACb,aAAa,IACb,QAAQ,KACR,QAAQ,KACR,eAAe,IACf,aAAa,CAAC,IAAI,GAAG,GACrB,QAAQ,UACN;CAEJ,MAAM,WAAwB;EAC5B,CAAC,UAAU,SAAS;EACpB,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;EAC1B,CAAC,UAAU,IAAI,aAAa,WAAA,CAAY,QAAQ,CAAC,EAAE,gBAAgB;EACnE,CAAC,OAAO,UAAU;CACpB;CAEA,MAAM,MAAmB;EACvB,CAAC,SAAS;GAAE,OAAO;GAAO,QAAQ;GAAG,OAAO;EAAE,CAAC;EAC/C,CAAC,YAAY,QAAQ;EACrB,CAAC,OAAO;GAAC;GAAQ;GAAQ;GAAK;GAAK;EAAO,CAAC;EAC3C,CAAC,kBAAkB;GAAE,IAAI;GAAO,IAAI;GAAO,GAAG;EAAW,CAAC;EAC1D,CAAC,QAAQ,WAAW;CACtB;CAEA,MAAM,UAAuB,CAC3B,CAAC,SAAS,CAAC,GAAG,YAAY,eAAe,CAAC,GAC1C,CAAC,OAAO;EAAC;EAAS;EAAS;EAAM;EAAM;CAAO,CAAC,CACjD;CAEA,MAAM,WAAwB;EAC5B,CAAC,SAAS,SAAS;EACnB,CAAC,SAAS;GAAE,OAAO;GAAc,OAAO;EAAE,CAAC;EAC3C,CAAC,MAAM,EAAE,YAAY,IAAK,CAAC;CAC7B;CAEA,OAAO;EACL;GAAC,CAAC;GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;GAAG;IAAC;IAAQ;IAAQ;GAAM;EAAC;EACrD;GAAC,CAAC,MAAM;GAAG,CAAC,CAAC,aAAa;IAAE,IAAI;IAAI,IAAI;IAAI,IAAI;GAAI,CAAC,CAAC;GAAG,CAAC,MAAM;EAAC;EACjE;GAAC,CAAC,QAAQ,MAAM;GAAG;GAAU,CAAC,MAAM;EAAC;EACrC;GAAC,CAAC,QAAQ,MAAM;GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC;GAAG,CAAC,OAAO;EAAC;EACnD;GAAC,CAAC,OAAO;GAAG,CAAC,GAAG,SAAS,GAAI,QAAQ,CAAC,IAAI,QAAS;GAAG,CAAC;EAAC;CAC1D;AACF"}