URI: 
       blind-primary-key - blind - suckless command-line video editing utility
  HTML git clone git://git.suckless.org/blind
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       blind-primary-key (3235B)
       ---
            1 #!/usr/bin/env bash
            2 
            3 set -e
            4 
            5 if printf '%s\n' "$0" | grep / >/dev/null 2>/dev/null; then
            6     export PATH="$(printf '%s\n' "$0" | tr '/\n' '\n/' | sed \$d | tr '/\n' '\n/'):${PATH}"
            7 fi
            8 
            9 pid=$$
           10 o='0 0 0 0'
           11 E='1 1 1 1'
           12 
           13 x=x; y=y; z=z
           14 ciexyy=0
           15 zflag=
           16 grey=0
           17 keep=0
           18 
           19 usage () {
           20         xyy="-z x1 y1 x2 y2 x3 y3 [white-x white-y]"
           21         xyz="X1 Y1 Z1 X2 Y2 Z2 X3 Y3 Z3 [white-X white-Y white-Z]"
           22         printf 'usage: %s [-1 | -2 | -3] [-gk] [%s | %s]\n' "$0" "$xyy" "$xyz" >&2
           23         exit 1
           24 }
           25 
           26 while ! test $# = 0; do
           27         if test "$1" = --; then
           28                 shift 1
           29                 break
           30         elif test "$(printf '%s\n' "$1" | sed 's/^\(.\).*$/\1/')" = -; then
           31                 arg="$(printf '%s\n' "$1" | sed 's/^.//')"
           32                 shift 1
           33                 while test -n "$arg"; do
           34                         flag="$(printf '%s\n' "$arg" | sed 's/^\(.\).*$/\1/')"
           35                         arg="$(printf '%s\n' "$arg" | sed 's/^.//')"
           36                         if test "$flag" = 1; then
           37                                 x=x; y=y; z=z
           38                         elif test "$flag" = 2; then
           39                                 x=y; y=z; z=x
           40                         elif test "$flag" = 3; then
           41                                 x=z; y=x; z=y
           42                         elif test "$flag" = g; then
           43                                 grey=1
           44                         elif test "$flag" = k; then
           45                                 keep=1
           46                         elif test "$flag" = z; then
           47                                 ciexyy=1
           48                         else
           49                                 usage
           50                         fi  
           51                 done
           52         else
           53                 break
           54         fi
           55 done
           56 
           57 a=$(( ( 3 - $ciexyy ) * 3 ))
           58 b=$(( ( 3 - $ciexyy ) * 4 ))
           59 if test $# != 0 && test $# != $a && test $# != $b; then
           60         usage
           61 elif test $ciexyy = 1 && test $# = 0; then
           62         usage
           63 fi
           64 
           65 read frames width height pixfmt < <(blind-read-head)
           66 
           67 if test $# = 0; then
           68         convert () { cat; }
           69         unconvert () { cat; }
           70 else
           71         if test $ciexyy = 1; then
           72                 zflag=-z
           73         fi
           74         convert () {
           75                 blind-affine-colour -al \
           76                         <(blind-colour-matrix -F "$pixfmt" $zflag -- "$@" | \
           77                                 blind-tee \
           78                                         >(blind-invert-matrix -e | \blind-to-named -a blind-${pid}-invmat) | \
           79                                         blind-repeat inf -)
           80         }
           81         unconvert () {
           82                 blind-affine-colour -al \
           83                         <(blind-from-named -a blind-${pid}-invmat \
           84                                 blind-arithm -xyz max <(blind-single-colour -w 3 -h 3 1) | \
           85                                 blind-repeat inf -)
           86         }
           87 fi
           88 
           89 if test $keep = 0; then
           90         primary () { blind-from-named -a blind-${pid}-$x "$@"; }
           91         keep_primary () { "$@"; }
           92 else
           93         primary () {
           94                 blind-from-named -a blind-${pid}-$x \
           95                         blind-tee >(blind-to-named -a blind-${pid}-k) | \
           96                         "$@"
           97         }
           98         keep_primary () {
           99                 if test $x = x; then
          100                         X=; Y=y; Z=z
          101                 elif test $x = y; then
          102                         X=x; Y=; Z=z
          103                 else
          104                         X=x; Y=y; Z=
          105                 fi
          106                 blind-from-named -f 7 -a blind-${pid}-k \
          107                         blind-arithm -a$X$Y$Z add /dev/fd/7 | \
          108                         "$@"
          109         }
          110 fi
          111 
          112 if test $grey = 0; then
          113         finalise () { unconvert; }
          114 else
          115         finalise () {
          116                 unconvert | blind-set-saturation <(blind-single-colour -f inf -w $width -h $height 0)
          117         }
          118 fi
          119 
          120 (blind-write-head $frames $width $height "$pixfmt" ; cat) | \
          121         convert "$@" | \
          122         blind-split-chans -c \
          123                 >(blind-to-named -a blind-${pid}-x) \
          124                 >(blind-to-named -a blind-${pid}-y) \
          125                 >(blind-to-named -a blind-${pid}-z) \
          126                 - | \
          127         blind-arithm mul \
          128                 <(blind-single-colour -f inf -w $width -h $height 0 0 0 1 | \
          129                         blind-arithm sub \
          130                                 <(primary blind-affine-colour -l \
          131                                         <(printf '%s %s %s %s\n' \
          132                                                 1 4 4 xyza \
          133                                                 $o $o $o $o \
          134                                                 $o $o $o $o \
          135                                                 $o $o $o $o \
          136                                                 $E $E $E $o | \
          137                                                 blind-from-text | \
          138                                                 blind-repeat inf -))) | \
          139         keep_primary \
          140         blind-from-named -f 8 -a blind-${pid}-$y blind-arithm add /dev/fd/8 | \
          141         blind-from-named -f 9 -a blind-${pid}-$z blind-arithm add /dev/fd/9 | \
          142         finalise