2 namespace eval VMDecoder {
\r
4 variable JP3Ddecoder "../bin/jp3d_vm_dec.exe"
\r
5 #variable JP3Ddecoder "jp3d_vm_dec.exe"
\r
9 proc VMDecoder::create { nb } {
\r
12 set frameD [$nb insert end VMDecoder -text "Decoder"]
\r
13 set topfD [frame $frameD.topfD]
\r
14 set medfD [frame $frameD.medfD]
\r
15 set bottomfD [frame $frameD.bottomfD]
\r
16 set srcfD [TitleFrame $topfD.srcfD -text "Source"]
\r
17 set dstfD [TitleFrame $topfD.dstfD -text "Destination"]
\r
18 set paramfD [TitleFrame $medfD.paramfD -text "Decoding parameters"]
\r
19 set infofD [TitleFrame $medfD.infofD -text "Distortion measures"]
\r
21 set frame1 [$srcfD getframe]
\r
23 set frame2 [$dstfD getframe]
\r
24 _destinationD $frame2
\r
25 set frame3 [$infofD getframe]
\r
27 set frame4 [$paramfD getframe]
\r
30 set butD [Button $bottomfD.butD -text "Decode!" \
\r
31 -command "VMDecoder::_decode $frame1 $frame2 $frame3" \
\r
32 -helptext "Decoding trigger button"]
\r
33 set butR [Button $bottomfD.butR -text "Save info" \
\r
34 -command "VMDecoder::_save $frame3" \
\r
35 -helptext "Save information"]
\r
37 pack $srcfD $dstfD -side left -fill both -padx 10 -ipadx 5 -expand yes
\r
38 pack $topfD -pady 4 -fill x
\r
40 pack $paramfD $infofD -side left -fill both -padx 10 -pady 2 -ipadx 5 -expand yes
\r
41 pack $medfD -pady 4 -fill x
\r
43 pack $butD $butR -side left -padx 4 -pady 5 -expand yes
\r
44 pack $bottomfD -pady 4 -fill x
\r
50 proc fileDialogD {w ent operation} {
\r
54 if {$operation == "open"} {
\r
55 #-----Type names---------Extension(s)---
\r
57 {"JP3D Files" {.jp3d} }
\r
60 set file [tk_getOpenFile -filetypes $types -parent $w ]
\r
61 } elseif {$operation == "original"} {
\r
62 #-----Type names---------Extension(s)---
\r
64 {"BIN Raw Image Files" {.bin} }
\r
65 {"PGX Raw Image Files" {.pgx} }
\r
68 set file [tk_getOpenFile -filetypes $types -parent $w ]
\r
70 #-----Type names---------Extension(s)---
\r
72 {"BIN Raw Image Files" {.bin} }
\r
73 {"PGX Raw Image Files" {.pgx} }
\r
76 set file [tk_getSaveFile -filetypes $types -parent $w -initialfile Untitled -defaultextension "*.bin"]
\r
78 if {[string compare $file ""]} {
\r
80 $ent insert end $file
\r
85 proc VMDecoder::_sourceD { parent } {
\r
89 set labsrcD [LabelFrame $parent.labsrcD -text "Select compressed file: " -side top \
\r
90 -anchor w -relief flat -borderwidth 0]
\r
91 set subsrcD [$labsrcD getframe]
\r
92 set listD [entry $subsrcD.entrysrcD -width 40 -textvariable VMDecoder::var(sourceD)]
\r
94 set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
\r
95 set subbrw [$labbrw getframe]
\r
96 set butbrw [button $subbrw.butbrw -image [Bitmap::get open] \
\r
97 -relief raised -borderwidth 1 -padx 1 -pady 1 \
\r
98 -command "fileDialogD . $subsrcD.entrysrcD open"]
\r
100 pack $listD -side top
\r
101 pack $butbrw -side top
\r
102 pack $labsrcD $labbrw -side left -fill both -expand yes
\r
107 proc VMDecoder::_destinationD { parent } {
\r
111 set labdstD [LabelFrame $parent.labdstD -text "Save decompressed volume file(s) as: " -side top \
\r
112 -anchor w -relief flat -borderwidth 0]
\r
113 set subdstD [$labdstD getframe]
\r
114 set listD [entry $subdstD.entrydstD -width 40 -textvariable VMDecoder::var(destinationD)]
\r
116 set labbrw [LabelFrame $parent.labbrw -side top -anchor w -relief flat -borderwidth 0]
\r
117 set subbrw [$labbrw getframe]
\r
118 set butbrw [button $subbrw.butbrw -image [Bitmap::get save] \
\r
119 -relief raised -borderwidth 1 -padx 1 -pady 1 \
\r
120 -command "fileDialogD . $subdstD.entrydstD save"]
\r
122 pack $listD -side top
\r
123 pack $butbrw -side top
\r
124 pack $labdstD $labbrw -side left -fill both -expand yes
\r
127 proc VMDecoder::_originalD { parent } {
\r
131 set laborgD [LabelFrame $parent.laborgD -text "Select original file: " -side top \
\r
132 -anchor w -relief flat -borderwidth 0]
\r
133 set suborgD [$laborgD getframe]
\r
134 set listorgD [entry $suborgD.entryorgD -width 30 -textvariable VMDecoder::var(originalD)]
\r
136 set labbrw2 [LabelFrame $parent.labbrw2 -side top -anchor w -relief flat -borderwidth 0]
\r
137 set subbrw2 [$labbrw2 getframe]
\r
138 set butbrw2 [button $subbrw2.butbrw2 -image [Bitmap::get open] \
\r
139 -relief raised -borderwidth 1 -padx 1 -pady 1 \
\r
140 -command "fileDialogD . $suborgD.entryorgD original"]
\r
142 set infoD [Label $parent.infoD -relief sunken -textvariable VMDecoder::var(decodinfo) -justify left]
\r
144 pack $listorgD -side left -anchor n
\r
145 pack $butbrw2 -side left -anchor n
\r
146 pack $infoD -side bottom -anchor nw -pady 4 -ipadx 150 -ipady 20 -expand yes
\r
147 pack $laborgD $labbrw2 -side left -fill both
\r
152 proc VMDecoder::_paramsD { parent } {
\r
156 ########### DECODING #############
\r
157 set labcod [LabelFrame $parent.labcod -side top -anchor w -relief sunken -borderwidth 1]
\r
158 set subcod [$labcod getframe]
\r
160 set frameres [frame $subcod.frameres -borderwidth 1]
\r
161 set labres [LabelEntry $frameres.labres -label "Resolutions to discard: " -labelwidth 20 -labelanchor w \
\r
162 -textvariable VMDecoder::var(resdiscard) -editable 1 \
\r
163 -helptext "Number of highest resolution levels to be discarded on each dimension" ]
\r
164 set VMDecoder::var(resdiscard) "0,0,0"
\r
166 set framelayer [frame $subcod.framelayer -borderwidth 1]
\r
167 set lablayer [LabelEntry $framelayer.lablayer -label "Layers to decode: " -labelwidth 20 -labelanchor w \
\r
168 -textvariable VMDecoder::var(layer) -editable 1 \
\r
169 -helptext "Maximum number of quality layers to decode" ]
\r
170 set VMDecoder::var(layer) "All"
\r
172 set framebe [frame $subcod.framebe -borderwidth 1]
\r
173 set chkbe [checkbutton $framebe.chkbe -text "Write decoded file with BigEndian byte order" \
\r
174 -variable VMDecoder::var(be) -onvalue 1 -offvalue 0 ]
\r
176 pack $labres -side left -padx 2 -anchor n
\r
177 pack $lablayer -side left -padx 2 -anchor n
\r
178 pack $chkbe -side left -padx 2 -anchor w
\r
179 pack $frameres $framelayer $framebe -side top -anchor w
\r
181 pack $subcod -anchor n
\r
182 pack $labcod -side left -fill both -padx 4 -expand yes
\r
186 proc VMDecoder::_decode { framesrc framedst frameinfo} {
\r
190 set sourceD [$framesrc.labsrcD.f.entrysrcD get ]
\r
191 set destinationD [$framedst.labdstD.f.entrydstD get ]
\r
192 set originD [$frameinfo.laborgD.f.entryorgD get ]
\r
193 set cond1 [string match *.pgx [string tolower $destinationD]]
\r
194 set cond2 [string match *\**.pgx [string tolower $destinationD]]
\r
195 set cond3 [string match *.bin [string tolower $destinationD]]
\r
197 #comprobamos datos son correctos
\r
198 if {($cond1 == 1) && ($cond2 == 0)} {
\r
200 set pattern [string range $destinationD 0 [expr [string length $destinationD]-5]]
\r
201 set destinationD $pattern$img
\r
202 } elseif {$sourceD == ""} {
\r
203 MessageDlg .msgdlg -parent . -message "Error : Source file is not defined !" -type ok -icon error
\r
204 } elseif {$destinationD == ""} {
\r
205 MessageDlg .msgdlg -parent . -message "Error : Destination file is not defined !" -type ok -icon error
\r
208 #creamos datain a partir de los parametros de entrada
\r
209 #set dirJP3Ddecoder [mk_relativepath $VMDecoder::JP3Ddecoder]
\r
210 set dirJP3Ddecoder $VMDecoder::JP3Ddecoder
\r
211 set datain [concat " $dirJP3Ddecoder -i [mk_relativepath $sourceD] "]
\r
212 set datain [concat " $datain -o [mk_relativepath $destinationD] "]
\r
213 if {$originD != ""} {
\r
214 set datain [concat " $datain -O [mk_relativepath $originD] "]
\r
217 set pattern [string range $originD 0 [expr [string length $originD]-5]]
\r
218 set pattern $pattern$img
\r
219 if {[file exists $pattern]} {
\r
220 set datain [concat " $datain -m [mk_relativepath $pattern] "]
\r
222 MessageDlg .msgdlg -parent . -message "Error : IMG file associated to original BIN volume file not found in same directory !" -type ok -icon info
\r
226 if {$VMDecoder::var(resdiscard) != "0,0,0"} {
\r
227 set datain [concat " $datain -r $VMDecoder::var(resdiscard) "]
\r
229 if {$VMDecoder::var(layer) != "All" && $VMDecoder::var(layer) > 0} {
\r
230 set datain [concat " $datain -l $VMDecoder::var(layer) "]
\r
232 if {$VMDecoder::var(be) == 1} {
\r
233 set datain [concat " $datain -BE"]
\r
236 set VMDecoder::var(progval) 10
\r
237 ProgressDlg .progress -parent . -title "Wait..." \
\r
240 -textvariable "Compute in progress..."\
\r
241 -variable VMDecoder::progval \
\r
243 -command {destroy .progress}
\r
245 after 200 set VMDecoder::var(progval) 2
\r
247 set fp [open "| $datain " r+]
\r
248 fconfigure $fp -buffering line
\r
249 set jp3dVM::dataout [concat "EXECUTED PROGRAM:\n\t$datain"]
\r
250 while {-1 != [gets $fp tmp]} {
\r
251 set jp3dVM::dataout [concat "$jp3dVM::dataout\n$tmp"]
\r
255 set cond [string first "ERROR" $jp3dVM::dataout]
\r
256 set cond2 [string first "PSNR" $jp3dVM::dataout]
\r
257 set cond3 [string first "RESULT" $jp3dVM::dataout]
\r
259 MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond-1] end] -type ok -icon error
\r
260 } elseif {$cond3 != -1} {
\r
261 if {$cond2 != -1} {
\r
262 set VMDecoder::var(decodinfo) [string range $jp3dVM::dataout [expr $cond2-1] end]
\r
264 MessageDlg .msgdlg -parent . -message [string range $jp3dVM::dataout [expr $cond3-1] end] -type ok -icon info
\r
269 proc VMDecoder::_save { frameinfo } {
\r