@@ -36,7 +36,18 @@ void CmdLine::PrintMode()
3636 if (opt.sparse_pcm ) std::cout << " sparse-pcm" ;
3737 if (opt.optimize ) {
3838 std::cout << " opt (" << std::format (" {:.1f}%" , opt.optimize_fraction *100.0 );
39- std::cout << " ,n=" << opt.optimize_maxnfunc << " )" ;
39+ std::cout << " ,n=" << opt.optimize_maxnfunc << " ," ;
40+
41+ std::string cost_str;
42+ switch (opt.optimize_cost ) {
43+ case opt.SearchCost ::L1:cost_str=" L1" ;break ;
44+ case opt.SearchCost ::RMS:cost_str=" rms" ;break ;
45+ case opt.SearchCost ::Golomb:cost_str=" glb" ;break ;
46+ case opt.SearchCost ::Entropy:cost_str=" ent" ;break ;
47+ case opt.SearchCost ::Bitplane:cost_str=" bpn" ;break ;
48+ default :break ;
49+ }
50+ std::cout << cost_str << " )\n " ;
4051 }
4152 std::cout << std::endl;
4253}
@@ -66,8 +77,8 @@ int CmdLine::Parse(int argc,char *argv[])
6677 std::string param,uparam;
6778 int k=1 ;
6879 while (k<argc) {
69- param=uparam= argv[k];
70- StrUtils::StrUpper (uparam );
80+ param=argv[k];
81+ uparam= StrUtils::str_up (param );
7182 std::string key,val;
7283 Split (uparam,key,val);
7384
@@ -107,7 +118,17 @@ int CmdLine::Parse(int argc,char *argv[])
107118 if (vs.size ()>=2 ) {
108119 opt.optimize_fraction =std::clamp (std::stod (vs[0 ]),0 .,1 .);
109120 opt.optimize_maxnfunc =std::clamp (std::stoi (vs[1 ]),0 ,10000 );
121+ if (vs.size ()>=3 ) {
122+ std::string cf=StrUtils::str_up (vs[2 ]);
123+ if (cf==" L1" ) opt.optimize_cost = opt.SearchCost ::L1;
124+ else if (cf==" RMS" ) opt.optimize_cost = opt.SearchCost ::RMS;
125+ else if (cf==" GLB" ) opt.optimize_cost = opt.SearchCost ::Golomb;
126+ else if (cf==" ENT" ) opt.optimize_cost = opt.SearchCost ::Entropy; // default
127+ else if (cf==" BPN" ) opt.optimize_cost = opt.SearchCost ::Bitplane;
128+ else std::cerr << " warning: unknown cost function '" << vs[2 ] << " '\n " ;
129+ }
110130 if (opt.optimize_fraction >0 . && opt.optimize_maxnfunc >0 ) opt.optimize =1 ;
131+ else opt.optimize =0 ;
111132 } else std::cerr << " unknown option: " << val << ' \n ' ;
112133 }
113134 }
@@ -122,7 +143,7 @@ int CmdLine::Parse(int argc,char *argv[])
122143 } else if (key==" --ZERO-MEAN" ) {
123144 if (val==" NO" || val==" 0" ) opt.zero_mean =0 ;
124145 else opt.zero_mean =1 ;
125- } else std::cout << " warning: unknown option '" << param << " '\n " ;
146+ } else std::cerr << " warning: unknown option '" << param << " '\n " ;
126147 } else {
127148 if (first) {sinputfile=param;first=false ;}
128149 else soutputfile=param;
0 commit comments