2 # Copyright (c) 2016 Michael David Adams
4 cmd_dir
=$
(dirname "$0") ||
exit 1
5 source "$cmd_dir/utilities" ||
exit 1
6 source "$cmd_dir/jpcod" ||
exit 1
8 set_source_and_build_dirs || panic
"cannot set source and build directories"
13 export IMGINFO_COMMAND
="$abs_top_builddir/src/appl/imginfo"
14 JASPER
="$abs_top_builddir/src/appl/jasper"
16 ################################################################################
18 ################################################################################
39 TILEGRDTLX
=$IMGAREATLX
40 TILEGRDTLY
=$IMGAREATLY
72 ################################################################################
74 ################################################################################
81 IMGNAME
=`basename $INFILE`
83 if [ -n "$ROIRECT" ]; then
87 if [ $DEBUG -ne 0 ]; then
88 ENCOPTS
="$ENCOPTS -O debug=$DEBUG"
91 ENCOPTS
="$ENCOPTS -T $FMT"
93 if [ $IMGAREATLX -ne 0 -o $IMGAREATLY -ne 0 ]; then
94 ENCOPTS
="$ENCOPTS -O imgareatlx=$IMGAREATLX"
95 ENCOPTS
="$ENCOPTS -O imgareatly=$IMGAREATLY"
97 if [ $TILEWIDTH -ne 0 -o $TILEHEIGHT -ne 0 ]; then
98 ENCOPTS
="$ENCOPTS -O tilewidth=$TILEWIDTH"
99 ENCOPTS
="$ENCOPTS -O tileheight=$TILEHEIGHT"
101 if [ $TILEGRDTLX -ne 0 -o $TILEGRDTLY -ne 0 ]; then
102 ENCOPTS
="$ENCOPTS -O tilegrdtlx=$TILEGRDTLX"
103 ENCOPTS
="$ENCOPTS -O tilegrdtly=$TILEGRDTLY"
105 if [ $PRCWIDTH -ne 0 -o $PRCHEIGHT -ne 0 ]; then
106 ENCOPTS
="$ENCOPTS -O prcwidth=$PRCWIDTH"
107 ENCOPTS
="$ENCOPTS -O prcheight=$PRCHEIGHT"
109 ENCOPTS
="$ENCOPTS -O cblkwidth=$CBLKWIDTH"
110 ENCOPTS
="$ENCOPTS -O cblkheight=$CBLKHEIGHT"
112 if [ $RATE = 0 ]; then
113 ENCOPTS
="$ENCOPTS -O mode=int"
115 if [ $MODE = int
]; then
116 # Use the 5/3 wavelet transform for lossy coding.
117 ENCOPTS
="$ENCOPTS -O mode=int"
119 # Do not use the 5/3 wavelet transform for lossy coding.
120 ENCOPTS
="$ENCOPTS -O mode=real"
122 ENCOPTS
="$ENCOPTS -O rate=$RATE"
124 if [ -n "$ILYRRATES" ]; then
125 ENCOPTS
="$ENCOPTS -O ilyrrates=$ILYRRATES"
128 ENCOPTS
="$ENCOPTS -O numrlvls=$NUMRLVLS"
129 ENCOPTS
="$ENCOPTS -O numgbits=$NUMGBITS"
130 ENCOPTS
="$ENCOPTS -O prg=$PRG"
132 if [ $ALLOWMCT -eq 0 ]; then
133 ENCOPTS
="$ENCOPTS -O nomct"
136 if [ $LAZY -ne 0 ]; then
137 ENCOPTS
="$ENCOPTS -O lazy"
139 if [ $TERMALL -ne 0 ]; then
140 ENCOPTS
="$ENCOPTS -O termall"
142 if [ $PTERM -ne 0 ]; then
143 ENCOPTS
="$ENCOPTS -O pterm"
145 if [ $SOP -ne 0 ]; then
146 ENCOPTS
="$ENCOPTS -O sop"
148 if [ $EPH -ne 0 ]; then
149 ENCOPTS
="$ENCOPTS -O eph"
151 if [ $SEGSYM -ne 0 ]; then
152 ENCOPTS
="$ENCOPTS -O segsym"
154 if [ $VCAUSAL -ne 0 ]; then
155 ENCOPTS
="$ENCOPTS -O vcausal"
157 if [ $RESETPROB -ne 0 ]; then
158 ENCOPTS
="$ENCOPTS -O resetprob"
161 if [ $VERBOSE -ne 0 ]; then
162 echo "Running JasPer encoder"
163 echo "$JASPER $ENCOPTS < $INFILE > $OUTFILE"
165 $JASPER $ENCOPTS < $INFILE > $OUTFILE
169 ################################################################################
171 ################################################################################
176 IMGFMT
=$
(image_info
"$INFILE" format
) || \
177 panic
"cannot get image format"
178 INFILESUFFIX
=`getsuffix $INFILE`
179 INFILEBASE
=`stripsuffix $INFILE`
181 if [ $IMGFMT != pgx
]; then
182 if [ $IMGPREC -ne 8 -a $IMGPREC -ne 24 ]; then
183 # unsupported precision
188 if [ $IMGFMT != pnm
-a $IMGFMT != pgx
]; then
192 echo suffix
$INFILESUFFIX
193 if [ "$INFILESUFFIX" = pnm
]; then
194 if [ $IMGTYPE = rgb
]; then
195 TMPINFILE
=$TMPDIR/tmp_image.ppm
197 TMPINFILE
=$TMPDIR/tmp_image.pgm
199 ln -s $INFILE $TMPINFILE
203 if [ $IMGTYPE = rgb
]; then
209 if [ $RATE != "0" ]; then
210 BITRATE
=`evalexpr "$RATE * $PREC"`
217 ENCOPTS
="$ENCOPTS -verbose off"
219 if [ $FMT = jp2
]; then
220 ENCOPTS
="$ENCOPTS -file_format on"
223 if [ $IMGAREATLX -ne 0 -o $IMGAREATLY -ne 0 ]; then
224 ENCOPTS
="$ENCOPTS -ref $IMGAREATLX $IMGAREATLY"
226 if [ $TILEWIDTH -ne 0 -o $TILEHEIGHT -ne 0 ]; then
227 ENCOPTS
="$ENCOPTS -tiles $TILEWIDTH $TILEHEIGHT"
229 if [ $TILEGRDTLX -ne 0 -o $TILEGRDTLY -ne 0 ]; then
230 ENCOPTS
="$ENCOPTS -tref $TILEGRDTLX $TILEGRDTLY"
232 if [ $PRCWIDTH -ne 0 -o $PRCHEIGHT -ne 0 ]; then
233 ENCOPTS
="$ENCOPTS -Cpp $PRCWIDTH $PRCHEIGHT"
235 ENCOPTS
="$ENCOPTS -Cblksiz $CBLKWIDTH $CBLKHEIGHT"
237 if [ $RATE = 0 ]; then
238 ENCOPTS
="$ENCOPTS -lossless on"
240 if [ $MODE = int
]; then
241 # Use the 5/3 wavelet transform for lossy coding.
242 ENCOPTS
="$ENCOPTS -Ffilters w5x3"
243 ENCOPTS
="$ENCOPTS -Qtype reversible"
245 # Do not use the 5/3 wavelet transform for lossy coding.
246 ENCOPTS
="$ENCOPTS -Ffilters w9x7"
248 ENCOPTS
="$ENCOPTS -rate $BITRATE"
250 if [ -n "$ILYRRATES" ]; then
251 BUF
=`echo "$ILYRRATES" | csltowsl | scalewsl $PREC`
252 ENCOPTS
="$ENCOPTS -Alayers $BUF"
254 ENCOPTS
="$ENCOPTS -Alayers 100 +1"
257 ENCOPTS
="$ENCOPTS -Wlev $NUMDLVLS"
258 ENCOPTS
="$ENCOPTS -Qguard_bits $NUMGBITS"
262 ENCOPTS
="$ENCOPTS -Aptype layer"
265 ENCOPTS
="$ENCOPTS -Aptype res"
268 ENCOPTS
="$ENCOPTS -Aptype res-pos"
271 ENCOPTS
="$ENCOPTS -Aptype pos-comp"
274 ENCOPTS
="$ENCOPTS -Aptype comp-pos"
277 echo "ERROR: unknown progression"
282 if [ $IMGTYPE = rgb
]; then
283 if [ $ALLOWMCT -eq 0 ]; then
284 ENCOPTS
="$ENCOPTS -Mct off"
286 ENCOPTS
="$ENCOPTS -Mct on"
290 if [ $LAZY -ne 0 ]; then
291 ENCOPTS
="$ENCOPTS -Cbypass"
293 if [ $TERMALL -ne 0 ]; then
294 #ENCOPTS="$ENCOPTS -Creg_term"
295 ENCOPTS
="$ENCOPTS -Cterminate"
297 if [ $PTERM -ne 0 ]; then
298 ENCOPTS
="$ENCOPTS -Cterm_type predict"
300 ENCOPTS
="$ENCOPTS -Cterm_type near_opt"
302 if [ $SOP -ne 0 ]; then
303 ENCOPTS
="$ENCOPTS -Psop"
305 if [ $EPH -ne 0 ]; then
306 ENCOPTS
="$ENCOPTS -Peph"
308 if [ $SEGSYM -ne 0 ]; then
309 ENCOPTS
="$ENCOPTS -Cseg_symbol"
311 if [ $VCAUSAL -ne 0 ]; then
312 ENCOPTS
="$ENCOPTS -Ccausal"
314 if [ $RESETPROB -ne 0 ]; then
315 ENCOPTS
="$ENCOPTS -CresetMQ"
317 if [ -n "$ROIRECT" ]; then
318 ROITLX
=`echo $ROIRECT | csltowsl | awk '{print $1}' | scalewsl $IMGWIDTH | realtoint`
319 ROITLY
=`echo $ROIRECT | csltowsl | awk '{print $2}' | scalewsl $IMGHEIGHT | realtoint`
320 ROIWIDTH
=`echo $ROIRECT | csltowsl | awk '{print $3}' | scalewsl $IMGWIDTH | realtoint`
321 ROIHEIGHT
=`echo $ROIRECT | csltowsl | awk '{print $4}' | scalewsl $IMGHEIGHT | realtoint`
322 ENCOPTS
="$ENCOPTS -Rroi R $ROITLX $ROITLY $ROIWIDTH $ROIHEIGHT"
324 if [ $VERBOSE -ne 0 ]; then
325 echo "Running JJ2000 encoder"
326 echo "$JJCOD enc -i $INFILE -o $OUTFILE $ENCOPTS > $ERRFILE 2> $ERRFILE"
328 CLASSPATH
=$JJ2KTOPDIR/jj2000-
$JJ2KVER.jar
331 -i $INFILE -o $OUTFILE $ENCOPTS > $ERRFILE 2> $ERRFILE
335 ################################################################################
337 ################################################################################
342 if [ $FMT != jpc
]; then
343 echo "VM encoder cannot handle JP2 format"
346 IMGFMT
=$
(image_info
"$INFILE" format
) || \
347 panic
"cannot get image format"
348 if [ $IMGFMT != pnm
-a $IMGFMT != pgx
]; then
351 if [ -n "$ROIRECT" ]; then
355 IMGNAME
=`basename $INFILE`
357 if [ $IMGTYPE = rgb
]; then
362 if [ $RATE != "0" ]; then
363 BITRATE
=`evalexpr "$RATE * $PREC"`
370 if [ $DEBUG -ne 0 ]; then
373 ENCOPTS
="$ENCOPTS -quiet"
376 if [ $IMGAREATLX -ne 0 -o $IMGAREATLY -ne 0 ]; then
377 ENCOPTS
="$ENCOPTS -Fref $IMGAREATLY $IMGAREATLX"
379 if [ $TILEWIDTH -ne 0 -o $TILEHEIGHT -ne 0 ]; then
380 ENCOPTS
="$ENCOPTS -Ftiles $TILEHEIGHT $TILEWIDTH"
382 if [ $TILEGRDTLX -ne 0 -o $TILEGRDTLY -ne 0 ]; then
383 ENCOPTS
="$ENCOPTS -Ftile_ref $TILEGRDTLY $TILEGRDTLX"
385 if [ $PRCWIDTH -ne 0 -o $PRCHEIGHT -ne 0 ]; then
386 ENCOPTS
="$ENCOPTS -Cpp ${PRCWIDTH}x$PRCHEIGHT"
388 ENCOPTS
="$ENCOPTS -Cblk ${CBLKHEIGHT}x$CBLKWIDTH"
390 ENCOPTS
="$ENCOPTS -Flev $NUMDLVLS"
391 ENCOPTS
="$ENCOPTS -Fguard_bits $NUMGBITS"
392 ENCOPTS
="$ENCOPTS -Bcomment Generated_by_VM_9.0"
394 # if [ $DERIVEDSTEPSIZES -ne 0 ]; then
395 # ENCOPTS="$ENCOPTS -Fimplicit Y"
398 if [ $LAZY -ne 0 ]; then
399 ENCOPTS
="$ENCOPTS -Clazy"
401 if [ $TERMALL -ne 0 ]; then
402 if [ $PTERM -eq 0 ]; then
403 echo "WARNING: VM cannot use both TERMALL and no PTERM"
405 ENCOPTS
="$ENCOPTS -Cer_term Y"
407 ENCOPTS
="$ENCOPTS -Cer_term N"
409 if [ $PTERM -ne 0 ]; then
410 if [ $TERMALL -eq 0 ]; then
411 echo "WARNING: VM cannot use PTERM without TERMALL"
414 if [ $SOP -ne 0 ]; then
415 ENCOPTS
="$ENCOPTS -Bresync Y"
417 if [ $EPH -ne 0 ]; then
418 ENCOPTS
="$ENCOPTS -Beph Y"
420 if [ $SEGSYM -ne 0 ]; then
421 ENCOPTS
="$ENCOPTS -Csegmark Y"
423 if [ $VCAUSAL -ne 0 ]; then
424 ENCOPTS
="$ENCOPTS -Ccausal Y"
426 if [ $RESETPROB -ne 0 ]; then
427 echo "warning: The VM has term all enabled!"
428 ENCOPTS
="$ENCOPTS -Cparallel Y"
431 if [ $ALLOWMCT -ne 0 ]; then
432 if [ $IMGTYPE = rgb
]; then
433 ENCOPTS
="$ENCOPTS -Mycc"
439 ENCOPTS
="$ENCOPTS -Corder L"
442 ENCOPTS
="$ENCOPTS -Corder RL"
445 ENCOPTS
="$ENCOPTS -Corder RP"
448 ENCOPTS
="$ENCOPTS -Corder PC"
451 ENCOPTS
="$ENCOPTS -Corder CP"
454 echo "ERROR: unknown progression"
459 if [ $RATE = 0 ]; then
460 ENCOPTS
="$ENCOPTS -Frev"
462 if [ $MODE = int
]; then
463 # Use the 5/3 wavelet transform for lossy coding.
464 ENCOPTS
="$ENCOPTS -Frev"
466 # Do not use the 5/3 wavelet transform for lossy coding.
469 ENCOPTS
="$ENCOPTS -rate $BITRATE"
472 ENCOPTS
="-o $OUTFILE $ENCOPTS"
473 if [ $IMGTYPE = rgb
]; then
474 REDINFILE
=$TMPDIR/vmenc_r.pgm
475 GRNINFILE
=$TMPDIR/vmenc_g.pgm
476 BLUINFILE
=$TMPDIR/vmenc_b.pgm
477 ppmtorgb
$INFILE $REDINFILE $GRNINFILE $BLUINFILE
478 ENCOPTS
="-i $REDINFILE $GRNINFILE $BLUINFILE $ENCOPTS"
480 ENCOPTS
="-i $INFILE $ENCOPTS"
482 if [ $VERBOSE -ne 0 ]; then
483 echo "Running VM encoder"
484 echo "$VMENC $ENCOPTS > $ERRFILE 2> $ERRFILE"
486 $VMENC $ENCOPTS > $ERRFILE 2> $ERRFILE
490 ################################################################################
492 ################################################################################
498 INFILESUFFIX
=`getsuffix $INFILE`
499 INFILEBASE
=`stripsuffix $INFILE`
501 if [ -n "$ROIRECT" ]; then
505 if [ $IMGPREC -ne 8 -a $IMGPREC -ne 24 ]; then
506 # unsupported precision
509 if [ $IMGTYPE = rgb
]; then
514 if [ $RATE = 0 ]; then
520 BITRATE
=`evalexpr "$RATE * $PREC"`
522 echo suffix
$INFILESUFFIX
523 if [ "$INFILESUFFIX" = pnm
]; then
524 if [ $IMGTYPE = rgb
]; then
525 TMPINFILE
=$TMPDIR/tmp_image.ppm
527 TMPINFILE
=$TMPDIR/tmp_image.pgm
529 ln -s $INFILE $TMPINFILE
533 ENCOPTS
="$ENCOPTS -precise"
534 ENCOPTS
="$ENCOPTS -full"
535 if [ $IMGAREATLX -ne 0 -o $IMGAREATLY -ne 0 ]; then
536 ENCOPTS
="$ENCOPTS Sorigin={$IMGAREATLY,$IMGAREATLX}"
538 if [ $TILEWIDTH -ne 0 -o $TILEHEIGHT -ne 0 ]; then
539 ENCOPTS
="$ENCOPTS Stiles={$TILEHEIGHT,$TILEWIDTH}"
541 if [ $TILEGRDTLX -ne 0 -o $TILEGRDTLY -ne 0 ]; then
542 ENCOPTS
="$ENCOPTS Stile_origin={$TILEGRDTLY,$TILEGRDTLX}"
544 if [ $PRCWIDTH -ne 0 -o $PRCHEIGHT -ne 0 ]; then
545 ENCOPTS
="$ENCOPTS Cprecincts={$PRCWIDTH,$PRCHEIGHT}"
547 ENCOPTS
="$ENCOPTS Cblk={$CBLKHEIGHT,$CBLKWIDTH}"
549 if [ $MODE = int
]; then
550 ENCOPTS
="$ENCOPTS Creversible=yes"
551 ENCOPTS
="$ENCOPTS Ckernels=W5X3"
553 ENCOPTS
="$ENCOPTS Creversible=no"
554 ENCOPTS
="$ENCOPTS Ckernels=W9X7"
556 if [ -n "$ILYRRATES" ]; then
557 BUF
=`echo "${ILYRRATES},$RATE" | csltowsl | scalewsl $PREC | wsltocsl`
558 ENCOPTS
="$ENCOPTS -rate $BUF"
560 #if [ $LOSSLESS -eq 0 ]; then
561 ENCOPTS
="$ENCOPTS -rate $BITRATE"
565 ENCOPTS
="$ENCOPTS Clevels=$NUMDLVLS"
566 ENCOPTS
="$ENCOPTS Qguard=$NUMGBITS"
570 ENCOPTS
="$ENCOPTS Corder=LRCP"
573 ENCOPTS
="$ENCOPTS Corder=RLCP"
576 ENCOPTS
="$ENCOPTS Corder=RPCL"
579 ENCOPTS
="$ENCOPTS Corder=PCRL"
582 ENCOPTS
="$ENCOPTS Corder=CPRL"
585 echo "ERROR: unknown progression"
590 if [ $ALLOWMCT -eq 0 ]; then
591 ENCOPTS
="$ENCOPTS Cycc=yes"
593 ENCOPTS
="$ENCOPTS Cycc=no"
598 if [ $LAZY -ne 0 ]; then
599 MODES
="$MODES${MODESEP}BYPASS"
602 if [ $PTERM -ne 0 -o $TERMALL -ne 0 ]; then
603 MODES
="$MODES${MODESEP}ERTERM"
606 if [ $SEGSYM -ne 0 ]; then
607 MODES
="$MODES${MODESEP}SEGMARK"
610 if [ $VCAUSAL -ne 0 ]; then
611 MODES
="$MODES${MODESEP}CAUSAL"
614 if [ $RESETPROB -ne 0 ]; then
615 MODES
="$MODES${MODESEP}RESET"
618 if [ -n "$MODES" ]; then
619 ENCOPTS
="$ENCOPTS Cmodes=$MODES"
622 if [ $SOP -ne 0 ]; then
623 ENCOPTS
="$ENCOPTS Cuse_sop=yes"
625 if [ $EPH -ne 0 ]; then
626 ENCOPTS
="$ENCOPTS Cuse_eph=yes"
628 if [ $VERBOSE -ne 0 ]; then
629 echo "Running Kakadu encoder"
630 echo "$KAKADUENC -quiet -i `pnutod $INFILE` -o `pnutod $OUTFILE` $ENCOPTS >> $ERRFILE 2>> $ERRFILE"
632 $KAKADUENC -quiet -i `pnutod $INFILE` -o `pnutod $OUTFILE` $ENCOPTS >> $ERRFILE 2>> $ERRFILE
636 ################################################################################
642 oj_encode_opts
+=(-i "$INFILE")
643 oj_encode_opts
+=(-o "$OUTFILE")
644 oj_encode_opts
+=(-OutFor "$FMT")
646 if [ "$RATE" = 0 ]; then
653 if [ "$LOSSLESS" -eq 0 -a "$MODE" != int
]; then
657 if [ -n "$ILYRRATES" ]; then
658 BUF
=$
(echo "${ILYRRATES},$RATE" | csltowsl | reciprocatewsl | wsltocsl
) || panic
659 oj_encode_opts
+=(-r "$BUF")
661 BUF
=$
(echo "$RATE" | reciprocatewsl
) || panic
662 oj_encode_opts
+=(-r "$BUF")
664 oj_encode_opts
+=(-b "$CBLKHEIGHT,$CBLKWIDTH")
665 if [ $PRCWIDTH -ne 0 -o $PRCHEIGHT -ne 0 ]; then
666 oj_encode_opts
+=(-c "[$PRCWIDTH,$PRCHEIGHT]")
668 if [ $TILEWIDTH -ne 0 -o $TILEHEIGHT -ne 0 ]; then
669 oj_encode_opts
+=(-t "$TILEWIDTH,$TILEHEIGHT")
671 if [ $TILEWIDTH -ne 0 -o $TILEHEIGHT -ne 0 ]; then
672 oj_encode_opts
+=(-T "$TILEWIDTH,$TILEHEIGHT")
674 if [ $IMGTYPE = rgb
]; then
675 if [ $ALLOWMCT -eq 0 ]; then
676 oj_encode_opts
+=(-mct 0)
678 oj_encode_opts
+=(-mct 1)
681 PRG
=$
(echo "$PRG" | to_upper
) || panic
682 oj_encode_opts
+=(-p "$PRG")
684 echo "Running $oj_encode ${oj_encode_opts[@]}"
685 "$oj_encode" "${oj_encode_opts[@]}"
688 ################################################################################
690 ################################################################################
692 oj_encode
="opj2_compress"
694 [ -d $TMPDIR ] || mkdir
-p $TMPDIR
700 while [ $# -gt 0 ]; do
770 echo "unknown option $TAG"
777 if [ $VERBOSE -ne 0 ]; then
784 if [ -z "$SOFTWARE" ]; then
785 echo "ERROR: NO SOFTWARE SELECTED"
788 if [ -z "$INFILE" ]; then
789 echo "ERROR: NO INPUT FILE SPECIFIED"
792 if [ -z "$OUTFILE" ]; then
793 echo "ERROR: NO OUTPUT FILE SPECIFIED"
797 if [ ! -f $INFILE ]; then
798 echo "ERROR: INPUT FILE DOES NOT EXIST"
802 if [ $RATE = 0 -a $MODE = real
]; then
803 echo "ERROR: CANNOT USE REAL MODE FOR LOSSLESS CODING"
807 if [ $RATE = 0 ]; then
811 NUMDLVLS
=`expr $NUMRLVLS - 1`
813 IMGFMT
=$
(image_info
"$INFILE" format
) || panic
"cannot get image format"
814 IMGTYPE
=$
(image_info
"$INFILE" type) || panic
"cannot get image type"
815 if [ -z "$IMGTYPE" ]; then
816 echo "ERROR: CANNOT DETERMINE IMAGE TYPE"
819 IMGWIDTH
=$
(image_info
"$INFILE" width
) || panic
"cannot get image width"
820 IMGHEIGHT
=$
(image_info
"$INFILE" height
) || panic
"cannot get image height"
821 IMGPREC
=$
(image_info
"$INFILE" depth
) || panic
"cannot get image depth"
837 echo "ERROR: INVALID SOFTWARE SPECIFIER"
843 if [ ! -f $OUTFILE ]; then
844 if [ $STATUS -eq 0 ]; then
848 OUTFILESIZE
=`wc -c $OUTFILE | awk '{print $1}' -`
849 if [ $OUTFILESIZE -eq 0 ]; then
850 if [ $STATUS -eq 0 ]; then
856 if [ $STATUS -ne 0 ]; then
857 if [ $STATUS -eq 2 ]; then
858 echo "WARNING: ENCODER FEATURE NOT SUPPORTED"
860 echo "ERROR: ENCODER FAILURE"