9a5875fa69fa2be5137c447cdae6a4fac1c18e1b
[daala.git] / tools / rd_collect.sh
1 #!/bin/bash
2 set -e
3
4 CODECS="<daala|av1|vp8|vp9|vp10|x264|x265|libjpeg|mozjpeg|theora|webp|bpg>"
5
6 if [ $# == 0 ]; then
7   echo "usage: DAALA_ROOT=<build_dir> $0 $CODECS *.y4m"
8   exit 1
9 fi
10
11 export CODEC=$1
12 shift
13
14 if [ $# == 0 ] || [[ ! $CODECS =~ [\<\|]$CODEC[\|\>] ]]; then
15   echo "usage: DAALA_ROOT=<build_dir> $0 $CODECS *.y4m"
16   exit 1
17 fi
18
19 if [ -z $DAALA_ROOT ]; then
20   DAALA_ROOT=.
21 fi
22
23 if [ -z $TOOLS_ROOT ]; then
24   TOOLS_ROOT=$DAALA_ROOT
25 fi
26
27 export EXTRA_OPTS=$EXTRA_OPTS
28
29 if [ ! -d $DAALA_ROOT ]; then
30   echo "Please set DAALA_ROOT to the location of your daala git clone"
31   exit 1
32 fi
33
34 case $CODEC in
35   daala)
36     if [ ! -f $DAALA_ROOT/config.h ]; then
37       echo "File not found $DAALA_ROOT/config.h"
38       echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
39       exit 1
40     fi
41
42     if [ -z "$ENCODER_EXAMPLE" ]; then
43       export ENCODER_EXAMPLE=$DAALA_ROOT/examples/encoder_example
44     fi
45
46     if [ ! -x "$ENCODER_EXAMPLE" ]; then
47       echo "Executable not found ENCODER_EXAMPLE=$ENCODER_EXAMPLE"
48       echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
49       exit 1
50     fi
51
52     if [ -z "$DUMP_VIDEO" ]; then
53       export DUMP_VIDEO=$DAALA_ROOT/examples/dump_video
54     fi
55
56     if [ ! -x "$DUMP_VIDEO" ]; then
57       echo "Executable not found DUMP_VIDEO=$DUMP_VIDEO"
58       echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
59       exit 1
60     fi
61
62     export RD_COLLECT_SUB=$(dirname "$0")/rd_collect_daala.sh
63     ;;
64   av1)
65     if [ -z $AOM_ROOT ] || [ ! -d $AOM_ROOT ]; then
66       echo "Please set AOM_ROOT to the location of your aom git clone"
67       exit 1
68     fi
69
70     if [ -z "$AOMENC" ]; then
71       export AOMENC=$AOM_ROOT/aomenc
72     fi
73
74     if [ -z "$AOMDEC" ]; then
75       export AOMDEC=$AOM_ROOT/aomdec
76     fi
77
78     if [ ! -x "$AOMENC" ]; then
79       echo "Executable not found AOMENC=$AOMENC"
80       echo "Do you have the right AOM_ROOT=$AOM_ROOT"
81       exit 1
82     fi
83
84     if [ ! -x "$AOMDEC" ]; then
85       echo "Executable not found AOMDEC=$AOMDEC"
86       echo "Do you have the right AOM_ROOT=$AOM_ROOT"
87       exit 1
88     fi
89
90     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_aom.sh
91     ;;
92   vp8 | vp9 | vp10)
93     if [ -z $LIBVPX_ROOT ] || [ ! -d $LIBVPX_ROOT ]; then
94       echo "Please set LIBVPX_ROOT to the location of your libvpx git clone"
95       exit 1
96     fi
97
98     if [ -z "$VPXENC" ]; then
99       export VPXENC=$LIBVPX_ROOT/vpxenc
100     fi
101
102     if [ -z "$VPXDEC" ]; then
103       export VPXDEC=$LIBVPX_ROOT/vpxdec
104     fi
105
106     if [ ! -x "$VPXENC" ]; then
107       echo "Executable not found VPXENC=$VPXENC"
108       echo "Do you have the right LIBVPX_ROOT=$LIBVPX_ROOT"
109       exit 1
110     fi
111
112     if [ ! -x "$VPXDEC" ]; then
113       echo "Executable not found VPXDEC=$VPXDEC"
114       echo "Do you have the right LIBVPX_ROOT=$LIBVPX_ROOT"
115       exit 1
116     fi
117
118     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_libvpx.sh
119     ;;
120   x264)
121     if [ -z $X264_ROOT ] || [ ! -d $X264_ROOT ]; then
122       echo "Please set X264_ROOT to the location of your x264 git clone"
123       exit 1
124     fi
125
126     if [ -z "$X264" ]; then
127       export X264=$X264_ROOT/x264
128     fi
129
130     if [ ! -x "$X264" ]; then
131       echo "Executable not found X264=$X264"
132       echo "Do you have the right X264_ROOT=$X264_ROOT"
133       exit 1
134     fi
135
136     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_x264.sh
137     ;;
138   x265)
139     if [ -z $X265_ROOT ] || [ ! -d $X265_ROOT ]; then
140       echo "Please set X265_ROOT to the location of your x265 hg checkout"
141       exit 1
142     fi
143
144     if [ -z "$X265" ]; then
145       export X265=$X265_ROOT/build/linux/x265
146     fi
147
148     if [ ! -x "$X265" ]; then
149       echo "Executable not found X265=$X265"
150       echo "Do you have the right X265_ROOT=$X265_ROOT"
151       exit 1
152     fi
153
154     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_x265.sh
155     ;;
156   libjpeg)
157     if [ -z "$YUVJPEG" ]; then
158       export YUVJPEG=$DAALA_ROOT/tools/yuvjpeg
159     fi
160
161     if [ -z "$JPEGYUV" ]; then
162       export JPEGYUV=$DAALA_ROOT/tools/jpegyuv
163     fi
164
165     if [ ! -x "$YUVJPEG" ]; then
166       echo "Executable not found YUVJPEG=$YUVJPEG"
167       echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
168       exit 1
169     fi
170
171     if [ ! -x "$JPEGYUV" ]; then
172       echo "Executable not found JPEGYUV=$JPEGYUV"
173       echo "Do you have the right DAALA_ROOT=$DAALA_ROOT"
174       exit 1
175     fi
176
177     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_jpeg.sh
178     ;;
179   mozjpeg)
180     if [ -z $MOZJPEG_ROOT ] || [ ! -d $MOZJPEG_ROOT ]; then
181       echo "Please set MOZJPEG_ROOT to the location of your mozjpeg git clone"
182       exit 1
183     fi
184
185     if [ -z "$YUVJPEG" ]; then
186       export YUVJPEG=$MOZJPEG_ROOT/yuvjpeg
187     fi
188
189     if [ -z "$JPEGYUV" ]; then
190       export JPEGYUV=$MOZJPEG_ROOT/jpegyuv
191     fi
192
193     if [ ! -x "$YUVJPEG" ]; then
194       echo "Executable not found YUVJPEG=$YUVJPEG"
195       echo "Do you have the right MOZJPEG_ROOT=$MOZJPEG_ROOT"
196       exit 1
197     fi
198
199     if [ ! -x "$JPEGYUV" ]; then
200       echo "Executable not found JPEGYUV=$JPEGYUV"
201       echo "Do you have the right MOZJPEG_ROOT=$MOZJPEG_ROOT"
202       exit 1
203     fi
204
205     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_jpeg.sh
206     ;;
207   theora)
208     if [ -z $THEORA_ROOT ] || [ ! -d $THEORA_ROOT ]; then
209       echo "Please set THEORA_ROOT to the location of your theora svn checkout"
210       exit 1
211     fi
212
213     if [ -z "$ENCODER_EXAMPLE" ]; then
214       export ENCODER_EXAMPLE=$THEORA_ROOT/examples/encoder_example
215     fi
216
217     if [ -z "$DUMP_VIDEO" ]; then
218       export DUMP_VIDEO=$THEORA_ROOT/examples/dump_video
219     fi
220
221     if [ ! -x "$ENCODER_EXAMPLE" ]; then
222       echo "Executable not found ENCODER_EXAMPLE=$ENCODER_EXAMPLE"
223       echo "Do you have the right THEORA_ROOT=$THEORA_ROOT"
224       exit 1
225     fi
226
227     if [ ! -x "$DUMP_VIDEO" ]; then
228       echo "Executable not found DUMP_VIDEO=$DUMP_VIDEO"
229       echo "Do you have the right THEORA_ROOT=$THEORA_ROOT"
230       exit 1
231     fi
232
233     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_theora.sh
234     ;;
235   webp)
236     if [ -z $WEBP_ROOT ] || [ ! -d $WEBP_ROOT ]; then
237       echo "Please set WEBP_ROOT to the location of your webp checkout"
238       exit 1
239     fi
240
241     if [ -z "$CWEBP" ]; then
242       export CWEBP=$WEBP_ROOT/examples/cwebp
243     fi
244
245     if [ -z "$DWEBP" ]; then
246       export DWEBP=$WEBP_ROOT/examples/dwebp
247     fi
248
249     if [ ! -x "$CWEBP" ]; then
250       echo "Executable not found CWEBP=$CWEBP"
251       echo "Do you have the right WEBP_ROOT=$WEBP_ROOT"
252       exit 1
253     fi
254
255     if [ ! -x "$DWEBP" ]; then
256       echo "Executable not found DWEBP=$DWEBP"
257       echo "Do you have the right WEBP_ROOT=$WEBP_ROOT"
258       exit 1
259     fi
260
261     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_webp.sh
262     ;;
263   bpg)
264     if [ -z $BPG_ROOT ] || [ ! -d $BPG_ROOT ]; then
265       echo "Please set BPG_ROOT to the location of your libbpg checkout"
266       exit 1
267     fi
268
269     if [ -z "$BPGENC" ]; then
270       export BPGENC=$BPG_ROOT/bpgenc
271     fi
272
273     if [ -z "$BPGDEC" ]; then
274       export BPGDEC=$BPG_ROOT/bpgdec
275     fi
276
277     if [ ! -x "$BPGENC" ]; then
278       echo "Executable not found BPGENC=$BPGENC"
279       echo "Do you have the right BPG_ROOT=$BPG_ROOT"
280       exit 1
281     fi
282
283     if [ ! -x "$BPGDEC" ]; then
284       echo "Executable not found BPGDEC=$BPGDEC"
285       echo "Do you have the right BPG_ROOT=$BPG_ROOT"
286       exit 1
287     fi
288
289     export CORES=1
290     export RD_COLLECT_SUB=$(dirname $0)/rd_collect_bpg.sh
291     ;;
292   *)
293     echo "Unknown codec: $CODEC"
294     exit 1
295 esac
296
297 if [ -z "$PLANE" ]; then
298   export PLANE=0
299 fi
300
301 if [ $PLANE != 0 ] && [ $PLANE != 1 ] && [ $PLANE != 2 ] &&
302   [ $PLANE != -1 ]; then
303   echo "Invalid plane $PLANE. Must be 0, 1, 2, or -1 (all planes)."
304   exit 1
305 fi
306
307 # TODO refactor these out of the daala project into a metrics project
308
309 if [ -z "$YUV2YUV4MPEG" ]; then
310   export YUV2YUV4MPEG=$TOOLS_ROOT/tools/yuv2yuv4mpeg
311 fi
312
313 if [ -z "$Y4M2PNG" ]; then
314   export Y4M2PNG=$TOOLS_ROOT/tools/y4m2png
315 fi
316
317 if [ -z "$PNG2Y4M" ]; then
318   export PNG2Y4M=$TOOLS_ROOT/tools/png2y4m
319 fi
320
321 if [ -z "$DUMP_PSNR" ]; then
322   export DUMP_PSNR=$TOOLS_ROOT/tools/dump_psnr
323 fi
324
325 if [ -z "$DUMP_PSNRHVS" ]; then
326   export DUMP_PSNRHVS=$TOOLS_ROOT/tools/dump_psnrhvs
327 fi
328
329 if [ -z "$DUMP_SSIM" ]; then
330   export DUMP_SSIM=$TOOLS_ROOT/tools/dump_ssim
331 fi
332
333 if [ -z "$DUMP_FASTSSIM" ]; then
334   export DUMP_FASTSSIM=$TOOLS_ROOT/tools/dump_fastssim
335 fi
336
337 if [ -z "$DUMP_CIEDE" ]; then
338   export DUMP_CIEDE=$(dirname $0)/dump_ciede2000.py
339 fi
340
341 if [ ! -x "$YUV2YUV4MPEG" ]; then
342   echo "Executable not found YUV2YUV4MPEG=$YUV2YUV4MPEG"
343   echo "Do you have the right TOOLS_ROOT=$TOOLS_ROOT"
344   exit 1
345 fi
346
347 if [ ! -x "$Y4M2PNG" ]; then
348   echo "Executable not found Y4M2PNG=$Y4M2PNG"
349   echo "Do you have the right TOOLS_ROOT=$TOOLS_ROOT"
350   exit 1
351 fi
352
353 if [ ! -x "$PNG2Y4M" ]; then
354   echo "Executable not found PNG2Y4M=$PNG2Y4M"
355   echo "Do you have the right TOOLS_ROOT=$TOOLS_ROOT"
356   exit 1
357 fi
358
359 if [ ! -x "$DUMP_PSNR" ]; then
360   echo "Executable not found DUMP_PSNR=$DUMP_PSNR"
361   echo "Do you have the right TOOLS_ROOT=$TOOLS_ROOT"
362   exit 1
363 fi
364
365 if [ ! -x "$DUMP_PSNRHVS" ]; then
366   echo "Executable not found DUMP_PSNRHVS=$DUMP_PSNRHVS"
367   echo "Do you have the right TOOLS_ROOT=$TOOLS_ROOT"
368   exit 1
369 fi
370
371 if [ ! -x "$DUMP_SSIM" ]; then
372   echo "Executable not found DUMP_FASTSSIM=$DUMP_SSIM"
373   echo "Do you have the right TOOLS_ROOT=$TOOLS_ROOT"
374   exit 1
375 fi
376
377 if [ ! -x "$DUMP_FASTSSIM" ]; then
378   echo "Executable not found DUMP_FASTSSIM=$DUMP_FASTSSIM"
379   echo "Do you have the right TOOLS_ROOT=$TOOLS_ROOT"
380   exit 1
381 fi
382
383 if [ -z "$CORES" ]; then
384   if [ "$(uname -s)" = "Darwin" ]; then
385     CORES=$(sysctl -n hw.ncpu)
386   else
387     CORES=$(grep -i processor /proc/cpuinfo | wc -l)
388   fi
389   #echo "CORES not set, using $CORES"
390 fi
391
392 find -L $@ -type f -name "*.y4m" -print0 | xargs -0 -n1 -P$CORES $RD_COLLECT_SUB