source: palm/trunk/SCRIPTS/process_dvr_output @ 4849

Last change on this file since 4849 was 4843, checked in by raasch, 4 years ago

local namelist parameter added to switch off the module although the respective module namelist appears in the namelist file, further copyright updates

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 12.7 KB
Line 
1#!/bin/ksh
2#--------------------------------------------------------------------------------#
3# This file is part of the PALM model system.
4#
5# PALM is free software: you can redistribute it and/or modify it under the terms
6# of the GNU General Public License as published by the Free Software Foundation,
7# either version 3 of the License, or (at your option) any later version.
8#
9# PALM is distributed in the hope that it will be useful, but WITHOUT ANY
10# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License along with
14# PALM. If not, see <http://www.gnu.org/licenses/>.
15#
16# Copyright 1997-2021  Leibniz Universitaet Hannover
17#--------------------------------------------------------------------------------#
18#
19# Current revisions:
20# -----------------
21#
22#
23# Former revisions:
24# -----------------
25# $Id: process_dvr_output 4843 2021-01-15 15:22:11Z raasch $
26# Corrected "Former revisions" section
27#
28# 2696 2017-12-14 17:12:51Z kanani
29# Change in file header (GPL part)
30#
31# 1310 2014-03-14 08:01:56Z raasch
32# update GPL copyright
33#
34# 1046 2012-11-09 14:38:45Z maronga
35# code put under GPL (PALM 3.9)
36#
37# process_dvr_output - a script processing dvr steering + data files
38
39     # This script determines the number of streams opened by the dvr software
40     # and creates one single dvrs- and html-file which allow the dvr-plugin
41     # to display all streams in one sequence.
42
43     # Last changes:
44     # 16/03/09 - Siggi - Generating the first version
45
46
47
48    # Variable declarations + default values
49 camera=false
50 create_config_file=false
51 create_sequence_output=false
52 data_catalog=`pwd`
53 dvrp_output=rtsp
54 file_identifier=all_streams
55 groundplate=false
56 palm_run_identifier="unknown_run"
57 topography=false
58
59 typeset  -i  a acceleration=1 k i j nstream nscenes
60
61
62    # Read shellscript options
63 while  getopts  :a:cd:f:ls option
64 do
65   case  $option  in
66       (a)   acceleration=$OPTARG;;
67       (c)   create_config_file=true;;
68       (d)   data_catalog=$OPTARG;;
69       (f)   file_identifier=$OPTARG;;
70       (l)   dvrp_output=local;;
71       (s)   create_sequence_output=true;;
72       (\?)  printf "\n  +++ unknown option $OPTARG \n"
73             printf "\n      allowed option are -d, -f, -l, -s \n"
74             exit;;
75   esac
76 done
77
78
79    # Create the config file for the streaming server; do nothing else
80 if [[ $create_config_file = true ]]
81 then
82    cp  ${PALM_BIN}/.dvrserver.config  .
83
84       # Entering the BASEDIR, UID and GID into this file
85    user_id=`id -u`
86    group_id=`id -g`
87
88       # data directory is always the current working directory
89    sed "s/<replace by dvr data directory>/./g" .dvrserver.config > .dvrserver.1
90    sed "s/<replace by user id>/$user_id/g"    .dvrserver.1 > .dvrserver.2
91    sed "s/<replace by group id>/$group_id/g"  .dvrserver.2 > .dvrserver.3
92    mv  .dvrserver.3  .dvrserver.config
93    rm  .dvrserver.1  .dvrserver.2
94    exit
95 fi
96
97
98    # Find out the PALM run identifier
99 if [[ -f CPU_MEASURES ]]
100 then
101    palm_run_identifier=`head -1  CPU_MEASURES`
102 fi
103
104
105    # Process the streaming server output
106 if [[ $dvrp_output = rtsp ]]
107 then
108
109       # Change to the given directory
110    cd $data_catalog
111
112
113       # Find out the number of streams
114    (( i = 0 ))
115    while true
116    do
117       (( i = i + 1 ))
118       if (( i < 10 ))
119       then
120          cstream=0$i
121       else
122          cstream=$i
123       fi
124
125       if [[ $(ls -1 *.* | grep -c $cstream) = 0 ]]
126       then
127          (( i = i - 1 ))
128          break
129       fi
130
131          # find out the stream name
132       streamname[$i]=`ls -1 ${cstream}_*-ge.dvrs | cut -f1 -d"-"`
133
134          # get addres
135       adr[$i]=`grep ADR= ${streamname[$i]}.dvrs | grep '*' | cut -f2 -d"="`
136
137          # get maxbytes
138       maxbytes[$i]=`head -1 ${streamname[$i]}.max`
139
140          # get number of frames
141       frames[$i]=`tail -1 ${streamname[$i]}.max`
142
143    done
144
145    nstream=$i
146    nscenes=$nstream
147
148
149       # Check, if there are files containing the camera data, the ground plate
150       # and topography data.
151       # Check the first stream only, because all streams have the same files.
152    if [[ -f ${streamname[1]}_camera.max ]]
153    then
154       camera=true
155       adr_camera=`grep ADR= ${streamname[1]}.dvrs | grep 'camera' | cut -f2 -d"="`
156       maxbytes_camera=`head -1 ${streamname[1]}_camera.max`
157       (( nscenes = nscenes + 1 ))
158    fi
159    if [[ -f ${streamname[1]}_groundplate.max ]]
160    then
161       groundplate=true
162       adr_groundplate=`echo $adr_camera | sed "s/camera/groundplate/g"`
163       maxbytes_groundplate=`head -1 ${streamname[1]}_groundplate.max`
164       (( nscenes = nscenes + 1 ))
165    fi
166    if [[ -f ${streamname[1]}_topography.max ]]
167    then
168       topography=true
169       adr_topography=`echo $adr_camera | sed "s/camera/topography/g"`
170       maxbytes_topography=`head -1 ${streamname[1]}_topography.max`
171       (( nscenes = nscenes + 1 ))
172    fi
173
174
175
176       # Start with writing the dvrs file for the combined streams
177    dvr_file=${file_identifier}_streaming.dvrs
178
179    echo  "SCENES=$nscenes"  >  $dvr_file
180
181       # First, add the static scenes
182    if [[ $camera = true ]]
183    then
184       echo  "MED=TCP"                    >>  $dvr_file
185       echo  "ADR=$adr_camera"            >>  $dvr_file
186       echo  "MAXBYTES=$maxbytes_camera"  >>  $dvr_file
187       echo  "FRAMES=1"                   >>  $dvr_file
188       echo  "FRAMES_P_SEC=0"             >>  $dvr_file
189       echo  "SCENEEND"                   >>  $dvr_file
190    fi
191
192    if [[ $groundplate = true ]]
193    then
194       echo  "MED=TCP"                         >>  $dvr_file
195       echo  "ADR=$adr_groundplate"            >>  $dvr_file
196       echo  "MAXBYTES=$maxbytes_groundplate"  >>  $dvr_file
197       echo  "FRAMES=1"                        >>  $dvr_file
198       echo  "FRAMES_P_SEC=0"                  >>  $dvr_file
199       echo  "SCENEEND"                        >>  $dvr_file
200    fi
201
202    if [[ $topography = true ]]
203    then
204       echo  "MED=TCP"                        >>  $dvr_file
205       echo  "ADR=$adr_topography"            >>  $dvr_file
206       echo  "MAXBYTES=$maxbytes_topography"  >>  $dvr_file
207       echo  "FRAMES=1"                       >>  $dvr_file
208       echo  "FRAMES_P_SEC=0"                 >>  $dvr_file
209       echo  "SCENEEND"                       >>  $dvr_file
210    fi
211
212
213       # Now add the streams
214    (( i = 0 ))
215    while (( i < nstream ))
216    do
217
218       (( i = i + 1 ))
219
220       echo  "MED=TCP"                   >>  $dvr_file
221       echo  "ADR=${adr[$i]}"            >>  $dvr_file
222       echo  "MAXBYTES=${maxbytes[$i]}"  >>  $dvr_file
223       echo  "FRAMES=${frames[$i]}"      >>  $dvr_file
224       echo  "FRAMES_P_SEC=25"           >>  $dvr_file
225       echo  "SCENEEND"                  >>  $dvr_file
226
227    done
228
229
230       # Change path to the current file identifier
231       # Remove path because BASEDIR of streaming server is set to "."
232#    sed  "s/DATA_DVR/${file_identifier}_dvr/g"  $dvr_file > tmp_file
233    sed  "s/DATA_DVR\///g"  $dvr_file > tmp_file
234    mv  tmp_file  $dvr_file
235
236
237       # If there is a dvr configuration file, set the BASEDIR to the parent
238       # directory of the above given path (i.e. ".")
239    if [[ -f .dvrserver.config ]]
240    then
241       old_path=`grep  BASEDIR  .dvrserver.config`
242       sed  "s&${old_path}&BASEDIR=.&g"  .dvrserver.config  >  .dvrserver.config.new
243       mv  .dvrserver.config.new  .dvrserver.config
244    fi
245
246
247       # Create the html file for the combined streames
248    cp  01_*-ge.html  tmp.html
249    replace=$(echo `grep src= tmp.html`)
250    sed "s&${replace}&src=\"${file_identifier}_streaming.dvrs\"&g" tmp.html > tmp1.html
251    if [[ "$palm_run_identifier" = "" ]]
252    then
253       cp  tmp1.html  ${file_identifier}_streaming.html
254    else
255       sed "s&DATA_DVR/${streamname[1]}/\*\*\*\*\*.dvr (DVR 3D Streaming)&DVR 3D streaming generated by $palm_run_identifier&g"  tmp1.html  >  ${file_identifier}_streaming.html
256    fi
257    rm  tmp.html  tmp1.html
258
259
260       # Informative messages
261    printf "\n\n  *** processing dvr stream output:"
262    printf "\n      number of detected streams = $nstream"
263    printf "\n      stream names:"
264
265    (( i = 0 ))
266    while (( i < nstream ))
267    do
268
269       (( i = i + 1 ))
270       printf " ${streamname[$i]}"
271
272    done
273    printf "\n"
274
275
276 else
277
278       # This is the branch for local output (dvrp_output=local).
279       # Find out the number of streams.
280    (( i = 0 ))
281    while true
282    do
283
284       (( i = i + 1 ))
285       if (( i < 10 ))
286       then
287          cstream=0$i
288       else
289          cstream=$i
290       fi
291
292       if [[ $(ls -1 *.* | grep -c ${cstream}_) = 0 ]]
293       then
294          (( i = i - 1 ))
295          break
296       fi
297
298          # find out the stream name
299       streamname[$i]=`ls -1 ${cstream}_*.camera.dvr | cut -f1 -d"."`
300
301    done
302
303       # Exit, if there are no streams.
304    [[ $i = 0 ]]  &&  exit
305
306    nstream=$i
307
308    mkdir -p  ${data_catalog}/sequence_data
309
310
311       # First, merge static scenes into one file
312    if [[ -f ${streamname[1]}.camera.dvr ]]
313    then
314       cat  ${streamname[1]}.camera.dvr  >>  ${data_catalog}/sequence_data/static_scenes.dvr
315    fi
316
317    if [[ -f ${streamname[1]}.groundplate.dvr ]]
318    then
319       cat  ${streamname[1]}.groundplate.dvr  >>  ${data_catalog}/sequence_data/static_scenes.dvr
320    fi
321
322    if [[ -f ${streamname[1]}.topography.dvr ]]
323    then
324       cat  ${streamname[1]}.topography.dvr  >>  ${data_catalog}/sequence_data/static_scenes.dvr
325    fi
326
327
328       # Find out the number of frames
329    frames[1]=`grep sequence ${streamname[1]}_00000.html | cut -f2 -d";" | cut -f1 -d'"' | cut -f2 -d"-"`
330
331
332       # Now, merge the data, frame by frame
333    (( j = 0 ))
334    while (( j < ${frames[1]} ))
335    do
336
337       nframe=`printf "%05d" $j`
338
339       (( i = 0 ))
340       while (( i < nstream ))
341       do
342          (( i = i + 1 ))
343          cat  ${streamname[$i]}_$nframe.dvr  >>  ${data_catalog}/sequence_data/$nframe.dvr
344       done
345
346       (( j = j + 1 ))
347
348    done
349
350
351       # Create the html file to be used for the sequence mode
352    cp  ${streamname[1]}_00000.html  tmp1.html
353    sed  "s&${streamname[1]}_camera.dvr&sequence_data/static_scenes.dvr&g"  tmp1.html  >  tmp2.html
354    sed  "s&${streamname[1]}_&sequence_data/&g"  tmp2.html  >  tmp3.html
355    if [[ "$palm_run_identifier" = "" ]]
356    then
357       cp  tmp3.html  ${file_identifier}_sequence.html
358    else
359       sed "s&sequence_data/%05d.dvr (DVR 3D Sequence)&DVR 3D sequence generated by $palm_run_identifier&g"  tmp3.html  >  ${file_identifier}_sequence.html
360    fi
361    rm  tmp1.html  tmp2.html  tmp3.html
362    mv  ${file_identifier}_sequence.html  ${data_catalog}
363
364
365       # Informative messages
366    printf "\n\n  *** processing dvr local output (using dvrp_output=local):"
367    printf "\n      number of detected streams = $nstream"
368    printf "\n      stream names:"
369
370    (( i = 0 ))
371    while (( i < nstream ))
372    do
373
374       (( i = i + 1 ))
375       printf " ${streamname[$i]}"
376
377    done
378    printf "\n"
379
380 fi
381
382
383    # Create output for viewing dvr data in sequence mode
384 if [[ $create_sequence_output = true ]]
385 then
386
387    rm -rf  sequence_data
388    mkdir  sequence_data
389
390       # First, merge static scenes into one file
391    if [[ $camera = true ]]
392    then
393       cat  ${streamname[1]}/camera.dvr  >>  sequence_data/static_scenes.dvr
394    fi
395
396    if [[ $groundplate = true ]]
397    then
398       cat  ${streamname[1]}/groundplate.dvr  >>  sequence_data/static_scenes.dvr
399    fi
400
401    if [[ $topography = true ]]
402    then
403       cat  ${streamname[1]}/topography.dvr  >>  sequence_data/static_scenes.dvr
404    fi
405
406
407       # Now, merge the data, frame by frame
408    (( j = 0 ))
409    (( k = 0 ))
410    (( a = 0 ))
411    while (( j < ${frames[1]} ))
412    do
413
414       rframe=`printf "%05d" $j`
415
416       if (( a == 0 ))
417       then
418
419          wframe=`printf "%05d" $k`
420          (( k = k + 1 ))
421
422          (( i = 0 ))
423          while (( i < nstream ))
424          do
425             (( i = i + 1 ))
426             cat  ${streamname[$i]}/$rframe.dvr  >>  sequence_data/$wframe.dvr
427          done
428
429
430       fi
431
432       (( a = a + 1 ))
433       if (( a == acceleration ))
434       then
435          (( a = 0 ))
436       fi
437
438       (( j = j + 1 ))
439
440    done
441
442
443       # Create the html file to be used for the sequence mode
444    cp  ${streamname[1]}.html  tmp1.html
445    sed  "s/camera.dvr/static_scenes.dvr/g"  tmp1.html  >  tmp2.html
446    sed  "s&${streamname[1]}&sequence_data&g"  tmp2.html  >  tmp3.html
447    sed  "s/;0-0/;0-$wframe/g"  tmp3.html  >  tmp4.html
448    if [[ "$palm_run_identifier" = "" ]]
449    then
450       cp  tmp4.html  ${file_identifier}_sequence.html
451    else
452       sed "s&DATA_DVR/sequence_data/\*\*\*\*\*.dvr (DVR 3D Sequence)&DVR 3D sequence generated by $palm_run_identifier&g"  tmp4.html  >  ${file_identifier}_sequence.html
453    fi
454    rm  tmp1.html  tmp2.html  tmp3.html  tmp4.html
455
456    printf "      data for using sequence mode generated"
457
458 fi
459
460
461
462    # Change back to directory from where script has been called
463 cd - > /dev/null  2>&1
Note: See TracBrowser for help on using the repository browser.