From 7ce5f709803d7f3371ab95235872003b06156498 Mon Sep 17 00:00:00 2001 From: Spencer Brower Date: Thu, 15 Feb 2024 15:42:13 -0500 Subject: [PATCH] fix: Fixed a bug where filterchains wouldn't append properly. --- ffmpeg.nu | 32 +++++++++++++++++++++++++------ ffmpeg_test.nu | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 6 deletions(-) diff --git a/ffmpeg.nu b/ffmpeg.nu index 9f9b7be..e65b2a8 100644 --- a/ffmpeg.nu +++ b/ffmpeg.nu @@ -33,18 +33,24 @@ export def "run" [ } } +def "append last" [ + items: list +]: list -> list { + let list = $in; + + ($list | range 0..-2) | append [($list | default [] | last | append $items)] +} + export def "cmd filters append" [ - complex_filter: list + complex_filters: list ]: record -> record { update filters { |cmd| let filters = $in; if ($cmd.options.chain_filters) { - (($filters | range 0..-2) | append [ - (($filters | default [] | last) | append $complex_filter) - ]) + $filters | append last $complex_filters } else { - $filters | append [$complex_filter] + $filters | append [$complex_filters] } } } @@ -99,7 +105,21 @@ export def filterchain [ let original_option = $cmd.options.chain_filters; # TODO: Assign inputs and outputs - $cmd | update options.chain_filters { not $in } | do $filter | update options.chain_filters $original_option; + ( + $cmd + | update options.chain_filters { not $in } + | update filters { + let it = $in; + + if ($it | describe | str starts-with 'table') { + [$it [] ] + } else { + $it | append [[]] + } + } + | do $filter + | update options.chain_filters $original_option + ); } # Build a record representaion of a complex filter diff --git a/ffmpeg_test.nu b/ffmpeg_test.nu index f3b18b7..ff16413 100644 --- a/ffmpeg_test.nu +++ b/ffmpeg_test.nu @@ -176,3 +176,54 @@ def filterchain_concats_filters [] { options: { chain_filters: false } }; } + +#[test] +def filterchain_appends_current_filter [] { + let got = (cmd ['INPUT'] ['OUTPUT'] | fps 12 | filterchain { fps 25 -i ['in'] | loop 2 1 -o ['out']}); + + assert equal $got { + input: ['INPUT'] + filters: [ + [ + { + input: [] + name: 'fps' + params: [ + {param: 'fps' value: '12'} + ] + output: [] + } + ] + [ + { + input: ['in'] + name: 'fps' + params: [ + {param: 'fps' value: '25'} + ] + output: [] + } + #{ + # input: [] + # name: 'settb' + # params: [ + # {param: 'expr' value: '1/25'} + # ] + # output: [] + #} + { + input: [] + name: 'loop' + params: [ + {param: 'loop' value: 2} + {param: 'size' value: 1} + ] + output: ['out'] + } + ] + ] + output: ['OUTPUT'] + args: [] + options: { chain_filters: false } + }; +}